summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/attic/files/cli/test1/Main.check.j9vm5 (renamed from test/files/cli/test1/Main.check.j9vm5)0
-rw-r--r--test/attic/files/cli/test1/Main.check.java (renamed from test/files/cli/test1/Main.check.java)0
-rw-r--r--test/attic/files/cli/test1/Main.check.java5 (renamed from test/files/cli/test1/Main.check.java5)0
-rw-r--r--test/attic/files/cli/test1/Main.check.java5_api (renamed from test/files/cli/test1/Main.check.java5_api)0
-rw-r--r--test/attic/files/cli/test1/Main.check.java5_j9 (renamed from test/files/cli/test1/Main.check.java5_j9)0
-rw-r--r--test/attic/files/cli/test1/Main.check.javac (renamed from test/files/cli/test1/Main.check.javac)0
-rw-r--r--test/attic/files/cli/test1/Main.check.javac5 (renamed from test/files/cli/test1/Main.check.javac5)0
-rw-r--r--test/attic/files/cli/test1/Main.check.javac6 (renamed from test/files/cli/test1/Main.check.javac6)0
-rw-r--r--test/attic/files/cli/test1/Main.check.jikes (renamed from test/files/cli/test1/Main.check.jikes)0
-rw-r--r--test/attic/files/cli/test1/Main.check.jikes5 (renamed from test/files/cli/test1/Main.check.jikes5)0
-rw-r--r--test/attic/files/cli/test1/Main.check.scala (renamed from test/files/cli/test1/Main.check.scala)0
-rw-r--r--test/attic/files/cli/test1/Main.check.scala_api (renamed from test/files/cli/test1/Main.check.scala_api)0
-rw-r--r--test/attic/files/cli/test1/Main.check.scala_j9 (renamed from test/files/cli/test1/Main.check.scala_j9)0
-rw-r--r--test/attic/files/cli/test1/Main.check.scalac (renamed from test/files/cli/test1/Main.check.scalac)0
-rw-r--r--test/attic/files/cli/test1/Main.check.scalaint (renamed from test/files/cli/test1/Main.check.scalaint)0
-rw-r--r--test/attic/files/cli/test1/Main.java (renamed from test/files/cli/test1/Main.java)0
-rw-r--r--test/attic/files/cli/test1/Main.scala (renamed from test/files/cli/test1/Main.scala)0
-rw-r--r--test/attic/files/cli/test2/Main.check.j9vm5 (renamed from test/files/cli/test2/Main.check.j9vm5)0
-rw-r--r--test/attic/files/cli/test2/Main.check.java (renamed from test/files/cli/test2/Main.check.java)0
-rw-r--r--test/attic/files/cli/test2/Main.check.java5 (renamed from test/files/cli/test2/Main.check.java5)0
-rw-r--r--test/attic/files/cli/test2/Main.check.java5_api (renamed from test/files/cli/test2/Main.check.java5_api)0
-rw-r--r--test/attic/files/cli/test2/Main.check.java5_j9 (renamed from test/files/cli/test2/Main.check.java5_j9)0
-rw-r--r--test/attic/files/cli/test2/Main.check.javac (renamed from test/files/cli/test2/Main.check.javac)0
-rw-r--r--test/attic/files/cli/test2/Main.check.javac5 (renamed from test/files/cli/test2/Main.check.javac5)0
-rw-r--r--test/attic/files/cli/test2/Main.check.javac6 (renamed from test/files/cli/test2/Main.check.javac6)0
-rw-r--r--test/attic/files/cli/test2/Main.check.jikes (renamed from test/files/cli/test2/Main.check.jikes)0
-rw-r--r--test/attic/files/cli/test2/Main.check.jikes5 (renamed from test/files/cli/test2/Main.check.jikes5)0
-rw-r--r--test/attic/files/cli/test2/Main.check.scala (renamed from test/files/cli/test2/Main.check.scala)0
-rw-r--r--test/attic/files/cli/test2/Main.check.scala_api (renamed from test/files/cli/test2/Main.check.scala_api)0
-rw-r--r--test/attic/files/cli/test2/Main.check.scala_j9 (renamed from test/files/cli/test2/Main.check.scala_j9)0
-rw-r--r--test/attic/files/cli/test2/Main.check.scalac (renamed from test/files/cli/test2/Main.check.scalac)0
-rw-r--r--test/attic/files/cli/test2/Main.check.scalaint (renamed from test/files/cli/test2/Main.check.scalaint)0
-rw-r--r--test/attic/files/cli/test2/Main.java (renamed from test/files/cli/test2/Main.java)0
-rw-r--r--test/attic/files/cli/test2/Main.scala (renamed from test/files/cli/test2/Main.scala)2
-rw-r--r--test/attic/files/cli/test3/Main.check.j9vm5 (renamed from test/files/cli/test3/Main.check.j9vm5)0
-rw-r--r--test/attic/files/cli/test3/Main.check.java (renamed from test/files/cli/test3/Main.check.java)0
-rw-r--r--test/attic/files/cli/test3/Main.check.java5 (renamed from test/files/cli/test3/Main.check.java5)0
-rw-r--r--test/attic/files/cli/test3/Main.check.java5_api (renamed from test/files/cli/test3/Main.check.java5_api)0
-rw-r--r--test/attic/files/cli/test3/Main.check.java5_j9 (renamed from test/files/cli/test3/Main.check.java5_j9)0
-rw-r--r--test/attic/files/cli/test3/Main.check.javac (renamed from test/files/cli/test3/Main.check.javac)0
-rw-r--r--test/attic/files/cli/test3/Main.check.javac5 (renamed from test/files/cli/test3/Main.check.javac5)0
-rw-r--r--test/attic/files/cli/test3/Main.check.javac6 (renamed from test/files/cli/test3/Main.check.javac6)0
-rw-r--r--test/attic/files/cli/test3/Main.check.jikes (renamed from test/files/cli/test3/Main.check.jikes)0
-rw-r--r--test/attic/files/cli/test3/Main.check.jikes5 (renamed from test/files/cli/test3/Main.check.jikes5)0
-rw-r--r--test/attic/files/cli/test3/Main.check.scala (renamed from test/files/cli/test3/Main.check.scala)0
-rw-r--r--test/attic/files/cli/test3/Main.check.scala_api (renamed from test/files/cli/test3/Main.check.scala_api)0
-rw-r--r--test/attic/files/cli/test3/Main.check.scala_j9 (renamed from test/files/cli/test3/Main.check.scala_j9)0
-rw-r--r--test/attic/files/cli/test3/Main.check.scalac (renamed from test/files/cli/test3/Main.check.scalac)0
-rw-r--r--test/attic/files/cli/test3/Main.check.scalaint (renamed from test/files/cli/test3/Main.check.scalaint)0
-rw-r--r--test/attic/files/cli/test3/Main.java (renamed from test/files/cli/test3/Main.java)0
-rw-r--r--test/attic/files/cli/test3/Main.scala (renamed from test/files/cli/test3/Main.scala)0
-rwxr-xr-xtest/benchmarks/bench63
-rw-r--r--test/benchmarks/lib/jsr166_and_extra.jar.desired.sha11
-rw-r--r--test/benchmarks/source.list79
-rw-r--r--test/benchmarks/src/scala/collection/immutable/range-bench.scala61
-rw-r--r--test/benchmarks/src/scala/collection/mutable/hashtable-bench.scala61
-rw-r--r--test/benchmarks/src/scala/collection/parallel/Benchmarking.scala223
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/Bench.scala126
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/Arrays.scala63
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/Dummy.scala22
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/IntAccess.scala68
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/ObjectAccess.scala75
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/Resetting.scala39
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/UnknownManif.scala38
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/generic/Dummy.scala83
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/generic/Operators.scala64
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/generic/ParallelBenches.scala362
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/hashtables/ParallelHashTableSets.scala144
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/hashtables/ParallelHashTables.scala232
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Combine.scala66
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Construct.scala54
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Foreach.scala45
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/IntInit.scala31
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Iterate.scala51
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Lookup.scala57
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/MultipleCombine.scala87
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/ParallelHashTries.scala180
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/misc/Coder.scala162
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/misc/Dictionary.scala13
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/misc/Loader.scala66
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/misc/dict.txt58111
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/AggregateLight.scala39
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/Companion.scala9
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/CopyToArray.scala21
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/Corresponds.scala47
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/CountHeavy.scala36
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/CountLight.scala22
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/CountList.scala30
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/DiffHalf.scala48
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/DropMany.scala47
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ExistsLight.scala49
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/FilterLight.scala64
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/FindLight.scala52
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/FlatMapLight.scala24
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForallHeavy.scala59
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForallLight.scala46
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForallQuickStop.scala46
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForallStop80k.scala46
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForeachHeavy.scala45
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForeachLight.scala26
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/GroupBy.scala45
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/IndexWhere.scala47
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/IntersectHalf.scala48
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/LastIndexWhere.scala47
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/MapLight.scala27
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/MatrixMultiplication.scala84
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/MinLight.scala28
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PadToDouble.scala53
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PartialMapLight.scala24
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PartitionLight.scala61
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PatchHalf.scala46
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PlusPlus.scala29
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReduceHeavy.scala22
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReduceLight.scala50
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReduceList.scala53
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReduceNew.scala30
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReducePrime.scala65
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/RemoveDuplicates.scala44
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/Resettable.scala127
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/Reverse.scala35
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReverseMap.scala48
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SameElementsLong.scala45
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ScanLight.scala46
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ScanMedium.scala55
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SegmentLength.scala42
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SequentialOps.scala562
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SliceFew.scala47
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SliceMany.scala47
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SliceMedium.scala47
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SpanLight.scala62
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SplitHalf.scala47
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SumLight.scala28
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/TakeMany.scala47
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/TakeWhileLight.scala61
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_range/RangeBenches.scala211
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_view/SeqViewBenches.scala51
-rw-r--r--test/benchmarks/src/scala/util/HashSpeedTest.scala253
-rw-r--r--test/checker-tests/fail1.scala17
-rw-r--r--test/checker-tests/fail10.scala23
-rw-r--r--test/checker-tests/fail12.scala20
-rw-r--r--test/checker-tests/fail2.scala50
-rw-r--r--test/checker-tests/fail6.scala61
-rw-r--r--test/checker-tests/fail7.scala70
-rw-r--r--test/debug/buildmanager/.gitignore (renamed from test/files/jvm/bug680.check)0
-rw-r--r--test/debug/jvm/.gitignore0
-rw-r--r--test/debug/neg/.gitignore0
-rw-r--r--test/debug/pos/.gitignore0
-rw-r--r--test/debug/res/.gitignore0
-rw-r--r--test/debug/run/.gitignore0
-rw-r--r--test/debug/scalacheck/.gitignore0
-rw-r--r--test/debug/scalap/.gitignore0
-rw-r--r--test/debug/shootout/.gitignore0
-rw-r--r--test/disabled-windows/script/loadAndExecute.check (renamed from test/files/script/loadAndExecute/loadAndExecute.check)0
-rwxr-xr-xtest/disabled-windows/script/loadAndExecute/lAndE1.scala (renamed from test/files/script/loadAndExecute/lAndE1.scala)0
-rwxr-xr-xtest/disabled-windows/script/loadAndExecute/lAndE2.scala (renamed from test/files/script/loadAndExecute/lAndE2.scala)0
-rwxr-xr-xtest/disabled-windows/script/loadAndExecute/loadAndExecute.scala (renamed from test/files/script/loadAndExecute/loadAndExecute.scala)0
-rwxr-xr-xtest/disabled-windows/script/utf8.bat (renamed from test/files/script/utf8.bat)0
-rw-r--r--test/disabled-windows/script/utf8.check (renamed from test/files/script/utf8.check)0
-rwxr-xr-xtest/disabled-windows/script/utf8.scala26
-rw-r--r--test/disabled/buildmanager/t2651_1/A.scala1
-rw-r--r--test/disabled/buildmanager/t2651_1/B.scala2
-rw-r--r--test/disabled/buildmanager/t2651_1/C.scala3
-rw-r--r--test/disabled/buildmanager/t2651_1/D.scala3
-rw-r--r--test/disabled/buildmanager/t2651_1/t2651_1.changes/A2.scala2
-rw-r--r--test/disabled/buildmanager/t2651_1/t2651_1.check19
-rw-r--r--test/disabled/buildmanager/t2651_1/t2651_1.test3
-rw-r--r--test/disabled/coder/Coder.scala212
-rw-r--r--test/disabled/coder/Dictionary.scala10
-rw-r--r--test/disabled/coder/dict.txt58111
-rw-r--r--test/disabled/jvm/JavaInteraction.check (renamed from test/files/jvm/JavaInteraction.check)0
-rw-r--r--test/disabled/jvm/JavaInteraction.scala38
-rw-r--r--test/disabled/jvm/libnatives.jnilibbin8456 -> 0 bytes
-rw-r--r--test/disabled/neg/abstract-report3.check39
-rw-r--r--test/disabled/neg/abstract-report3.scala1
-rw-r--r--test/disabled/pos/caseclass-parents.flags1
-rw-r--r--test/disabled/pos/caseclass-parents.scala11
-rw-r--r--test/disabled/pos/caseclass-productN.flags1
-rw-r--r--test/disabled/pos/caseclass-productN.scala20
-rw-r--r--test/disabled/pos/spec-List.scala (renamed from test/files/pos/spec-List.scala)54
-rwxr-xr-xtest/disabled/pos/t1545.scala18
-rw-r--r--test/disabled/pos/t1737/A.java3
-rw-r--r--test/disabled/pos/t1737/B.java1
-rw-r--r--test/disabled/pos/t1737/c.scala4
-rw-r--r--test/disabled/pos/t2919.scala12
-rw-r--r--test/disabled/presentation/akka.check492
-rw-r--r--test/disabled/presentation/akka.flags18
-rw-r--r--test/disabled/presentation/akka/Runner.scala3
-rw-r--r--test/disabled/presentation/akka/src/akka/AkkaException.scala40
-rw-r--r--test/disabled/presentation/akka/src/akka/actor/Actor.scala503
-rw-r--r--test/disabled/presentation/akka/src/akka/actor/ActorRef.scala1433
-rw-r--r--test/disabled/presentation/akka/src/akka/actor/ActorRegistry.scala389
-rw-r--r--test/disabled/presentation/akka/src/akka/actor/Actors.java108
-rw-r--r--test/disabled/presentation/akka/src/akka/actor/BootableActorLoaderService.scala60
-rw-r--r--test/disabled/presentation/akka/src/akka/actor/FSM.scala527
-rw-r--r--test/disabled/presentation/akka/src/akka/actor/Scheduler.scala133
-rw-r--r--test/disabled/presentation/akka/src/akka/actor/Supervisor.scala176
-rw-r--r--test/disabled/presentation/akka/src/akka/actor/UntypedActor.scala134
-rw-r--r--test/disabled/presentation/akka/src/akka/actor/package.scala23
-rw-r--r--test/disabled/presentation/akka/src/akka/config/Config.scala93
-rw-r--r--test/disabled/presentation/akka/src/akka/config/ConfigParser.scala74
-rw-r--r--test/disabled/presentation/akka/src/akka/config/Configuration.scala166
-rw-r--r--test/disabled/presentation/akka/src/akka/config/Configurator.scala21
-rw-r--r--test/disabled/presentation/akka/src/akka/config/Importer.scala64
-rw-r--r--test/disabled/presentation/akka/src/akka/config/SupervisionConfig.scala134
-rw-r--r--test/disabled/presentation/akka/src/akka/dataflow/DataFlow.scala165
-rw-r--r--test/disabled/presentation/akka/src/akka/dispatch/Dispatchers.scala227
-rw-r--r--test/disabled/presentation/akka/src/akka/dispatch/ExecutorBasedEventDrivenDispatcher.scala305
-rw-r--r--test/disabled/presentation/akka/src/akka/dispatch/ExecutorBasedEventDrivenWorkStealingDispatcher.scala165
-rw-r--r--test/disabled/presentation/akka/src/akka/dispatch/Future.scala832
-rw-r--r--test/disabled/presentation/akka/src/akka/dispatch/MailboxHandling.scala68
-rw-r--r--test/disabled/presentation/akka/src/akka/dispatch/MessageHandling.scala260
-rw-r--r--test/disabled/presentation/akka/src/akka/dispatch/ThreadBasedDispatcher.scala52
-rw-r--r--test/disabled/presentation/akka/src/akka/dispatch/ThreadPoolBuilder.scala259
-rw-r--r--test/disabled/presentation/akka/src/akka/event/EventHandler.scala235
-rw-r--r--test/disabled/presentation/akka/src/akka/event/JavaEventHandler.java35
-rw-r--r--test/disabled/presentation/akka/src/akka/japi/JavaAPI.scala108
-rw-r--r--test/disabled/presentation/akka/src/akka/remoteinterface/RemoteEventHandler.scala43
-rw-r--r--test/disabled/presentation/akka/src/akka/remoteinterface/RemoteInterface.scala493
-rw-r--r--test/disabled/presentation/akka/src/akka/routing/Iterators.scala49
-rw-r--r--test/disabled/presentation/akka/src/akka/routing/Listeners.scala37
-rw-r--r--test/disabled/presentation/akka/src/akka/routing/Pool.scala292
-rw-r--r--test/disabled/presentation/akka/src/akka/routing/Routers.scala87
-rw-r--r--test/disabled/presentation/akka/src/akka/routing/Routing.scala64
-rw-r--r--test/disabled/presentation/akka/src/akka/util/Address.scala29
-rw-r--r--test/disabled/presentation/akka/src/akka/util/AkkaLoader.scala94
-rw-r--r--test/disabled/presentation/akka/src/akka/util/Bootable.scala10
-rw-r--r--test/disabled/presentation/akka/src/akka/util/BoundedBlockingQueue.scala326
-rw-r--r--test/disabled/presentation/akka/src/akka/util/Crypt.scala44
-rw-r--r--test/disabled/presentation/akka/src/akka/util/Duration.scala437
-rw-r--r--test/disabled/presentation/akka/src/akka/util/HashCode.scala57
-rw-r--r--test/disabled/presentation/akka/src/akka/util/Helpers.scala99
-rw-r--r--test/disabled/presentation/akka/src/akka/util/ListenerManagement.scala81
-rw-r--r--test/disabled/presentation/akka/src/akka/util/LockUtil.scala197
-rw-r--r--test/disabled/presentation/akka/src/akka/util/ReflectiveAccess.scala232
-rw-r--r--test/disabled/presentation/akka/src/akka/util/package.scala27
-rw-r--r--test/disabled/presentation/akka/src/com/eaio/util/lang/Hex.java215
-rw-r--r--test/disabled/presentation/akka/src/com/eaio/uuid/MACAddressParser.java116
-rw-r--r--test/disabled/presentation/akka/src/com/eaio/uuid/UUID.java311
-rw-r--r--test/disabled/presentation/akka/src/com/eaio/uuid/UUIDGen.java364
-rw-r--r--test/disabled/presentation/akka/src/com/eaio/uuid/UUIDHelper.java86
-rw-r--r--test/disabled/presentation/akka/src/com/eaio/uuid/UUIDHolder.java42
-rw-r--r--test/disabled/presentation/akka/src/pi.scala108
-rw-r--r--test/disabled/presentation/ide-bug-1000450.check0
-rw-r--r--test/disabled/presentation/ide-bug-1000450/Runner.scala6
-rw-r--r--test/disabled/presentation/ide-bug-1000450/src/Ranges.scala5
-rw-r--r--test/disabled/presentation/ide-bug-1000508.check163
-rw-r--r--test/disabled/presentation/ide-bug-1000508/Runner.scala3
-rw-r--r--test/disabled/presentation/ide-bug-1000508/src/Foo.scala3
-rw-r--r--test/disabled/presentation/ide-bug-1000545.check0
-rw-r--r--test/disabled/presentation/ide-bug-1000545/Runner.scala3
-rw-r--r--test/disabled/presentation/ide-bug-1000545/src/CompletionFails.scala25
-rw-r--r--test/disabled/presentation/ide-t1000620.check37
-rw-r--r--test/disabled/presentation/ide-t1000620/Runner.scala3
-rw-r--r--test/disabled/presentation/ide-t1000620/src/a/A.scala5
-rw-r--r--test/disabled/presentation/ide-t1000620/src/b/B.scala8
-rw-r--r--test/disabled/presentation/simple-tests.check390
-rw-r--r--test/disabled/presentation/simple-tests.javaopts1
-rw-r--r--test/disabled/presentation/simple-tests.opts18
-rw-r--r--test/disabled/presentation/simple-tests/SimpleInteractiveTest.scala11
-rw-r--r--test/disabled/presentation/simple-tests/src/Tester.scala204
-rw-r--r--test/disabled/presentation/timeofday.check100
-rw-r--r--test/disabled/presentation/timeofday/Runner.scala3
-rw-r--r--test/disabled/presentation/timeofday/src/timeofday.scala35
-rw-r--r--test/disabled/properties.check158
-rw-r--r--test/disabled/properties/Runner.scala3
-rw-r--r--test/disabled/properties/src/properties.scala54
-rw-r--r--test/disabled/run/applet-prop.scala40
-rw-r--r--test/disabled/run/code.check18
-rw-r--r--test/disabled/run/coder2/Coder2.scala212
-rw-r--r--test/disabled/run/coder2/Dictionary.scala10
-rw-r--r--test/disabled/run/docgenerator.check (renamed from test/files/run/docgenerator.check)0
-rw-r--r--test/disabled/run/docgenerator.scala (renamed from test/files/run/docgenerator.scala)6
-rw-r--r--test/disabled/run/javap.check18
-rw-r--r--test/disabled/run/javap.scala24
-rw-r--r--test/disabled/run/lisp.check (renamed from test/files/run/lisp.check)0
-rw-r--r--test/disabled/run/lisp.scala (renamed from test/files/run/lisp.scala)18
-rw-r--r--test/disabled/run/script-positions.scala86
-rw-r--r--test/disabled/run/t2886.scala7
-rw-r--r--test/disabled/run/t2946/Parsers.scala4
-rw-r--r--test/disabled/run/t2946/ResponseCommon.scala14
-rw-r--r--test/disabled/run/t2946/Test.scala7
-rw-r--r--test/disabled/run/t4279.scala38
-rw-r--r--test/disabled/run/t4532.check15
-rw-r--r--test/disabled/run/t4532.scala34
-rw-r--r--test/disabled/scalacheck/HashTrieSplit.scala47
-rw-r--r--test/disabled/script/fact.args (renamed from test/files/script/fact.args)0
-rwxr-xr-xtest/disabled/script/fact.bat (renamed from test/files/script/fact.bat)0
-rw-r--r--test/disabled/script/fact.check (renamed from test/files/script/fact.check)0
-rwxr-xr-x[-rw-r--r--]test/disabled/script/fact.scala (renamed from test/files/script/fact.scala)0
-rwxr-xr-xtest/disabled/script/second.bat (renamed from test/files/script/second.bat)0
-rw-r--r--test/disabled/script/second.check (renamed from test/files/script/second.check)0
-rwxr-xr-xtest/disabled/script/second.scala (renamed from test/files/script/second.scala)0
-rwxr-xr-xtest/disabled/script/t1015.bat (renamed from test/files/script/t1015.bat)0
-rwxr-xr-xtest/disabled/script/t1015.scala (renamed from test/files/script/t1015.scala)0
-rwxr-xr-xtest/disabled/script/t1017.bat (renamed from test/files/script/t1017.bat)0
-rwxr-xr-xtest/disabled/script/t1017.scala (renamed from test/files/script/t1017.scala)4
-rw-r--r--test/files/ant/README42
-rw-r--r--test/files/ant/fsc-build.xml31
-rw-r--r--test/files/ant/fsc.check13
-rw-r--r--test/files/ant/fsc001-build.check14
-rw-r--r--test/files/ant/fsc001-build.xml26
-rw-r--r--test/files/ant/fsc001.scala7
-rw-r--r--test/files/ant/fsc002-build.check14
-rw-r--r--test/files/ant/fsc002-build.xml28
-rw-r--r--test/files/ant/fsc002.scala (renamed from test/files/ant/fsc.scala)0
-rw-r--r--test/files/ant/fsc003-build.check14
-rw-r--r--test/files/ant/fsc003-build.xml25
-rw-r--r--test/files/ant/fsc003.scala7
-rw-r--r--test/files/ant/imported.xml111
-rw-r--r--test/files/ant/scalac-build.xml31
-rw-r--r--test/files/ant/scalac.check13
-rw-r--r--test/files/ant/scalac001-build.check14
-rw-r--r--test/files/ant/scalac001-build.xml26
-rw-r--r--test/files/ant/scalac001.scala (renamed from test/files/ant/scalac.scala)0
-rw-r--r--test/files/ant/scalac002-build.check14
-rw-r--r--test/files/ant/scalac002-build.xml28
-rw-r--r--test/files/ant/scalac002.scala7
-rw-r--r--test/files/ant/scalac003-build.check14
-rw-r--r--test/files/ant/scalac003-build.xml25
-rw-r--r--test/files/ant/scalac003.scala7
-rw-r--r--test/files/ant/scalac004-build.check24
-rw-r--r--test/files/ant/scalac004-build.xml26
-rw-r--r--test/files/ant/scalac004.scala11
-rw-r--r--test/files/ant/scaladoc-build.check15
-rw-r--r--test/files/ant/scaladoc-build.xml11
-rw-r--r--test/files/ant/scaladoc.check13
-rw-r--r--test/files/ant/scaladoc.scala5
-rwxr-xr-xtest/files/bench/equality/eq.scala34
-rw-r--r--test/files/bench/equality/eqeq.eqlog42
-rwxr-xr-xtest/files/bench/equality/eqeq.scala46
-rw-r--r--test/files/buildmanager/annotated/A.scala1
-rw-r--r--test/files/buildmanager/annotated/annotated.check6
-rw-r--r--test/files/buildmanager/annotated/annotated.test2
-rw-r--r--test/files/buildmanager/freshnames/A.scala16
-rw-r--r--test/files/buildmanager/freshnames/B.scala4
-rw-r--r--test/files/buildmanager/freshnames/freshnames.check6
-rw-r--r--test/files/buildmanager/freshnames/freshnames.test2
-rw-r--r--test/files/buildmanager/infer/A.scala16
-rw-r--r--test/files/buildmanager/infer/infer.check6
-rw-r--r--test/files/buildmanager/infer/infer.test2
-rw-r--r--test/files/buildmanager/namesdefaults/defparam-use.scala5
-rw-r--r--test/files/buildmanager/namesdefaults/defparam.scala7
-rw-r--r--test/files/buildmanager/namesdefaults/namesdefaults.check9
-rw-r--r--test/files/buildmanager/namesdefaults/namesdefaults.test3
-rw-r--r--test/files/buildmanager/overloaded_1/A.scala11
-rw-r--r--test/files/buildmanager/overloaded_1/overloaded_1.check6
-rw-r--r--test/files/buildmanager/overloaded_1/overloaded_1.test2
-rw-r--r--test/files/buildmanager/simpletest/A.scala3
-rw-r--r--test/files/buildmanager/simpletest/B.scala3
-rw-r--r--test/files/buildmanager/simpletest/simpletest.changes/A1.scala1
-rw-r--r--test/files/buildmanager/simpletest/simpletest.check11
-rw-r--r--test/files/buildmanager/simpletest/simpletest.test3
-rw-r--r--test/files/buildmanager/t2280/A.scala1
-rw-r--r--test/files/buildmanager/t2280/B.java2
-rw-r--r--test/files/buildmanager/t2280/t2280.check6
-rw-r--r--test/files/buildmanager/t2280/t2280.test2
-rw-r--r--test/files/buildmanager/t2556_1/A.scala3
-rw-r--r--test/files/buildmanager/t2556_1/B.scala3
-rw-r--r--test/files/buildmanager/t2556_1/t2556_1.changes/A2.scala4
-rw-r--r--test/files/buildmanager/t2556_1/t2556_1.check12
-rw-r--r--test/files/buildmanager/t2556_1/t2556_1.test3
-rw-r--r--test/files/buildmanager/t2556_2/A.scala4
-rw-r--r--test/files/buildmanager/t2556_2/B.scala2
-rw-r--r--test/files/buildmanager/t2556_2/C.scala4
-rw-r--r--test/files/buildmanager/t2556_2/t2556_2.changes/A2.scala4
-rw-r--r--test/files/buildmanager/t2556_2/t2556_2.check13
-rw-r--r--test/files/buildmanager/t2556_2/t2556_2.test3
-rw-r--r--test/files/buildmanager/t2556_3/A.scala5
-rw-r--r--test/files/buildmanager/t2556_3/B.scala5
-rw-r--r--test/files/buildmanager/t2556_3/C.scala2
-rw-r--r--test/files/buildmanager/t2556_3/t2556_3.changes/A2.scala5
-rw-r--r--test/files/buildmanager/t2556_3/t2556_3.check18
-rw-r--r--test/files/buildmanager/t2556_3/t2556_3.test3
-rw-r--r--test/files/buildmanager/t2557/A.scala4
-rw-r--r--test/files/buildmanager/t2557/B.scala4
-rw-r--r--test/files/buildmanager/t2557/C.scala3
-rw-r--r--test/files/buildmanager/t2557/D.scala1
-rw-r--r--test/files/buildmanager/t2557/E.scala1
-rw-r--r--test/files/buildmanager/t2557/F.scala4
-rw-r--r--test/files/buildmanager/t2557/t2557.changes/D2.scala2
-rw-r--r--test/files/buildmanager/t2557/t2557.check10
-rw-r--r--test/files/buildmanager/t2557/t2557.test3
-rw-r--r--test/files/buildmanager/t2559/A.scala5
-rw-r--r--test/files/buildmanager/t2559/D.scala8
-rw-r--r--test/files/buildmanager/t2559/t2559.changes/A2.scala5
-rw-r--r--test/files/buildmanager/t2559/t2559.check14
-rw-r--r--test/files/buildmanager/t2559/t2559.test3
-rw-r--r--test/files/buildmanager/t2562/A.scala7
-rw-r--r--test/files/buildmanager/t2562/B.scala8
-rw-r--r--test/files/buildmanager/t2562/t2562.changes/A2.scala8
-rw-r--r--test/files/buildmanager/t2562/t2562.check12
-rw-r--r--test/files/buildmanager/t2562/t2562.test3
-rw-r--r--test/files/buildmanager/t2649/A.scala3
-rw-r--r--test/files/buildmanager/t2649/B.scala4
-rw-r--r--test/files/buildmanager/t2649/t2649.changes/A2.scala4
-rw-r--r--test/files/buildmanager/t2649/t2649.check9
-rw-r--r--test/files/buildmanager/t2649/t2649.test3
-rw-r--r--test/files/buildmanager/t2650_1/A.scala4
-rw-r--r--test/files/buildmanager/t2650_1/B.scala3
-rw-r--r--test/files/buildmanager/t2650_1/t2650_1.changes/A2.scala3
-rw-r--r--test/files/buildmanager/t2650_1/t2650_1.check11
-rw-r--r--test/files/buildmanager/t2650_1/t2650_1.test3
-rw-r--r--test/files/buildmanager/t2650_2/A.scala3
-rw-r--r--test/files/buildmanager/t2650_2/B.scala4
-rw-r--r--test/files/buildmanager/t2650_2/t2650_2.changes/A2.scala4
-rw-r--r--test/files/buildmanager/t2650_2/t2650_2.check14
-rw-r--r--test/files/buildmanager/t2650_2/t2650_2.test3
-rw-r--r--test/files/buildmanager/t2650_3/A.scala4
-rw-r--r--test/files/buildmanager/t2650_3/B.scala3
-rw-r--r--test/files/buildmanager/t2650_3/t2650_3.changes/A2.scala4
-rw-r--r--test/files/buildmanager/t2650_3/t2650_3.check15
-rw-r--r--test/files/buildmanager/t2650_3/t2650_3.test3
-rw-r--r--test/files/buildmanager/t2650_4/A.scala5
-rw-r--r--test/files/buildmanager/t2650_4/B.scala3
-rw-r--r--test/files/buildmanager/t2650_4/t2650_4.changes/A2.scala5
-rw-r--r--test/files/buildmanager/t2650_4/t2650_4.check15
-rw-r--r--test/files/buildmanager/t2650_4/t2650_4.test3
-rw-r--r--test/files/buildmanager/t2651_2/A.scala1
-rw-r--r--test/files/buildmanager/t2651_2/t2651_2.changes/A2.scala1
-rw-r--r--test/files/buildmanager/t2651_2/t2651_2.check6
-rw-r--r--test/files/buildmanager/t2651_2/t2651_2.test3
-rw-r--r--test/files/buildmanager/t2651_3/A.scala3
-rw-r--r--test/files/buildmanager/t2651_3/t2651_3.changes/A2.scala3
-rw-r--r--test/files/buildmanager/t2651_3/t2651_3.check6
-rw-r--r--test/files/buildmanager/t2651_3/t2651_3.test3
-rw-r--r--test/files/buildmanager/t2651_4/A.scala5
-rw-r--r--test/files/buildmanager/t2651_4/B.scala3
-rw-r--r--test/files/buildmanager/t2651_4/t2651_4.changes/A2.scala5
-rw-r--r--test/files/buildmanager/t2651_4/t2651_4.check13
-rw-r--r--test/files/buildmanager/t2651_4/t2651_4.test3
-rw-r--r--test/files/buildmanager/t2652/A.scala3
-rw-r--r--test/files/buildmanager/t2652/B.scala4
-rw-r--r--test/files/buildmanager/t2652/t2652.changes/A2.scala4
-rw-r--r--test/files/buildmanager/t2652/t2652.check9
-rw-r--r--test/files/buildmanager/t2652/t2652.test3
-rw-r--r--test/files/buildmanager/t2653/A.scala2
-rw-r--r--test/files/buildmanager/t2653/B.scala3
-rw-r--r--test/files/buildmanager/t2653/t2653.changes/A2.scala2
-rw-r--r--test/files/buildmanager/t2653/t2653.check15
-rw-r--r--test/files/buildmanager/t2653/t2653.test3
-rw-r--r--test/files/buildmanager/t2654/A.scala2
-rw-r--r--test/files/buildmanager/t2654/B.scala1
-rw-r--r--test/files/buildmanager/t2654/t2654.changes/A2.scala4
-rw-r--r--test/files/buildmanager/t2654/t2654.check6
-rw-r--r--test/files/buildmanager/t2654/t2654.test3
-rw-r--r--test/files/buildmanager/t2655/A.scala4
-rw-r--r--test/files/buildmanager/t2655/B.scala3
-rw-r--r--test/files/buildmanager/t2655/t2655.changes/A2.scala4
-rw-r--r--test/files/buildmanager/t2655/t2655.check13
-rw-r--r--test/files/buildmanager/t2655/t2655.test3
-rw-r--r--test/files/buildmanager/t2657/A.scala3
-rw-r--r--test/files/buildmanager/t2657/B.scala4
-rw-r--r--test/files/buildmanager/t2657/t2657.changes/A2.scala3
-rw-r--r--test/files/buildmanager/t2657/t2657.check13
-rw-r--r--test/files/buildmanager/t2657/t2657.test3
-rw-r--r--test/files/buildmanager/t2789/A.scala5
-rw-r--r--test/files/buildmanager/t2789/B.scala3
-rw-r--r--test/files/buildmanager/t2789/t2789.changes/A2.scala5
-rw-r--r--test/files/buildmanager/t2789/t2789.check11
-rw-r--r--test/files/buildmanager/t2789/t2789.test3
-rw-r--r--test/files/buildmanager/t2790/A.scala5
-rw-r--r--test/files/buildmanager/t2790/B.scala4
-rw-r--r--test/files/buildmanager/t2790/t2790.changes/A2.scala4
-rw-r--r--test/files/buildmanager/t2790/t2790.check14
-rw-r--r--test/files/buildmanager/t2790/t2790.test3
-rw-r--r--test/files/buildmanager/t2792/A1.scala3
-rw-r--r--test/files/buildmanager/t2792/A2.scala4
-rw-r--r--test/files/buildmanager/t2792/A3.scala3
-rw-r--r--test/files/buildmanager/t2792/t2792.changes/A1_1.scala3
-rw-r--r--test/files/buildmanager/t2792/t2792.check11
-rw-r--r--test/files/buildmanager/t2792/t2792.test3
-rw-r--r--test/files/buildmanager/t3045/A.java7
-rw-r--r--test/files/buildmanager/t3045/t3045.check3
-rw-r--r--test/files/buildmanager/t3045/t3045.test1
-rw-r--r--test/files/buildmanager/t3054/bar/Bar.java7
-rw-r--r--test/files/buildmanager/t3054/foo/Foo.scala5
-rw-r--r--test/files/buildmanager/t3054/t3054.check3
-rw-r--r--test/files/buildmanager/t3054/t3054.test1
-rw-r--r--test/files/buildmanager/t3059/A.scala4
-rw-r--r--test/files/buildmanager/t3059/B.scala4
-rw-r--r--test/files/buildmanager/t3059/t3059.check6
-rw-r--r--test/files/buildmanager/t3059/t3059.test2
-rw-r--r--test/files/buildmanager/t3133/A.java7
-rw-r--r--test/files/buildmanager/t3133/t3133.check3
-rw-r--r--test/files/buildmanager/t3133/t3133.test1
-rw-r--r--test/files/buildmanager/t3140/A.scala8
-rw-r--r--test/files/buildmanager/t3140/t3140.check6
-rw-r--r--test/files/buildmanager/t3140/t3140.test2
-rw-r--r--test/files/buildmanager/t4215/A.scala5
-rw-r--r--test/files/buildmanager/t4215/t4215.check6
-rw-r--r--test/files/buildmanager/t4215/t4215.test2
-rw-r--r--test/files/buildmanager/t4245/A.scala3
-rw-r--r--test/files/buildmanager/t4245/t4245.check6
-rw-r--r--test/files/buildmanager/t4245/t4245.test2
-rw-r--r--test/files/continuations-neg/function0.check6
-rw-r--r--test/files/continuations-neg/function0.scala16
-rw-r--r--test/files/continuations-neg/function2.check6
-rw-r--r--test/files/continuations-neg/function2.scala16
-rw-r--r--test/files/continuations-neg/function3.check6
-rw-r--r--test/files/continuations-neg/function3.scala15
-rw-r--r--test/files/continuations-neg/infer0.check4
-rw-r--r--test/files/continuations-neg/infer0.scala14
-rw-r--r--test/files/continuations-neg/infer2.check4
-rw-r--r--test/files/continuations-neg/infer2.scala19
-rw-r--r--test/files/continuations-neg/lazy.check6
-rw-r--r--test/files/continuations-neg/lazy.scala16
-rw-r--r--test/files/continuations-neg/t1929.check6
-rw-r--r--test/files/continuations-neg/t1929.scala17
-rw-r--r--test/files/continuations-neg/t2285.check6
-rw-r--r--test/files/continuations-neg/t2285.scala11
-rw-r--r--test/files/continuations-neg/t2949.check6
-rw-r--r--test/files/continuations-neg/t2949.scala15
-rw-r--r--test/files/continuations-neg/t3628.check4
-rw-r--r--test/files/continuations-neg/t3628.scala11
-rw-r--r--test/files/continuations-neg/trycatch2.check7
-rw-r--r--test/files/continuations-neg/trycatch2.scala33
-rwxr-xr-xtest/files/continuations-run/basics.check2
-rwxr-xr-xtest/files/continuations-run/basics.scala23
-rw-r--r--test/files/continuations-run/function1.check1
-rw-r--r--test/files/continuations-run/function1.scala16
-rw-r--r--test/files/continuations-run/function4.check1
-rw-r--r--test/files/continuations-run/function4.scala15
-rw-r--r--test/files/continuations-run/function5.check1
-rw-r--r--test/files/continuations-run/function5.scala15
-rw-r--r--test/files/continuations-run/function6.check1
-rw-r--r--test/files/continuations-run/function6.scala16
-rw-r--r--test/files/continuations-run/ifelse0.check2
-rw-r--r--test/files/continuations-run/ifelse0.scala18
-rw-r--r--test/files/continuations-run/ifelse1.check4
-rw-r--r--test/files/continuations-run/ifelse1.scala25
-rw-r--r--test/files/continuations-run/ifelse2.check4
-rw-r--r--test/files/continuations-run/ifelse2.scala16
-rw-r--r--test/files/continuations-run/ifelse3.check2
-rw-r--r--test/files/continuations-run/ifelse3.scala21
-rw-r--r--test/files/continuations-run/ifelse4.check4
-rw-r--r--test/files/continuations-run/ifelse4.scala31
-rw-r--r--test/files/continuations-run/infer1.scala33
-rw-r--r--test/files/continuations-run/match0.check2
-rw-r--r--test/files/continuations-run/match0.scala18
-rw-r--r--test/files/continuations-run/match1.check2
-rw-r--r--test/files/continuations-run/match1.scala18
-rw-r--r--test/files/continuations-run/match2.check2
-rw-r--r--test/files/continuations-run/match2.scala26
-rw-r--r--test/files/continuations-run/patvirt.check2
-rw-r--r--test/files/continuations-run/patvirt.scala32
-rw-r--r--test/files/continuations-run/t1807.check1
-rw-r--r--test/files/continuations-run/t1807.scala14
-rw-r--r--test/files/continuations-run/t1808.scala10
-rw-r--r--test/files/continuations-run/t1820.scala14
-rw-r--r--test/files/continuations-run/t1821.check4
-rw-r--r--test/files/continuations-run/t1821.scala20
-rw-r--r--test/files/continuations-run/t2864.check1
-rw-r--r--test/files/continuations-run/t2864.scala30
-rw-r--r--test/files/continuations-run/t2934.check1
-rw-r--r--test/files/continuations-run/t2934.scala10
-rw-r--r--test/files/continuations-run/t3199.check1
-rw-r--r--test/files/continuations-run/t3199.scala20
-rw-r--r--test/files/continuations-run/t3199b.check1
-rw-r--r--test/files/continuations-run/t3199b.scala11
-rw-r--r--test/files/continuations-run/t3223.check1
-rw-r--r--test/files/continuations-run/t3223.scala19
-rw-r--r--test/files/continuations-run/t3225.check12
-rw-r--r--test/files/continuations-run/t3225.scala56
-rw-r--r--test/files/continuations-run/t3501.check5
-rw-r--r--test/files/continuations-run/t3501.scala15
-rw-r--r--test/files/continuations-run/trycatch0.check2
-rw-r--r--test/files/continuations-run/trycatch0.scala25
-rw-r--r--test/files/continuations-run/trycatch1.check4
-rw-r--r--test/files/continuations-run/trycatch1.scala48
-rw-r--r--test/files/continuations-run/while0.check1
-rw-r--r--test/files/continuations-run/while0.scala22
-rw-r--r--test/files/continuations-run/while1.check11
-rw-r--r--test/files/continuations-run/while1.scala22
-rw-r--r--test/files/continuations-run/while2.check19
-rw-r--r--test/files/continuations-run/while2.scala23
-rw-r--r--test/files/detach-neg/det_bar.check4
-rw-r--r--test/files/detach-neg/det_bar.scala13
-rw-r--r--test/files/detach-run/actor-run.check5
-rw-r--r--test/files/detach-run/actor/Client.scala54
-rw-r--r--test/files/detach-run/actor/Server.scala27
-rw-r--r--test/files/detach-run/actor/ServerConsole.scala75
-rw-r--r--test/files/detach-run/actor/actor.flags1
-rw-r--r--test/files/detach-run/actor/actor.scala157
-rw-r--r--test/files/detach-run/actor/java.policy25
-rw-r--r--test/files/detach-run/basic-run.check5
-rw-r--r--test/files/detach-run/basic/Client.scala48
-rw-r--r--test/files/detach-run/basic/Server.scala22
-rw-r--r--test/files/detach-run/basic/ServerConsole.scala83
-rw-r--r--test/files/detach-run/basic/basic.flags1
-rw-r--r--test/files/detach-run/basic/basic.scala169
-rw-r--r--test/files/detach-run/basic/java.policy26
-rw-r--r--test/files/files.iml17
-rw-r--r--test/files/gitignore.SAMPLE2
-rw-r--r--test/files/jvm/JavaInteraction.scala23
-rw-r--r--test/files/jvm/actor-exceptions.check12
-rw-r--r--test/files/jvm/actor-exceptions.scala34
-rw-r--r--test/files/jvm/actor-executor.check20
-rw-r--r--test/files/jvm/actor-executor.scala75
-rw-r--r--test/files/jvm/actor-executor2.check21
-rw-r--r--test/files/jvm/actor-executor2.scala88
-rw-r--r--test/files/jvm/actor-executor3.check20
-rw-r--r--test/files/jvm/actor-executor3.scala62
-rw-r--r--test/files/jvm/actor-getstate.check2
-rw-r--r--test/files/jvm/actor-getstate.scala85
-rw-r--r--test/files/jvm/actor-link-getstate.check2
-rw-r--r--test/files/jvm/actor-link-getstate.scala62
-rw-r--r--test/files/jvm/actor-looping.scala5
-rw-r--r--test/files/jvm/actor-normal-exit.scala10
-rw-r--r--test/files/jvm/actor-receivewithin.scala2
-rw-r--r--test/files/jvm/actor-sync-send-timeout.scala47
-rw-r--r--test/files/jvm/actor-termination.scala5
-rw-r--r--test/files/jvm/actor-uncaught-exception.check2
-rw-r--r--test/files/jvm/actor-uncaught-exception.scala63
-rw-r--r--test/files/jvm/actor-uncaught-exception2.check2
-rw-r--r--test/files/jvm/actor-uncaught-exception2.scala63
-rw-r--r--test/files/jvm/annotations.check13
-rw-r--r--test/files/jvm/annotations.scala59
-rw-r--r--test/files/jvm/backendBugUnapply.check2
-rw-r--r--test/files/jvm/backendBugUnapply.scala17
-rw-r--r--test/files/jvm/bigints.check9
-rw-r--r--test/files/jvm/bigints.scala51
-rw-r--r--test/files/jvm/bug560bis.scala21
-rw-r--r--test/files/jvm/console.scala4
-rw-r--r--test/files/jvm/daemon-actor-termination.scala10
-rw-r--r--test/files/jvm/deprecation/Defs.java12
-rw-r--r--test/files/jvm/deprecation/Test_1.scala17
-rw-r--r--test/files/jvm/deprecation/Use_2.java10
-rw-r--r--test/files/jvm/future-alarm.check20
-rw-r--r--test/files/jvm/future-alarm.scala21
-rw-r--r--test/files/jvm/future-awaitall-zero.check (renamed from test/files/run/bug216.check)0
-rw-r--r--test/files/jvm/future-awaitall-zero.scala22
-rw-r--r--test/files/jvm/future-termination.scala29
-rw-r--r--test/files/jvm/genericNest.scala2
-rw-r--r--test/files/jvm/inner.scala14
-rw-r--r--test/files/jvm/interpreter.check360
-rw-r--r--test/files/jvm/interpreter.scala53
-rw-r--r--test/files/jvm/libnatives-32.so (renamed from test/disabled/jvm/libnatives-32.so)bin5359 -> 5359 bytes
-rw-r--r--test/files/jvm/libnatives-64.so (renamed from test/disabled/jvm/libnatives-64.so)bin7466 -> 7466 bytes
-rwxr-xr-xtest/files/jvm/libnatives.jnilibbin0 -> 4248 bytes
-rw-r--r--test/files/jvm/manifests.check4
-rw-r--r--test/files/jvm/manifests.scala11
-rw-r--r--test/files/jvm/methvsfield.java6
-rw-r--r--test/files/jvm/methvsfield.scala2
-rwxr-xr-xtest/files/jvm/mkLibNatives.bat (renamed from test/disabled/jvm/mkLibNatives.bat)3
-rwxr-xr-xtest/files/jvm/mkLibNatives.sh (renamed from test/disabled/jvm/mkLibNatives.sh)2
-rw-r--r--test/files/jvm/natives-32.dll (renamed from test/disabled/jvm/natives-32.dll)bin40960 -> 40960 bytes
-rw-r--r--test/files/jvm/natives-64.dllbin0 -> 37376 bytes
-rw-r--r--test/files/jvm/natives.c (renamed from test/disabled/jvm/natives.c)0
-rw-r--r--test/files/jvm/natives.check (renamed from test/disabled/jvm/natives.check)0
-rw-r--r--test/files/jvm/natives.h (renamed from test/disabled/jvm/natives.h)0
-rw-r--r--test/files/jvm/natives.scala (renamed from test/disabled/jvm/natives.scala)6
-rw-r--r--test/files/jvm/nest.scala2
-rw-r--r--test/files/jvm/outerEnum.scala2
-rw-r--r--test/files/jvm/protectedacc.scala18
-rw-r--r--test/files/jvm/reactor-exceptionOnSend.scala15
-rw-r--r--test/files/jvm/reactor-producer-consumer.check10
-rw-r--r--test/files/jvm/reactor-producer-consumer.scala95
-rw-r--r--test/files/jvm/reactor.scala19
-rw-r--r--test/files/jvm/replyablereactor.scala15
-rw-r--r--test/files/jvm/replyablereactor2.scala12
-rw-r--r--test/files/jvm/replyablereactor3.scala12
-rw-r--r--test/files/jvm/replyablereactor4.scala16
-rw-r--r--test/files/jvm/replyreactor-react-sender.scala10
-rw-r--r--test/files/jvm/replyreactor.scala16
-rw-r--r--test/files/jvm/scheduler-adapter.scala10
-rw-r--r--test/files/jvm/serialization.check275
-rw-r--r--test/files/jvm/serialization.scala660
-rw-r--r--test/files/jvm/signum.scala15
-rw-r--r--test/files/jvm/stringbuilder.check17
-rw-r--r--test/files/jvm/stringbuilder.scala88
-rw-r--r--test/files/jvm/t1449.check1
-rw-r--r--test/files/jvm/t1449.scala25
-rw-r--r--test/files/jvm/t1461.scala2
-rw-r--r--test/files/jvm/t1464/MyTrait.scala2
-rw-r--r--test/files/jvm/t1600.scala76
-rw-r--r--test/files/jvm/t1948.scala16
-rw-r--r--test/files/jvm/t2104.scala2
-rw-r--r--test/files/jvm/t2359.scala25
-rw-r--r--test/files/jvm/t2470.check1
-rw-r--r--test/files/jvm/t2470.cmds3
-rw-r--r--test/files/jvm/t2470/Action.java6
-rw-r--r--test/files/jvm/t2470/Read_Classfile_2.scala3
-rw-r--r--test/files/jvm/t2470/Task.java3
-rw-r--r--test/files/jvm/t2470/Test_1.scala11
-rw-r--r--test/files/jvm/t2511.check3
-rw-r--r--test/files/jvm/t2511.scala7
-rw-r--r--test/files/jvm/t2515.scala40
-rw-r--r--test/files/jvm/t2530.scala14
-rw-r--r--test/files/jvm/t2570.check0
-rw-r--r--test/files/jvm/t2570/Test.scala3
-rw-r--r--test/files/jvm/t2570/Test1.java2
-rw-r--r--test/files/jvm/t2570/Test3.java2
-rw-r--r--test/files/jvm/t2585.check0
-rw-r--r--test/files/jvm/t2585/Test.java16
-rw-r--r--test/files/jvm/t2585/genericouter.scala25
-rw-r--r--test/files/jvm/t2827.check3
-rw-r--r--test/files/jvm/t2827.scala14
-rw-r--r--test/files/jvm/t3003.check1
-rw-r--r--test/files/jvm/t3003.cmds2
-rw-r--r--test/files/jvm/t3003/Annot.java6
-rw-r--r--test/files/jvm/t3003/Test_1.scala15
-rw-r--r--test/files/jvm/t3102.check2
-rw-r--r--test/files/jvm/t3102.scala36
-rw-r--r--test/files/jvm/t3356.check3
-rw-r--r--test/files/jvm/t3356.scala55
-rw-r--r--test/files/jvm/t3365.check5
-rw-r--r--test/files/jvm/t3365.scala65
-rw-r--r--test/files/jvm/t3407.check10
-rw-r--r--test/files/jvm/t3407.scala19
-rw-r--r--test/files/jvm/t3412-channel.check10
-rw-r--r--test/files/jvm/t3412-channel.scala38
-rw-r--r--test/files/jvm/t3412.check10
-rw-r--r--test/files/jvm/t3412.scala32
-rw-r--r--test/files/jvm/t3415/Hello.java3
-rw-r--r--test/files/jvm/t3415/HelloWorld.scala4
-rw-r--r--test/files/jvm/t3470.check3
-rw-r--r--test/files/jvm/t3470.scala30
-rw-r--r--test/files/jvm/t3838.check1
-rw-r--r--test/files/jvm/t3838.scala15
-rw-r--r--test/files/jvm/t560bis.check (renamed from test/files/jvm/bug560bis.check)0
-rw-r--r--test/files/jvm/t560bis.scala21
-rw-r--r--test/files/jvm/t676.check (renamed from test/files/jvm/bug676.check)0
-rw-r--r--test/files/jvm/t676.scala (renamed from test/files/jvm/bug676.scala)0
-rw-r--r--test/files/jvm/t680.check0
-rw-r--r--test/files/jvm/t680.scala (renamed from test/files/jvm/bug680.scala)0
-rw-r--r--test/files/jvm/throws-annot.scala10
-rw-r--r--test/files/jvm/ticket4283/AbstractFoo.java5
-rw-r--r--test/files/jvm/ticket4283/ScalaBipp.scala5
-rw-r--r--test/files/jvm/ticket4283/Test.scala4
-rw-r--r--test/files/jvm/typerep.scala4
-rw-r--r--test/files/jvm/unittest_io.scala24
-rw-r--r--test/files/jvm/unittest_io_Jvm.check6
-rw-r--r--test/files/jvm/unittest_io_Jvm.scala15
-rw-r--r--test/files/jvm/unittest_xml.scala126
-rw-r--r--test/files/jvm/varargs.check3
-rw-r--r--test/files/jvm/varargs/JavaClass.java15
-rw-r--r--test/files/jvm/varargs/VaClass.scala13
-rw-r--r--test/files/jvm/varargs/varargs.scala21
-rw-r--r--test/files/jvm/xml01.scala203
-rw-r--r--test/files/jvm/xml02.check0
-rw-r--r--test/files/jvm/xml02.scala72
-rw-r--r--test/files/jvm/xml03syntax.check9
-rw-r--r--test/files/jvm/xml03syntax.scala33
-rw-r--r--test/files/jvm/xml04embed.check3
-rw-r--r--test/files/jvm/xml04embed.scala13
-rw-r--r--test/files/jvm/xml05.check11
-rw-r--r--test/files/jvm/xml05.scala7
-rw-r--r--test/files/jvm/xmlattr.check18
-rw-r--r--test/files/jvm/xmlattr.scala71
-rw-r--r--test/files/jvm/xmlmore.scala4
-rw-r--r--test/files/jvm/xmlpull.scala4
-rw-r--r--test/files/jvm/xmlstuff.scala302
-rw-r--r--test/files/lib/scalacheck.jar.desired.sha11
-rw-r--r--test/files/neg/abstract-class-2.check5
-rw-r--r--test/files/neg/abstract-class-2.scala14
-rw-r--r--test/files/neg/abstract-class-error.check5
-rw-r--r--test/files/neg/abstract-class-error/J.java4
-rw-r--r--test/files/neg/abstract-class-error/S.scala4
-rw-r--r--test/files/neg/abstract-concrete-methods.check5
-rw-r--r--test/files/neg/abstract-concrete-methods.scala10
-rw-r--r--test/files/neg/abstract-inaccessible.check13
-rw-r--r--test/files/neg/abstract-inaccessible.flags1
-rw-r--r--test/files/neg/abstract-inaccessible.scala9
-rw-r--r--test/files/neg/abstract-report.check24
-rw-r--r--test/files/neg/abstract-report.scala1
-rw-r--r--test/files/neg/abstract-report2.check103
-rw-r--r--test/files/neg/abstract-report2.scala11
-rw-r--r--test/files/neg/abstract-vars.check21
-rw-r--r--test/files/neg/abstract-vars.scala29
-rw-r--r--test/files/neg/accesses.check16
-rw-r--r--test/files/neg/accesses.scala34
-rw-r--r--test/files/neg/ambiguous-float-dots.check16
-rw-r--r--test/files/neg/ambiguous-float-dots.flags1
-rw-r--r--test/files/neg/ambiguous-float-dots.scala14
-rw-r--r--test/files/neg/ambiguous-float-dots2.check10
-rw-r--r--test/files/neg/ambiguous-float-dots2.flags1
-rw-r--r--test/files/neg/ambiguous-float-dots2.scala14
-rw-r--r--test/files/neg/annot-nonconst.check6
-rw-r--r--test/files/neg/anyval-sealed.check12
-rw-r--r--test/files/neg/anyval-sealed.flags1
-rw-r--r--test/files/neg/anyval-sealed.scala6
-rw-r--r--test/files/neg/array-not-seq.check7
-rw-r--r--test/files/neg/array-not-seq.flags1
-rw-r--r--test/files/neg/array-not-seq.scala26
-rw-r--r--test/files/neg/bug1010.check6
-rw-r--r--test/files/neg/bug1011.check4
-rw-r--r--test/files/neg/bug1011.scala127
-rw-r--r--test/files/neg/bug1017.check4
-rw-r--r--test/files/neg/bug1038.check5
-rw-r--r--test/files/neg/bug1041.check6
-rw-r--r--test/files/neg/bug1106.check7
-rw-r--r--test/files/neg/bug1112.check4
-rw-r--r--test/files/neg/bug1112.scala14
-rw-r--r--test/files/neg/bug112706A.check6
-rw-r--r--test/files/neg/bug112706A.scala8
-rw-r--r--test/files/neg/bug1181.check4
-rw-r--r--test/files/neg/bug1181.scala12
-rw-r--r--test/files/neg/bug1183.check17
-rw-r--r--test/files/neg/bug1183.scala38
-rw-r--r--test/files/neg/bug1210.check7
-rw-r--r--test/files/neg/bug1224.check4
-rw-r--r--test/files/neg/bug1241.check4
-rw-r--r--test/files/neg/bug1241.scala8
-rw-r--r--test/files/neg/bug1275.check4
-rw-r--r--test/files/neg/bug1275.scala14
-rw-r--r--test/files/neg/bug1279a.check6
-rw-r--r--test/files/neg/bug1286.check2
-rw-r--r--test/files/neg/bug1333.check4
-rw-r--r--test/files/neg/bug1333.scala1
-rw-r--r--test/files/neg/bug1392.check4
-rw-r--r--test/files/neg/bug1392.scala1
-rw-r--r--test/files/neg/bug1523.check4
-rw-r--r--test/files/neg/bug1523.scala5
-rw-r--r--test/files/neg/bug1623.check4
-rw-r--r--test/files/neg/bug1623.scala12
-rw-r--r--test/files/neg/bug1838.check7
-rw-r--r--test/files/neg/bug1878.check10
-rw-r--r--test/files/neg/bug1878.scala15
-rw-r--r--test/files/neg/bug1909b.check4
-rw-r--r--test/files/neg/bug1960.check4
-rw-r--r--test/files/neg/bug1960.scala5
-rw-r--r--test/files/neg/bug200.check4
-rw-r--r--test/files/neg/bug2102.check6
-rw-r--r--test/files/neg/bug2144.check4
-rw-r--r--test/files/neg/bug2275a.check13
-rw-r--r--test/files/neg/bug2275b.check13
-rw-r--r--test/files/neg/bug276.check5
-rw-r--r--test/files/neg/bug278.check7
-rw-r--r--test/files/neg/bug278.scala6
-rw-r--r--test/files/neg/bug284.check8
-rw-r--r--test/files/neg/bug343.check4
-rw-r--r--test/files/neg/bug391.check13
-rw-r--r--test/files/neg/bug409.check4
-rw-r--r--test/files/neg/bug412.check5
-rw-r--r--test/files/neg/bug414.check16
-rw-r--r--test/files/neg/bug414.scala10
-rw-r--r--test/files/neg/bug418.check7
-rw-r--r--test/files/neg/bug421.check4
-rw-r--r--test/files/neg/bug452.check6
-rw-r--r--test/files/neg/bug473.check4
-rw-r--r--test/files/neg/bug500.check4
-rw-r--r--test/files/neg/bug501.check4
-rw-r--r--test/files/neg/bug510.check4
-rw-r--r--test/files/neg/bug512.check4
-rw-r--r--test/files/neg/bug515.check6
-rw-r--r--test/files/neg/bug515.scala8
-rw-r--r--test/files/neg/bug520.check4
-rw-r--r--test/files/neg/bug520.scala9
-rw-r--r--test/files/neg/bug521.check15
-rw-r--r--test/files/neg/bug545.check7
-rw-r--r--test/files/neg/bug550.check7
-rw-r--r--test/files/neg/bug556.check4
-rw-r--r--test/files/neg/bug556.scala4
-rw-r--r--test/files/neg/bug558.check4
-rw-r--r--test/files/neg/bug558.scala19
-rw-r--r--test/files/neg/bug562.check4
-rw-r--r--test/files/neg/bug563.check4
-rw-r--r--test/files/neg/bug563.scala7
-rw-r--r--test/files/neg/bug565.check5
-rw-r--r--test/files/neg/bug576.check4
-rw-r--r--test/files/neg/bug576.scala20
-rw-r--r--test/files/neg/bug585.check4
-rw-r--r--test/files/neg/bug588.check13
-rw-r--r--test/files/neg/bug588.scala15
-rw-r--r--test/files/neg/bug591.check4
-rw-r--r--test/files/neg/bug591.scala41
-rw-r--r--test/files/neg/bug593.check4
-rw-r--r--test/files/neg/bug608.check6
-rw-r--r--test/files/neg/bug608.scala17
-rw-r--r--test/files/neg/bug630.check5
-rw-r--r--test/files/neg/bug630.scala23
-rw-r--r--test/files/neg/bug631.check4
-rw-r--r--test/files/neg/bug633.check4
-rw-r--r--test/files/neg/bug639.check4
-rw-r--r--test/files/neg/bug649.check4
-rw-r--r--test/files/neg/bug650.check4
-rw-r--r--test/files/neg/bug663.check7
-rw-r--r--test/files/neg/bug664.check7
-rw-r--r--test/files/neg/bug667.check4
-rw-r--r--test/files/neg/bug668.check4
-rw-r--r--test/files/neg/bug677.check6
-rw-r--r--test/files/neg/bug691.check4
-rw-r--r--test/files/neg/bug692.check24
-rw-r--r--test/files/neg/bug692.scala20
-rw-r--r--test/files/neg/bug693.check4
-rw-r--r--test/files/neg/bug693.scala5
-rw-r--r--test/files/neg/bug696.check5
-rw-r--r--test/files/neg/bug700.check4
-rw-r--r--test/files/neg/bug700.scala10
-rw-r--r--test/files/neg/bug708.check5
-rw-r--r--test/files/neg/bug712.check4
-rw-r--r--test/files/neg/bug715.check4
-rw-r--r--test/files/neg/bug715.scala15
-rw-r--r--test/files/neg/bug729.check6
-rw-r--r--test/files/neg/bug752.check6
-rw-r--r--test/files/neg/bug765.check4
-rw-r--r--test/files/neg/bug766.check4
-rw-r--r--test/files/neg/bug779.check4
-rw-r--r--test/files/neg/bug783.check6
-rw-r--r--test/files/neg/bug783.scala29
-rw-r--r--test/files/neg/bug798.check4
-rw-r--r--test/files/neg/bug798.scala8
-rw-r--r--test/files/neg/bug800.check13
-rw-r--r--test/files/neg/bug835.check9
-rw-r--r--test/files/neg/bug835.scala3
-rw-r--r--test/files/neg/bug836.check6
-rw-r--r--test/files/neg/bug836.scala16
-rw-r--r--test/files/neg/bug845.check4
-rw-r--r--test/files/neg/bug845.scala16
-rw-r--r--test/files/neg/bug846.check6
-rw-r--r--test/files/neg/bug856.check4
-rw-r--r--test/files/neg/bug856.scala11
-rw-r--r--test/files/neg/bug875.check17
-rw-r--r--test/files/neg/bug875.scala18
-rw-r--r--test/files/neg/bug876.check4
-rw-r--r--test/files/neg/bug876.scala28
-rw-r--r--test/files/neg/bug877.check7
-rw-r--r--test/files/neg/bug877.scala3
-rw-r--r--test/files/neg/bug882.check4
-rw-r--r--test/files/neg/bug900.check10
-rw-r--r--test/files/neg/bug908.check4
-rw-r--r--test/files/neg/bug909.check6
-rw-r--r--test/files/neg/bug910.check6
-rw-r--r--test/files/neg/bug910.scala7
-rw-r--r--test/files/neg/bug935.check7
-rw-r--r--test/files/neg/bug935.scala12
-rw-r--r--test/files/neg/bug944.check4
-rw-r--r--test/files/neg/bug944.scala6
-rw-r--r--test/files/neg/bug960.check10
-rw-r--r--test/files/neg/bug961.check9
-rw-r--r--test/files/neg/bug961.scala14
-rw-r--r--test/files/neg/bug987.check19
-rw-r--r--test/files/neg/bug987.scala25
-rw-r--r--test/files/neg/bug997.check13
-rw-r--r--test/files/neg/bug997.scala15
-rw-r--r--test/files/neg/caseinherit.check10
-rw-r--r--test/files/neg/caseinherit.scala13
-rw-r--r--test/files/neg/check-dead.check13
-rw-r--r--test/files/neg/check-dead.flags1
-rw-r--r--test/files/neg/check-dead.scala37
-rw-r--r--test/files/neg/checksensible.check137
-rw-r--r--test/files/neg/checksensible.flags1
-rw-r--r--test/files/neg/checksensible.scala110
-rw-r--r--test/files/neg/checksensibleUnit.check4
-rw-r--r--test/files/neg/choices.check2
-rw-r--r--test/files/neg/choices.flags1
-rw-r--r--test/files/neg/choices.scala5
-rw-r--r--test/files/neg/constrs.check2
-rw-r--r--test/files/neg/constrs.scala2
-rw-r--r--test/files/neg/depmet_1.check10
-rw-r--r--test/files/neg/depmet_1.scala5
-rw-r--r--test/files/neg/divergent-implicit.check6
-rw-r--r--test/files/neg/eta-expand-star.check4
-rw-r--r--test/files/neg/eta-expand-star.scala8
-rw-r--r--test/files/neg/exhausting.check29
-rw-r--r--test/files/neg/exhausting.flags1
-rw-r--r--test/files/neg/exhausting.scala45
-rw-r--r--test/files/neg/for-comprehension-old.check26
-rw-r--r--test/files/neg/for-comprehension-old.scala11
-rw-r--r--test/files/neg/forward.scala8
-rw-r--r--test/files/neg/found-req-variance.check185
-rw-r--r--test/files/neg/found-req-variance.scala106
-rw-r--r--test/files/neg/gadts1.check10
-rw-r--r--test/files/neg/gadts1.scala16
-rw-r--r--test/files/neg/hk-bad-bounds.check4
-rw-r--r--test/files/neg/hk-bad-bounds.scala5
-rw-r--r--test/files/neg/illegal-stmt-start.check4
-rw-r--r--test/files/neg/illegal-stmt-start.scala5
-rw-r--r--test/files/neg/implicits.check15
-rw-r--r--test/files/neg/implicits.scala12
-rw-r--r--test/files/neg/infix-op-positions.check7
-rw-r--r--test/files/neg/infix-op-positions.scala4
-rw-r--r--test/files/neg/java-access-neg.check16
-rw-r--r--test/files/neg/java-access-neg/J.java15
-rw-r--r--test/files/neg/java-access-neg/S2.scala61
-rw-r--r--test/files/neg/lazy-override.scala2
-rw-r--r--test/files/neg/lazyvals.scala4
-rw-r--r--test/files/neg/lubs.scala2
-rw-r--r--test/files/neg/main1.check26
-rw-r--r--test/files/neg/main1.flags1
-rw-r--r--test/files/neg/main1.scala45
-rw-r--r--test/files/neg/migration28.check5
-rw-r--r--test/files/neg/migration28.flags1
-rw-r--r--test/files/neg/migration28.scala9
-rw-r--r--test/files/neg/multi-array.check6
-rw-r--r--test/files/neg/multi-array.flags1
-rw-r--r--test/files/neg/multi-array.scala13
-rw-r--r--test/files/neg/names-defaults-neg-ref.check2
-rw-r--r--test/files/neg/names-defaults-neg-ref.scala2
-rw-r--r--test/files/neg/names-defaults-neg-warn.check7
-rw-r--r--test/files/neg/names-defaults-neg-warn.flags1
-rw-r--r--test/files/neg/names-defaults-neg-warn.scala14
-rw-r--r--test/files/neg/names-defaults-neg.check145
-rw-r--r--test/files/neg/names-defaults-neg.scala79
-rw-r--r--test/files/neg/no-predef.check14
-rw-r--r--test/files/neg/no-predef.flags1
-rw-r--r--test/files/neg/no-predef.scala5
-rw-r--r--test/files/neg/noMember1.check5
-rw-r--r--test/files/neg/noMember1.scala3
-rw-r--r--test/files/neg/noMember2.check5
-rw-r--r--test/files/neg/noMember2.scala3
-rw-r--r--test/files/neg/nopredefs.check2
-rw-r--r--test/files/neg/null-unsoundness.scala4
-rw-r--r--test/files/neg/nullary-override.check4
-rw-r--r--test/files/neg/nullary-override.flags1
-rw-r--r--test/files/neg/nullary-override.scala3
-rw-r--r--test/files/neg/object-not-a-value.check4
-rw-r--r--test/files/neg/object-not-a-value.scala7
-rw-r--r--test/files/neg/overload-msg.check13
-rw-r--r--test/files/neg/overload-msg.scala4
-rw-r--r--test/files/neg/overload.check2
-rw-r--r--test/files/neg/overload.scala2
-rw-r--r--test/files/neg/overloaded-implicit.check7
-rw-r--r--test/files/neg/overloaded-implicit.flags1
-rw-r--r--test/files/neg/overloaded-implicit.scala17
-rw-r--r--test/files/neg/override-object-flag.check5
-rw-r--r--test/files/neg/override-object-flag.scala3
-rw-r--r--test/files/neg/override-object-no.check23
-rw-r--r--test/files/neg/override-object-no.flags1
-rw-r--r--test/files/neg/override-object-no.scala45
-rw-r--r--test/files/neg/override.check5
-rwxr-xr-xtest/files/neg/override.scala15
-rw-r--r--test/files/neg/package-ob-case.check5
-rw-r--r--test/files/neg/package-ob-case.flags1
-rw-r--r--test/files/neg/package-ob-case.scala5
-rw-r--r--test/files/neg/pat_unreachable.scala4
-rw-r--r--test/files/neg/patmat-type-check.check21
-rw-r--r--test/files/neg/patmat-type-check.scala31
-rw-r--r--test/files/neg/patmatexhaust.check43
-rw-r--r--test/files/neg/patmatexhaust.flags1
-rw-r--r--test/files/neg/patmatexhaust.scala86
-rw-r--r--test/files/neg/patternalts.scala2
-rw-r--r--test/files/neg/permanent-blindness.check10
-rw-r--r--test/files/neg/permanent-blindness.flags1
-rw-r--r--test/files/neg/permanent-blindness.scala22
-rw-r--r--test/files/neg/plugin-after-terminal/lib/plugins.jar.desired.sha11
-rw-r--r--test/files/neg/plugin-after-terminal/src/ThePlugin.scala31
-rw-r--r--test/files/neg/plugin-before-parser/lib/plugins.jar.desired.sha11
-rw-r--r--test/files/neg/plugin-before-parser/src/ThePlugin.scala32
-rw-r--r--test/files/neg/plugin-cyclic-dependency/lib/plugins.jar.desired.sha11
-rw-r--r--test/files/neg/plugin-cyclic-dependency/src/ThePlugin.scala41
-rw-r--r--test/files/neg/plugin-multiple-rafter/lib/plugins.jar.desired.sha11
-rw-r--r--test/files/neg/plugin-multiple-rafter/src/ThePlugin.scala31
-rw-r--r--test/files/neg/plugin-rafter-before-1/lib/plugins.jar.desired.sha11
-rw-r--r--test/files/neg/plugin-rafter-before-1/src/ThePlugin.scala31
-rw-r--r--test/files/neg/plugin-rightafter-terminal/lib/plugins.jar.desired.sha11
-rw-r--r--test/files/neg/plugin-rightafter-terminal/src/ThePlugin.scala32
-rw-r--r--test/files/neg/predef-masking.check4
-rw-r--r--test/files/neg/predef-masking.scala21
-rw-r--r--test/files/neg/primitive-sigs-1.check6
-rw-r--r--test/files/neg/primitive-sigs-1/A_1.scala9
-rw-r--r--test/files/neg/primitive-sigs-1/A_3.scala5
-rw-r--r--test/files/neg/primitive-sigs-1/J_2.java8
-rw-r--r--test/files/neg/protected-constructors.check25
-rw-r--r--test/files/neg/protected-constructors.scala21
-rw-r--r--test/files/neg/protected-static-fail.check16
-rw-r--r--test/files/neg/protected-static-fail/J.java7
-rw-r--r--test/files/neg/protected-static-fail/S.scala10
-rw-r--r--test/files/neg/protected-static-fail/S0.scala9
-rw-r--r--test/files/neg/reassignment.check13
-rw-r--r--test/files/neg/reassignment.scala7
-rw-r--r--test/files/neg/sabin2.scala2
-rw-r--r--test/files/neg/saito.scala4
-rw-r--r--test/files/neg/scopes.check26
-rw-r--r--test/files/neg/scopes.scala18
-rw-r--r--test/files/neg/sealed-java-enums.check9
-rw-r--r--test/files/neg/sealed-java-enums.flags1
-rw-r--r--test/files/neg/sealed-java-enums.scala10
-rw-r--r--test/files/neg/sensitive.check2
-rw-r--r--test/files/neg/sensitive.scala6
-rw-r--r--test/files/neg/spec-overrides.check7
-rw-r--r--test/files/neg/spec-overrides.scala26
-rw-r--r--test/files/neg/stmt-expr-discard.check7
-rw-r--r--test/files/neg/stmt-expr-discard.flags1
-rw-r--r--test/files/neg/stmt-expr-discard.scala5
-rw-r--r--test/files/neg/structural.check5
-rw-r--r--test/files/neg/structural.scala30
-rw-r--r--test/files/neg/suggest-similar.check10
-rw-r--r--test/files/neg/suggest-similar.scala11
-rw-r--r--test/files/neg/super-cast-or-test.check7
-rw-r--r--test/files/neg/super-cast-or-test.scala3
-rw-r--r--test/files/neg/switch.scala16
-rw-r--r--test/files/neg/t0003.check4
-rw-r--r--test/files/neg/t0015.check2
-rw-r--r--test/files/neg/t0117.check2
-rw-r--r--test/files/neg/t0117.scala4
-rw-r--r--test/files/neg/t0152.check2
-rw-r--r--test/files/neg/t0152.scala4
-rw-r--r--test/files/neg/t0218.scala6
-rw-r--r--test/files/neg/t0226.check3
-rw-r--r--test/files/neg/t0259.scala2
-rw-r--r--test/files/neg/t0418.check7
-rw-r--r--test/files/neg/t0418.scala (renamed from test/files/neg/bug418.scala)0
-rw-r--r--test/files/neg/t0503.scala2
-rw-r--r--test/files/neg/t0513.check7
-rw-r--r--test/files/neg/t0513.scala6
-rw-r--r--test/files/neg/t0528neg.scala4
-rw-r--r--test/files/neg/t0565.check4
-rw-r--r--test/files/neg/t0565.scala (renamed from test/pending/run/t0565.scala)2
-rw-r--r--test/files/neg/t0673.check2
-rw-r--r--test/files/neg/t0699.check6
-rw-r--r--test/files/neg/t0764.check2
-rw-r--r--test/files/neg/t0764.scala2
-rw-r--r--test/files/neg/t0816.check4
-rw-r--r--test/files/neg/t0816.scala12
-rw-r--r--test/files/neg/t0851.check9
-rw-r--r--test/files/neg/t0851.scala25
-rw-r--r--test/files/neg/t0903.check2
-rw-r--r--test/files/neg/t1009.scala2
-rw-r--r--test/files/neg/t1010.check6
-rw-r--r--test/files/neg/t1010.scala (renamed from test/files/neg/bug1010.scala)0
-rw-r--r--test/files/neg/t1011.check4
-rw-r--r--test/files/neg/t1011.scala127
-rw-r--r--test/files/neg/t1017.check4
-rw-r--r--test/files/neg/t1017.scala (renamed from test/files/neg/bug1017.scala)0
-rw-r--r--test/files/neg/t1038.check5
-rw-r--r--test/files/neg/t1038.scala (renamed from test/files/neg/bug1038.scala)0
-rw-r--r--test/files/neg/t1041.check6
-rw-r--r--test/files/neg/t1041.scala (renamed from test/files/neg/bug1041.scala)0
-rw-r--r--test/files/neg/t1106.check7
-rw-r--r--test/files/neg/t1106.scala (renamed from test/files/neg/bug1106.scala)0
-rw-r--r--test/files/neg/t1112.check4
-rw-r--r--test/files/neg/t1112.scala14
-rw-r--r--test/files/neg/t112706A.check6
-rw-r--r--test/files/neg/t112706A.scala8
-rw-r--r--test/files/neg/t1181.check8
-rw-r--r--test/files/neg/t1181.scala12
-rw-r--r--test/files/neg/t1183.check17
-rw-r--r--test/files/neg/t1183.scala34
-rw-r--r--test/files/neg/t1215.check2
-rw-r--r--test/files/neg/t1224.check4
-rw-r--r--test/files/neg/t1224.scala (renamed from test/files/neg/bug1224.scala)0
-rw-r--r--test/files/neg/t1241.check4
-rw-r--r--test/files/neg/t1241.scala8
-rw-r--r--test/files/neg/t1275.check6
-rw-r--r--test/files/neg/t1275.scala15
-rw-r--r--test/files/neg/t1286.check9
-rw-r--r--test/files/neg/t1286/a.scala (renamed from test/files/neg/bug1286/a.scala)0
-rw-r--r--test/files/neg/t1286/b.scala (renamed from test/files/neg/bug1286/b.scala)0
-rw-r--r--test/files/neg/t1364.check5
-rw-r--r--test/files/neg/t1364.scala15
-rw-r--r--test/files/neg/t1422.check7
-rw-r--r--test/files/neg/t1422.scala1
-rw-r--r--test/files/neg/t1431.check4
-rw-r--r--test/files/neg/t1431.scala10
-rw-r--r--test/files/neg/t1432.check6
-rw-r--r--test/files/neg/t1432.scala12
-rw-r--r--test/files/neg/t1477.check5
-rw-r--r--test/files/neg/t1477.scala (renamed from test/pending/neg/t1477.scala)4
-rw-r--r--test/files/neg/t1523.check4
-rw-r--r--test/files/neg/t1523.scala5
-rw-r--r--test/files/neg/t1548.check4
-rw-r--r--test/files/neg/t1548/J.java12
-rw-r--r--test/files/neg/t1548/S.scala3
-rw-r--r--test/files/neg/t1623.check4
-rw-r--r--test/files/neg/t1623.scala12
-rw-r--r--test/files/neg/t1701.check2
-rw-r--r--test/files/neg/t1705.scala2
-rw-r--r--test/files/neg/t1838.check7
-rw-r--r--test/files/neg/t1838.scala (renamed from test/files/neg/bug1838.scala)0
-rw-r--r--test/files/neg/t1845.check4
-rw-r--r--test/files/neg/t1845.scala10
-rw-r--r--test/files/neg/t1872.check4
-rw-r--r--test/files/neg/t1872.scala4
-rw-r--r--test/files/neg/t1878.check15
-rw-r--r--test/files/neg/t1878.scala15
-rw-r--r--test/files/neg/t1909b.check4
-rw-r--r--test/files/neg/t1909b.scala (renamed from test/files/neg/bug1909b.scala)0
-rw-r--r--test/files/neg/t1960.check4
-rw-r--r--test/files/neg/t1960.scala5
-rw-r--r--test/files/neg/t200.check4
-rw-r--r--test/files/neg/t200.scala (renamed from test/files/neg/bug200.scala)0
-rw-r--r--test/files/neg/t2031.scala2
-rw-r--r--test/files/neg/t2070.check5
-rw-r--r--test/files/neg/t2070.scala10
-rw-r--r--test/files/neg/t2078.check4
-rw-r--r--test/files/neg/t2078.scala9
-rw-r--r--test/files/neg/t2102.check6
-rw-r--r--test/files/neg/t2102.scala (renamed from test/files/neg/bug2102.scala)0
-rw-r--r--test/files/neg/t2130.check4
-rwxr-xr-xtest/files/neg/t2130.scala6
-rw-r--r--test/files/neg/t2139.check6
-rw-r--r--test/files/neg/t2139.scala15
-rw-r--r--test/files/neg/t2144.check4
-rw-r--r--test/files/neg/t2144.scala (renamed from test/files/neg/bug2144.scala)0
-rw-r--r--test/files/neg/t2148.check4
-rw-r--r--test/files/neg/t2148.scala10
-rw-r--r--test/files/neg/t2180.check6
-rw-r--r--test/files/neg/t2180.scala9
-rw-r--r--test/files/neg/t2206.check5
-rw-r--r--test/files/neg/t2206.scala15
-rw-r--r--test/files/neg/t2208.check2
-rw-r--r--test/files/neg/t2213.check25
-rw-r--r--test/files/neg/t2213.scala11
-rw-r--r--test/files/neg/t2275a.check13
-rw-r--r--test/files/neg/t2275a.scala (renamed from test/files/neg/bug2275a.scala)0
-rw-r--r--test/files/neg/t2275b.check10
-rw-r--r--test/files/neg/t2275b.scala (renamed from test/files/neg/bug2275b.scala)0
-rw-r--r--test/files/neg/t2386.check4
-rw-r--r--test/files/neg/t2386.scala3
-rw-r--r--test/files/neg/t2388.check4
-rw-r--r--test/files/neg/t2388.scala4
-rw-r--r--test/files/neg/t2416.check10
-rw-r--r--test/files/neg/t2416.scala14
-rw-r--r--test/files/neg/t2421b.check4
-rw-r--r--test/files/neg/t2421b.scala17
-rw-r--r--test/files/neg/t2441.check4
-rw-r--r--test/files/neg/t2441.scala15
-rw-r--r--test/files/neg/t2462a.check4
-rw-r--r--test/files/neg/t2462a.scala3
-rw-r--r--test/files/neg/t2462b.check14
-rw-r--r--test/files/neg/t2462b.scala12
-rw-r--r--test/files/neg/t2641.check35
-rw-r--r--test/files/neg/t2641.scala30
-rw-r--r--test/files/neg/t276.check5
-rw-r--r--test/files/neg/t276.scala (renamed from test/files/neg/bug276.scala)0
-rw-r--r--test/files/neg/t2773.check7
-rwxr-xr-xtest/files/neg/t2773.scala8
-rw-r--r--test/files/neg/t2775.check4
-rw-r--r--test/files/neg/t2775.scala1
-rw-r--r--test/files/neg/t2779.check4
-rwxr-xr-xtest/files/neg/t2779.scala25
-rw-r--r--test/files/neg/t278.check10
-rw-r--r--test/files/neg/t278.scala6
-rw-r--r--test/files/neg/t2801.check6
-rw-r--r--test/files/neg/t2801.scala3
-rw-r--r--test/files/neg/t284.check8
-rw-r--r--test/files/neg/t284.scala (renamed from test/files/neg/bug284.scala)0
-rw-r--r--test/files/neg/t2870.check7
-rwxr-xr-xtest/files/neg/t2870.scala9
-rw-r--r--test/files/neg/t2910.check16
-rw-r--r--test/files/neg/t2910.scala39
-rw-r--r--test/files/neg/t2918.check10
-rwxr-xr-xtest/files/neg/t2918.scala3
-rw-r--r--test/files/neg/t2973.check4
-rw-r--r--test/files/neg/t2973.scala1
-rw-r--r--test/files/neg/t3006.check6
-rwxr-xr-xtest/files/neg/t3006.scala10
-rw-r--r--test/files/neg/t3015.check11
-rw-r--r--test/files/neg/t3015.scala8
-rw-r--r--test/files/neg/t3098.check6
-rw-r--r--test/files/neg/t3098.flags1
-rw-r--r--test/files/neg/t3098/a.scala6
-rw-r--r--test/files/neg/t3098/b.scala8
-rw-r--r--test/files/neg/t3118.check7
-rw-r--r--test/files/neg/t3118.scala8
-rw-r--r--test/files/neg/t3209.check4
-rw-r--r--test/files/neg/t3209.scala2
-rw-r--r--test/files/neg/t3222.check7
-rw-r--r--test/files/neg/t3222.scala9
-rw-r--r--test/files/neg/t3224.check6
-rwxr-xr-xtest/files/neg/t3224.scala30
-rw-r--r--test/files/neg/t3240.check7
-rw-r--r--test/files/neg/t3240.scala8
-rw-r--r--test/files/neg/t3392.check4
-rw-r--r--test/files/neg/t3392.scala11
-rw-r--r--test/files/neg/t3399.check4
-rw-r--r--test/files/neg/t3399.scala24
-rw-r--r--test/files/neg/t3403.check4
-rw-r--r--test/files/neg/t3403.scala2
-rw-r--r--test/files/neg/t343.check4
-rw-r--r--test/files/neg/t343.scala (renamed from test/files/neg/bug343.scala)0
-rw-r--r--test/files/neg/t3453.check21
-rw-r--r--test/files/neg/t3453.scala66
-rw-r--r--test/files/neg/t3481.check29
-rw-r--r--test/files/neg/t3481.scala28
-rw-r--r--test/files/neg/t3507.check4
-rw-r--r--test/files/neg/t3507.scala15
-rw-r--r--test/files/neg/t3604.check7
-rw-r--r--test/files/neg/t3604.scala6
-rw-r--r--test/files/neg/t3631.check4
-rw-r--r--test/files/neg/t3631.scala3
-rw-r--r--test/files/neg/t3649.check10
-rw-r--r--test/files/neg/t3649.scala2
-rw-r--r--test/files/neg/t3653.check7
-rw-r--r--test/files/neg/t3653.scala4
-rw-r--r--test/files/neg/t3663.check4
-rw-r--r--test/files/neg/t3663/PackageProtected.java5
-rw-r--r--test/files/neg/t3663/main.scala14
-rw-r--r--test/files/neg/t3683a.check6
-rw-r--r--test/files/neg/t3683a.flags1
-rw-r--r--test/files/neg/t3683a.scala20
-rw-r--r--test/files/neg/t3683b.check8
-rw-r--r--test/files/neg/t3683b.scala21
-rw-r--r--test/files/neg/t3691.check16
-rw-r--r--test/files/neg/t3691.scala11
-rw-r--r--test/files/neg/t3692.check4
-rw-r--r--test/files/neg/t3692.scala19
-rw-r--r--test/files/neg/t3714-neg.check13
-rw-r--r--test/files/neg/t3714-neg.scala41
-rw-r--r--test/files/neg/t3736.check16
-rw-r--r--test/files/neg/t3736.scala34
-rw-r--r--test/files/neg/t3757.check4
-rw-r--r--test/files/neg/t3757/A.java5
-rw-r--r--test/files/neg/t3757/B.scala5
-rw-r--r--test/files/neg/t3769.check7
-rw-r--r--test/files/neg/t3769.scala3
-rw-r--r--test/files/neg/t3776.check4
-rw-r--r--test/files/neg/t3776.scala10
-rw-r--r--test/files/neg/t3816.check7
-rw-r--r--test/files/neg/t3816.scala42
-rw-r--r--test/files/neg/t3873.check6
-rw-r--r--test/files/neg/t3873.scala12
-rw-r--r--test/files/neg/t3909.check4
-rw-r--r--test/files/neg/t3909.scala12
-rw-r--r--test/files/neg/t391.check13
-rw-r--r--test/files/neg/t391.scala (renamed from test/files/neg/bug391.scala)0
-rw-r--r--test/files/neg/t3913.check4
-rw-r--r--test/files/neg/t3913.scala8
-rw-r--r--test/files/neg/t3934.check13
-rw-r--r--test/files/neg/t3934.scala23
-rw-r--r--test/files/neg/t3977.check4
-rw-r--r--test/files/neg/t3977.scala13
-rw-r--r--test/files/neg/t3987.check7
-rw-r--r--test/files/neg/t3987.scala13
-rw-r--r--test/files/neg/t4044.check16
-rw-r--r--test/files/neg/t4044.scala16
-rw-r--r--test/files/neg/t4064.check4
-rw-r--r--test/files/neg/t4064.scala5
-rw-r--r--test/files/neg/t4069.check16
-rw-r--r--test/files/neg/t4069.scala10
-rw-r--r--test/files/neg/t4079.check4
-rw-r--r--test/files/neg/t4079/t4079_1.scala33
-rw-r--r--test/files/neg/t4079/t4079_2.scala3
-rw-r--r--test/files/neg/t409.check4
-rw-r--r--test/files/neg/t409.scala (renamed from test/files/neg/bug409.scala)0
-rw-r--r--test/files/neg/t4091.check4
-rw-r--r--test/files/neg/t4091.scala2
-rw-r--r--test/files/neg/t412.check5
-rw-r--r--test/files/neg/t412.scala (renamed from test/files/neg/bug412.scala)0
-rw-r--r--test/files/neg/t4137.check9
-rw-r--r--test/files/neg/t4137.scala11
-rw-r--r--test/files/neg/t414.check12
-rw-r--r--test/files/neg/t414.scala10
-rw-r--r--test/files/neg/t4158.check19
-rw-r--r--test/files/neg/t4158.scala4
-rw-r--r--test/files/neg/t4163.check7
-rw-r--r--test/files/neg/t4163.scala8
-rw-r--r--test/files/neg/t4166.check4
-rw-r--r--test/files/neg/t4166.scala11
-rw-r--r--test/files/neg/t4174.check4
-rw-r--r--test/files/neg/t4174.scala9
-rw-r--r--test/files/neg/t418.check7
-rw-r--r--test/files/neg/t418.scala (renamed from test/pending/pos/bug0418.scala)0
-rw-r--r--test/files/neg/t4196.check4
-rw-r--r--test/files/neg/t4196.scala6
-rw-r--r--test/files/neg/t421.check4
-rw-r--r--test/files/neg/t421.scala (renamed from test/files/neg/bug421.scala)0
-rw-r--r--test/files/neg/t4217.check4
-rw-r--r--test/files/neg/t4217.scala3
-rw-r--r--test/files/neg/t4221.check6
-rw-r--r--test/files/neg/t4221.scala10
-rw-r--r--test/files/neg/t425.check4
-rw-r--r--test/files/neg/t425.scala (renamed from test/pending/pos/t425.scala)0
-rw-r--r--test/files/neg/t4302.check4
-rw-r--r--test/files/neg/t4302.flags1
-rw-r--r--test/files/neg/t4302.scala3
-rw-r--r--test/files/neg/t4417.check7
-rw-r--r--test/files/neg/t4417.scala17
-rw-r--r--test/files/neg/t4419.check4
-rw-r--r--test/files/neg/t4419.scala3
-rw-r--r--test/files/neg/t4425.check4
-rw-r--r--test/files/neg/t4425.scala4
-rw-r--r--test/files/neg/t4431.check7
-rw-r--r--test/files/neg/t4431.scala16
-rw-r--r--test/files/neg/t4457_1.check7
-rw-r--r--test/files/neg/t4457_1.scala33
-rw-r--r--test/files/neg/t4457_2.check13
-rw-r--r--test/files/neg/t4457_2.scala33
-rw-r--r--test/files/neg/t452.check6
-rw-r--r--test/files/neg/t452.scala (renamed from test/files/neg/bug452.scala)0
-rw-r--r--test/files/neg/t4537.check4
-rw-r--r--test/files/neg/t4537/a.scala5
-rw-r--r--test/files/neg/t4537/b.scala5
-rw-r--r--test/files/neg/t4537/c.scala8
-rw-r--r--test/files/neg/t4584.check4
-rw-r--r--test/files/neg/t4584.scala1
-rw-r--r--test/files/neg/t464-neg.check16
-rw-r--r--test/files/neg/t464-neg.scala12
-rw-r--r--test/files/neg/t4727.check11
-rw-r--r--test/files/neg/t4727.scala7
-rw-r--r--test/files/neg/t473.check4
-rw-r--r--test/files/neg/t473.scala (renamed from test/files/neg/bug473.scala)0
-rw-r--r--test/files/neg/t4762.check7
-rw-r--r--test/files/neg/t4762.flags1
-rw-r--r--test/files/neg/t4762.scala51
-rw-r--r--test/files/neg/t4851.check43
-rw-r--r--test/files/neg/t4851.flags1
-rw-r--r--test/files/neg/t4851/J.java15
-rw-r--r--test/files/neg/t4851/J2.java11
-rw-r--r--test/files/neg/t4851/S.scala23
-rw-r--r--test/files/neg/t4877.check22
-rw-r--r--test/files/neg/t4877.flags1
-rw-r--r--test/files/neg/t4877.scala22
-rw-r--r--test/files/neg/t4879.check13
-rw-r--r--test/files/neg/t4879.scala15
-rw-r--r--test/files/neg/t4882.check4
-rw-r--r--test/files/neg/t4882.scala3
-rw-r--r--test/files/neg/t500.check4
-rw-r--r--test/files/neg/t500.scala (renamed from test/files/neg/bug500.scala)0
-rw-r--r--test/files/neg/t501.check4
-rw-r--r--test/files/neg/t501.scala (renamed from test/files/neg/bug501.scala)0
-rw-r--r--test/files/neg/t5060.check7
-rw-r--r--test/files/neg/t5060.scala19
-rw-r--r--test/files/neg/t5067.check6
-rw-r--r--test/files/neg/t5067.scala4
-rw-r--r--test/files/neg/t5078.check13
-rw-r--r--test/files/neg/t5078.scala11
-rw-r--r--test/files/neg/t5093.check10
-rw-r--r--test/files/neg/t5093.scala3
-rw-r--r--test/files/neg/t510.check4
-rw-r--r--test/files/neg/t510.scala (renamed from test/files/neg/bug510.scala)0
-rw-r--r--test/files/neg/t512.check4
-rw-r--r--test/files/neg/t512.scala (renamed from test/files/neg/bug512.scala)0
-rw-r--r--test/files/neg/t5120.check12
-rw-r--r--test/files/neg/t5120.scala29
-rw-r--r--test/files/neg/t515.check6
-rw-r--r--test/files/neg/t515.scala8
-rw-r--r--test/files/neg/t5152.check9
-rw-r--r--test/files/neg/t5152.scala17
-rw-r--r--test/files/neg/t520.check4
-rw-r--r--test/files/neg/t520.scala9
-rw-r--r--test/files/neg/t521.check15
-rw-r--r--test/files/neg/t521.scala (renamed from test/files/neg/bug521.scala)0
-rw-r--r--test/files/neg/t545.check7
-rw-r--r--test/files/neg/t545.scala (renamed from test/files/neg/bug545.scala)0
-rw-r--r--test/files/neg/t550.check7
-rw-r--r--test/files/neg/t550.scala (renamed from test/files/neg/bug550.scala)0
-rw-r--r--test/files/neg/t556.check4
-rw-r--r--test/files/neg/t556.scala4
-rw-r--r--test/files/neg/t558.check4
-rw-r--r--test/files/neg/t558.scala19
-rw-r--r--test/files/neg/t562.check4
-rw-r--r--test/files/neg/t562.scala (renamed from test/files/neg/bug562.scala)0
-rw-r--r--test/files/neg/t563.check4
-rw-r--r--test/files/neg/t563.scala7
-rw-r--r--test/files/neg/t565.check5
-rw-r--r--test/files/neg/t565.scala (renamed from test/files/neg/bug565.scala)0
-rw-r--r--test/files/neg/t576.check4
-rw-r--r--test/files/neg/t576.scala20
-rw-r--r--test/files/neg/t585.check4
-rw-r--r--test/files/neg/t585.scala (renamed from test/files/neg/bug585.scala)0
-rw-r--r--test/files/neg/t588.check13
-rw-r--r--test/files/neg/t588.scala15
-rw-r--r--test/files/neg/t591.check4
-rw-r--r--test/files/neg/t591.scala41
-rw-r--r--test/files/neg/t593.check4
-rw-r--r--test/files/neg/t593.scala (renamed from test/files/neg/bug593.scala)0
-rw-r--r--test/files/neg/t608.check6
-rw-r--r--test/files/neg/t608.scala17
-rw-r--r--test/files/neg/t630.check5
-rw-r--r--test/files/neg/t630.scala23
-rw-r--r--test/files/neg/t631.check4
-rw-r--r--test/files/neg/t631.scala (renamed from test/files/neg/bug631.scala)0
-rw-r--r--test/files/neg/t633.check4
-rw-r--r--test/files/neg/t633.scala (renamed from test/files/neg/bug633.scala)0
-rw-r--r--test/files/neg/t639.check4
-rw-r--r--test/files/neg/t639.scala (renamed from test/files/neg/bug639.scala)0
-rw-r--r--test/files/neg/t649.check4
-rw-r--r--test/files/neg/t649.scala (renamed from test/files/neg/bug649.scala)0
-rw-r--r--test/files/neg/t650.check4
-rw-r--r--test/files/neg/t650.scala (renamed from test/files/neg/bug650.scala)0
-rw-r--r--test/files/neg/t663.check7
-rw-r--r--test/files/neg/t663.scala (renamed from test/files/neg/bug663.scala)0
-rw-r--r--test/files/neg/t664.check7
-rw-r--r--test/files/neg/t664.scala (renamed from test/files/neg/bug664.scala)0
-rw-r--r--test/files/neg/t667.check4
-rw-r--r--test/files/neg/t667.scala (renamed from test/files/neg/bug667.scala)0
-rw-r--r--test/files/neg/t668.check4
-rw-r--r--test/files/neg/t668.scala (renamed from test/files/neg/bug668.scala)0
-rw-r--r--test/files/neg/t677.check6
-rw-r--r--test/files/neg/t677.scala (renamed from test/files/neg/bug677.scala)0
-rw-r--r--test/files/neg/t691.check4
-rw-r--r--test/files/neg/t691.scala (renamed from test/files/neg/bug691.scala)0
-rw-r--r--test/files/neg/t692.check24
-rw-r--r--test/files/neg/t692.scala20
-rw-r--r--test/files/neg/t693.check4
-rw-r--r--test/files/neg/t693.scala5
-rw-r--r--test/files/neg/t696.check5
-rw-r--r--test/files/neg/t696.scala (renamed from test/files/neg/bug696.scala)0
-rw-r--r--test/files/neg/t700.check4
-rw-r--r--test/files/neg/t700.scala10
-rw-r--r--test/files/neg/t708.check5
-rw-r--r--test/files/neg/t708.scala (renamed from test/files/neg/bug708.scala)0
-rw-r--r--test/files/neg/t712.check4
-rw-r--r--test/files/neg/t712.scala (renamed from test/files/neg/bug712.scala)0
-rw-r--r--test/files/neg/t715.check4
-rw-r--r--test/files/neg/t715.scala15
-rw-r--r--test/files/neg/t729.check6
-rw-r--r--test/files/neg/t729.scala (renamed from test/files/neg/bug729.scala)0
-rw-r--r--test/files/neg/t742.check5
-rw-r--r--test/files/neg/t742.scala8
-rw-r--r--test/files/neg/t752.check6
-rw-r--r--test/files/neg/t752.scala (renamed from test/files/neg/bug752.scala)0
-rw-r--r--test/files/neg/t765.check4
-rw-r--r--test/files/neg/t765.scala (renamed from test/files/neg/bug765.scala)0
-rw-r--r--test/files/neg/t766.check4
-rw-r--r--test/files/neg/t766.scala (renamed from test/files/neg/bug766.scala)0
-rw-r--r--test/files/neg/t771.check4
-rwxr-xr-xtest/files/neg/t771.scala5
-rw-r--r--test/files/neg/t779.check4
-rw-r--r--test/files/neg/t779.scala (renamed from test/files/neg/bug779.scala)0
-rw-r--r--test/files/neg/t783.check6
-rw-r--r--test/files/neg/t783.scala29
-rw-r--r--test/files/neg/t798.check4
-rw-r--r--test/files/neg/t798.scala8
-rw-r--r--test/files/neg/t800.check13
-rw-r--r--test/files/neg/t800.scala (renamed from test/files/neg/bug800.scala)0
-rw-r--r--test/files/neg/t835.check9
-rw-r--r--test/files/neg/t835.scala3
-rw-r--r--test/files/neg/t836.check7
-rw-r--r--test/files/neg/t836.scala16
-rw-r--r--test/files/neg/t845.check4
-rw-r--r--test/files/neg/t845.scala16
-rw-r--r--test/files/neg/t846.check6
-rw-r--r--test/files/neg/t846.scala (renamed from test/files/neg/bug846.scala)0
-rw-r--r--test/files/neg/t856.check14
-rw-r--r--test/files/neg/t856.scala11
-rw-r--r--test/files/neg/t875.check17
-rw-r--r--test/files/neg/t875.scala18
-rw-r--r--test/files/neg/t876.check4
-rw-r--r--test/files/neg/t876.scala28
-rw-r--r--test/files/neg/t877.check7
-rw-r--r--test/files/neg/t877.scala3
-rw-r--r--test/files/neg/t882.check4
-rw-r--r--test/files/neg/t882.scala (renamed from test/files/neg/bug882.scala)0
-rw-r--r--test/files/neg/t900.check10
-rw-r--r--test/files/neg/t900.scala (renamed from test/files/neg/bug900.scala)0
-rw-r--r--test/files/neg/t908.check4
-rw-r--r--test/files/neg/t908.scala (renamed from test/files/neg/bug908.scala)0
-rw-r--r--test/files/neg/t909.check6
-rw-r--r--test/files/neg/t909.scala (renamed from test/files/neg/bug909.scala)0
-rw-r--r--test/files/neg/t910.check6
-rw-r--r--test/files/neg/t910.scala7
-rw-r--r--test/files/neg/t935.check7
-rw-r--r--test/files/neg/t935.scala14
-rw-r--r--test/files/neg/t944.check4
-rw-r--r--test/files/neg/t944.scala6
-rw-r--r--test/files/neg/t960.check10
-rw-r--r--test/files/neg/t960.scala (renamed from test/files/neg/bug960.scala)0
-rw-r--r--test/files/neg/t961.check4
-rw-r--r--test/files/neg/t961.scala14
-rw-r--r--test/files/neg/t987.check19
-rw-r--r--test/files/neg/t987.scala25
-rw-r--r--test/files/neg/t997.check13
-rw-r--r--test/files/neg/t997.scala15
-rw-r--r--test/files/neg/tailrec-2.check4
-rw-r--r--test/files/neg/tailrec-2.scala26
-rw-r--r--test/files/neg/tailrec-3.check10
-rw-r--r--test/files/neg/tailrec-3.scala14
-rw-r--r--test/files/neg/tailrec.check22
-rw-r--r--test/files/neg/tailrec.scala56
-rw-r--r--test/files/neg/tcpoly_infer_ticket1162.check2
-rw-r--r--test/files/neg/tcpoly_infer_ticket1162.scala4
-rw-r--r--test/files/neg/tcpoly_override.scala2
-rw-r--r--test/files/neg/tcpoly_ticket2101.check2
-rw-r--r--test/files/neg/tcpoly_ticket2101.scala8
-rw-r--r--test/files/neg/tcpoly_typealias.scala6
-rw-r--r--test/files/neg/tcpoly_variance.check4
-rw-r--r--test/files/neg/tcpoly_variance.scala4
-rw-r--r--test/files/neg/tcpoly_variance_enforce.check4
-rw-r--r--test/files/neg/tcpoly_variance_enforce.scala20
-rw-r--r--test/files/neg/type-diagnostics.check21
-rw-r--r--test/files/neg/type-diagnostics.scala22
-rw-r--r--test/files/neg/typeerror.check2
-rw-r--r--test/files/neg/unit-returns-value.check7
-rw-r--r--test/files/neg/unit-returns-value.flags1
-rw-r--r--test/files/neg/unit-returns-value.scala11
-rw-r--r--test/files/neg/unit2anyref.check6
-rw-r--r--test/files/neg/unreachablechar.scala2
-rw-r--r--test/files/neg/varargs.check10
-rw-r--r--test/files/neg/varargs.scala27
-rw-r--r--test/files/neg/variances.check7
-rw-r--r--test/files/neg/variances.scala24
-rw-r--r--test/files/neg/viewtest.scala22
-rw-r--r--test/files/neg/volatile-intersection.scala2
-rw-r--r--test/files/neg/volatile.scala2
-rw-r--r--test/files/neg/xmltruncated7.check7
-rw-r--r--test/files/neg/xmltruncated7.scala3
-rw-r--r--test/files/pos/CustomGlobal.scala33
-rw-r--r--test/files/pos/FPTest.scala11
-rw-r--r--test/files/pos/List1.scala2
-rw-r--r--test/files/pos/MailBox.scala7
-rw-r--r--test/files/pos/Transactions.scala18
-rw-r--r--test/files/pos/annotDepMethType.flags1
-rw-r--r--test/files/pos/annotDepMethType.scala7
-rw-r--r--test/files/pos/annotations.scala38
-rw-r--r--test/files/pos/array-interfaces.scala9
-rw-r--r--test/files/pos/arrays2.scala4
-rw-r--r--test/files/pos/bug0029.scala3
-rw-r--r--test/files/pos/bug0031.scala29
-rw-r--r--test/files/pos/bug0066.scala7
-rw-r--r--test/files/pos/bug0069.scala11
-rw-r--r--test/files/pos/bug0091.scala6
-rw-r--r--test/files/pos/bug0325.scala4
-rw-r--r--test/files/pos/bug0599.scala18
-rw-r--r--test/files/pos/bug0646.scala21
-rw-r--r--test/files/pos/bug1000.scala4
-rw-r--r--test/files/pos/bug1001.scala105
-rw-r--r--test/files/pos/bug1006.scala15
-rw-r--r--test/files/pos/bug1014.scala13
-rw-r--r--test/files/pos/bug1049.scala7
-rw-r--r--test/files/pos/bug1050.scala10
-rw-r--r--test/files/pos/bug1070.scala4
-rw-r--r--test/files/pos/bug1075.scala17
-rw-r--r--test/files/pos/bug1090.scala16
-rw-r--r--test/files/pos/bug1123.scala11
-rw-r--r--test/files/pos/bug115.scala9
-rw-r--r--test/files/pos/bug1168.scala16
-rw-r--r--test/files/pos/bug1210a.scala15
-rw-r--r--test/files/pos/bug122.scala4
-rw-r--r--test/files/pos/bug1237.scala14
-rw-r--r--test/files/pos/bug1241.scala8
-rw-r--r--test/files/pos/bug1272.scala9
-rw-r--r--test/files/pos/bug1279a.scala38
-rw-r--r--test/files/pos/bug1292.scala33
-rw-r--r--test/files/pos/bug1357.scala21
-rw-r--r--test/files/pos/bug1385.scala3
-rw-r--r--test/files/pos/bug1560.scala11
-rw-r--r--test/files/pos/bug1565.scala18
-rw-r--r--test/files/pos/bug2023.scala16
-rw-r--r--test/files/pos/bug2081.scala11
-rw-r--r--test/files/pos/bug210.scala17
-rw-r--r--test/files/pos/bug211.scala8
-rw-r--r--test/files/pos/bug2168.scala6
-rw-r--r--test/files/pos/bug2187.scala7
-rw-r--r--test/files/pos/bug2261.scala6
-rw-r--r--test/files/pos/bug247.scala26
-rw-r--r--test/files/pos/bug252.scala17
-rw-r--r--test/files/pos/bug262.scala14
-rw-r--r--test/files/pos/bug267.scala55
-rw-r--r--test/files/pos/bug287.scala12
-rw-r--r--test/files/pos/bug342.scala8
-rw-r--r--test/files/pos/bug348plus.scala24
-rw-r--r--test/files/pos/bug374.scala21
-rw-r--r--test/files/pos/bug430-feb09.scala34
-rw-r--r--test/files/pos/bug430.scala20
-rw-r--r--test/files/pos/bug432.scala2
-rw-r--r--test/files/pos/bug460.scala9
-rw-r--r--test/files/pos/bug514.scala7
-rw-r--r--test/files/pos/bug516.scala15
-rw-r--r--test/files/pos/bug531.scala10
-rw-r--r--test/files/pos/bug532.scala10
-rw-r--r--test/files/pos/bug577.scala21
-rw-r--r--test/files/pos/bug599.scala19
-rw-r--r--test/files/pos/bug602.scala14
-rw-r--r--test/files/pos/bug613.scala17
-rw-r--r--test/files/pos/bug616.scala11
-rw-r--r--test/files/pos/bug651.scala15
-rw-r--r--test/files/pos/bug675.scala19
-rw-r--r--test/files/pos/bug690.scala14
-rw-r--r--test/files/pos/bug698.scala12
-rw-r--r--test/files/pos/bug711.scala14
-rw-r--r--test/files/pos/bug720.scala9
-rw-r--r--test/files/pos/bug757.scala13
-rw-r--r--test/files/pos/bug758.scala7
-rw-r--r--test/files/pos/bug759.scala6
-rw-r--r--test/files/pos/bug767.scala18
-rw-r--r--test/files/pos/bug788.scala19
-rw-r--r--test/files/pos/bug796.scala26
-rw-r--r--test/files/pos/bug802.scala27
-rw-r--r--test/files/pos/bug807.scala45
-rw-r--r--test/files/pos/bug812.scala7
-rw-r--r--test/files/pos/bug839.scala26
-rw-r--r--test/files/pos/bug927.scala11
-rw-r--r--test/files/pos/bug946.scala8
-rw-r--r--test/files/pos/builders.scala10
-rw-r--r--test/files/pos/caseClassInMethod.scala5
-rw-r--r--test/files/pos/channels.scala10
-rw-r--r--test/files/pos/clsrefine.scala4
-rw-r--r--test/files/pos/code.scala3
-rw-r--r--test/files/pos/collectGenericCC.scala14
-rw-r--r--test/files/pos/collections.scala2
-rw-r--r--test/files/pos/comp-rec-test.scala2
-rw-r--r--test/files/pos/constfold.scala2
-rw-r--r--test/files/pos/context.scala6
-rw-r--r--test/files/pos/contextbounds-implicits.scala8
-rw-r--r--test/files/pos/cyclics-pos.scala26
-rw-r--r--test/files/pos/cyclics.scala26
-rw-r--r--test/files/pos/depexists.scala5
-rw-r--r--test/files/pos/depmet_1_pos.scala6
-rw-r--r--test/files/pos/depmet_implicit_chaining_zw.scala28
-rw-r--r--test/files/pos/depmet_implicit_norm_ret.scala29
-rw-r--r--test/files/pos/depmet_implicit_oopsla_session.scala63
-rw-r--r--test/files/pos/depmet_implicit_oopsla_session_2.scala87
-rw-r--r--test/files/pos/depmet_implicit_oopsla_session_simpler.scala44
-rw-r--r--test/files/pos/depmet_implicit_oopsla_zipwith.scala44
-rw-r--r--test/files/pos/depmet_implicit_tpbetareduce.scala12
-rw-r--r--test/files/pos/elidable-tparams.scala10
-rw-r--r--test/files/pos/exceptions.scala20
-rw-r--r--test/files/pos/five-dot-f.flags1
-rw-r--r--test/files/pos/five-dot-f.scala5
-rw-r--r--test/files/pos/gadt-gilles.scala2
-rw-r--r--test/files/pos/gadts2.scala4
-rw-r--r--test/files/pos/generic-sigs.flags1
-rw-r--r--test/files/pos/generic-sigs.scala18
-rw-r--r--test/files/pos/getClassType.scala16
-rw-r--r--test/files/pos/gosh.scala18
-rw-r--r--test/files/pos/gui.scala12
-rw-r--r--test/files/pos/hashhash-overloads.scala6
-rw-r--r--test/files/pos/hk-infer.scala37
-rw-r--r--test/files/pos/hkarray.flags1
-rw-r--r--test/files/pos/hkarray.scala5
-rw-r--r--test/files/pos/hklub0.scala5
-rw-r--r--test/files/pos/hkrange.scala5
-rw-r--r--test/files/pos/imp2-pos.scala5
-rw-r--r--test/files/pos/imp2.scala5
-rw-r--r--test/files/pos/implicit-infix-ops.scala23
-rw-r--r--test/files/pos/implicit-unwrap-tc.scala10
-rw-r--r--test/files/pos/implicits.scala55
-rw-r--r--test/files/pos/imports-pos.scala16
-rw-r--r--test/files/pos/imports.scala16
-rw-r--r--test/files/pos/infer2-pos.scala8
-rw-r--r--test/files/pos/infer2.scala8
-rw-r--r--test/files/pos/inferbroadtype.scala2
-rw-r--r--test/files/pos/infersingle.flags1
-rw-r--r--test/files/pos/infersingle.scala5
-rw-r--r--test/files/pos/init.scala2
-rw-r--r--test/files/pos/inliner2.flags1
-rw-r--r--test/files/pos/inliner2.scala57
-rw-r--r--test/files/pos/isApplicableSafe.scala8
-rw-r--r--test/files/pos/iterator-traversable-mix.scala8
-rw-r--r--test/files/pos/java-access-pos/J.java15
-rw-r--r--test/files/pos/java-access-pos/S1.scala67
-rw-r--r--test/files/pos/javaReadsSigs/fromjava.java75
-rw-r--r--test/files/pos/lambdalift.scala2
-rwxr-xr-xtest/files/pos/lexical.scala2
-rw-r--r--test/files/pos/liftcode_polymorphic.scala11
-rw-r--r--test/files/pos/list-extractor.scala8
-rw-r--r--test/files/pos/listpattern.scala2
-rw-r--r--test/files/pos/looping-jsig.scala8
-rw-r--r--test/files/pos/macros.flags1
-rw-r--r--test/files/pos/macros.scala10
-rw-r--r--test/files/pos/manifest1.scala7
-rw-r--r--test/files/pos/michel6.scala2
-rw-r--r--test/files/pos/misc-unapply_pos.scala (renamed from test/files/pos/unapply.scala)0
-rw-r--r--test/files/pos/native-warning.flags1
-rw-r--r--test/files/pos/native-warning.scala3
-rw-r--r--test/files/pos/needstypeearly.scala4
-rw-r--r--test/files/pos/nested2.scala2
-rw-r--r--test/files/pos/noproductN.flags1
-rw-r--r--test/files/pos/noproductN.scala2
-rw-r--r--test/files/pos/nothing_manifest_disambig.scala10
-rw-r--r--test/files/pos/nullary.scala4
-rw-r--r--test/files/pos/nullary_poly.scala4
-rw-r--r--test/files/pos/override-object-yes.flags1
-rw-r--r--test/files/pos/override-object-yes.scala40
-rw-r--r--test/files/pos/partialfun.scala2
-rw-r--r--test/files/pos/pat_gilles.scala2
-rw-r--r--test/files/pos/patmat.scala163
-rw-r--r--test/files/pos/polymorphic-case-class.flags1
-rw-r--r--test/files/pos/polymorphic-case-class.scala2
-rw-r--r--test/files/pos/pos-bug1210.scala (renamed from test/files/pos/bug1210.scala)0
-rw-r--r--test/files/pos/pos-bug1241.scala8
-rw-r--r--test/files/pos/propagate.scala2
-rw-r--r--test/files/pos/protected-static/J.java7
-rw-r--r--test/files/pos/protected-static/JavaClass.java6
-rw-r--r--test/files/pos/protected-static/S.scala7
-rw-r--r--test/files/pos/protected-static/ScalaClass.scala6
-rw-r--r--test/files/pos/relax_implicit_divergence.scala7
-rw-r--r--test/files/pos/return_thistype.scala6
-rw-r--r--test/files/pos/scala-singleton.scala55
-rw-r--r--test/files/pos/scoping1.scala4
-rw-r--r--test/files/pos/self-type-override.scala13
-rw-r--r--test/files/pos/selftails.scala23
-rw-r--r--test/files/pos/seq-ordering.scala9
-rw-r--r--test/files/pos/signatures/Test.java2
-rw-r--r--test/files/pos/signatures/sig.scala2
-rw-r--r--test/files/pos/simple-exceptions.scala20
-rw-r--r--test/files/pos/spec-Function1.flags1
-rw-r--r--test/files/pos/spec-Function1.scala9
-rw-r--r--test/files/pos/spec-List.flags1
-rw-r--r--test/files/pos/spec-annotations.flags1
-rw-r--r--test/files/pos/spec-annotations.scala2
-rw-r--r--test/files/pos/spec-arrays.flags1
-rw-r--r--test/files/pos/spec-arrays.scala36
-rw-r--r--test/files/pos/spec-asseenfrom.scala29
-rw-r--r--test/files/pos/spec-constr.scala7
-rw-r--r--test/files/pos/spec-cyclic.flags1
-rw-r--r--test/files/pos/spec-cyclic.scala8
-rw-r--r--test/files/pos/spec-doubledef.scala28
-rw-r--r--test/files/pos/spec-example1.flags1
-rw-r--r--test/files/pos/spec-fields.flags1
-rw-r--r--test/files/pos/spec-foo.flags1
-rw-r--r--test/files/pos/spec-funs.flags1
-rw-r--r--test/files/pos/spec-funs.scala6
-rw-r--r--test/files/pos/spec-lists.flags1
-rw-r--r--test/files/pos/spec-lists.scala2
-rw-r--r--test/files/pos/spec-localdefs.flags1
-rw-r--r--test/files/pos/spec-maps.flags1
-rw-r--r--test/files/pos/spec-multiplectors.scala3
-rw-r--r--test/files/pos/spec-params.flags1
-rw-r--r--test/files/pos/spec-params.scala6
-rw-r--r--test/files/pos/spec-partially.scala5
-rw-r--r--test/files/pos/spec-partialmap.scala17
-rw-r--r--test/files/pos/spec-polymeth.flags1
-rw-r--r--test/files/pos/spec-private.scala10
-rw-r--r--test/files/pos/spec-sealed.flags1
-rw-r--r--test/files/pos/spec-sealed.scala6
-rw-r--r--test/files/pos/spec-short.flags1
-rw-r--r--test/files/pos/spec-short.scala6
-rw-r--r--test/files/pos/spec-simple.flags1
-rw-r--r--test/files/pos/spec-sparsearray.scala24
-rw-r--r--test/files/pos/spec-super.flags1
-rw-r--r--test/files/pos/spec-t3497.scala16
-rw-r--r--test/files/pos/spec-tailcall.flags1
-rw-r--r--test/files/pos/spec-tailcall.scala4
-rw-r--r--test/files/pos/spec-thistype.flags1
-rw-r--r--test/files/pos/spec-traits.scala64
-rw-r--r--test/files/pos/spec-vector.scala4
-rw-r--r--test/files/pos/spec.scala64
-rw-r--r--test/files/pos/strings.scala2
-rw-r--r--test/files/pos/sudoku.scala12
-rw-r--r--test/files/pos/super.cmds2
-rw-r--r--test/files/pos/super/Super_1.java2
-rw-r--r--test/files/pos/switch-small.scala8
-rw-r--r--test/files/pos/switchUnbox.flags1
-rw-r--r--test/files/pos/switchUnbox.scala5
-rw-r--r--test/files/pos/t0002.scala (renamed from test/files/pos/bug0002.scala)0
-rw-r--r--test/files/pos/t0017.scala (renamed from test/files/pos/bug0017.scala)0
-rw-r--r--test/files/pos/t0020.scala (renamed from test/files/pos/bug0020.scala)0
-rw-r--r--test/files/pos/t0029.scala3
-rw-r--r--test/files/pos/t0030.scala (renamed from test/files/pos/bug0030.scala)0
-rw-r--r--test/files/pos/t0031.scala29
-rw-r--r--test/files/pos/t0032.scala (renamed from test/files/pos/bug0032.scala)0
-rw-r--r--test/files/pos/t0036.scala (renamed from test/files/pos/bug0036.scala)0
-rw-r--r--test/files/pos/t0039.scala (renamed from test/files/pos/bug0039.scala)0
-rw-r--r--test/files/pos/t0049.scala (renamed from test/files/pos/bug0049.scala)0
-rw-r--r--test/files/pos/t0053.scala (renamed from test/files/pos/bug0053.scala)0
-rw-r--r--test/files/pos/t0054.scala (renamed from test/files/pos/bug0054.scala)0
-rw-r--r--test/files/pos/t0061.scala (renamed from test/files/pos/bug0061.scala)0
-rw-r--r--test/files/pos/t0064.scala (renamed from test/files/pos/bug0064.scala)0
-rw-r--r--test/files/pos/t0066.scala7
-rw-r--r--test/files/pos/t0068.scala (renamed from test/files/pos/bug0068.scala)0
-rw-r--r--test/files/pos/t0069.scala11
-rw-r--r--test/files/pos/t0076.scala (renamed from test/files/pos/bug0076.scala)0
-rw-r--r--test/files/pos/t0081.scala (renamed from test/files/pos/bug0081.scala)0
-rw-r--r--test/files/pos/t0082.scala (renamed from test/files/pos/bug0082.scala)0
-rw-r--r--test/files/pos/t0085.scala (renamed from test/files/pos/bug0085.scala)0
-rw-r--r--test/files/pos/t0091.scala6
-rw-r--r--test/files/pos/t0093.scala (renamed from test/files/pos/bug0093.scala)0
-rw-r--r--test/files/pos/t0095.scala15
-rw-r--r--test/files/pos/t0123.scala (renamed from test/files/pos/bug0123.scala)0
-rw-r--r--test/files/pos/t0204.scala (renamed from test/files/pos/bug0204.scala)0
-rw-r--r--test/files/pos/t0227.scala2
-rw-r--r--test/files/pos/t0231.scala2
-rw-r--r--test/files/pos/t0288/Foo.scala2
-rw-r--r--test/files/pos/t0288/Outer.java2
-rw-r--r--test/files/pos/t0304.scala (renamed from test/files/pos/bug0304.scala)0
-rw-r--r--test/files/pos/t0305.scala7
-rw-r--r--test/files/pos/t0422.scala (renamed from test/files/pos/bug0422.scala)0
-rw-r--r--test/files/pos/t0438.scala4
-rw-r--r--test/files/pos/t0453.scala2
-rw-r--r--test/files/pos/t0599.scala18
-rw-r--r--test/files/pos/t0625.scala8
-rw-r--r--test/files/pos/t0644.scala12
-rw-r--r--test/files/pos/t0646.scala21
-rw-r--r--test/files/pos/t0651.scala4
-rw-r--r--test/files/pos/t0674.scala2
-rw-r--r--test/files/pos/t0770.scala2
-rw-r--r--test/files/pos/t0774/unrelated.scala4
-rw-r--r--test/files/pos/t0786.scala12
-rw-r--r--test/files/pos/t0971.java4
-rw-r--r--test/files/pos/t0999.scala5
-rw-r--r--test/files/pos/t1000.scala7
-rw-r--r--test/files/pos/t1001.scala109
-rw-r--r--test/files/pos/t1006.scala15
-rw-r--r--test/files/pos/t1014.scala13
-rw-r--r--test/files/pos/t1027.scala2
-rw-r--r--test/files/pos/t1029.cmds2
-rw-r--r--test/files/pos/t1034.scala (renamed from test/files/pos/bug1034.scala)0
-rw-r--r--test/files/pos/t1035.scala32
-rw-r--r--test/files/pos/t1048.scala15
-rw-r--r--test/files/pos/t1049.scala7
-rw-r--r--test/files/pos/t1050.scala10
-rw-r--r--test/files/pos/t1053.scala (renamed from test/pending/pos/t1053.scala)0
-rw-r--r--test/files/pos/t1056.scala (renamed from test/files/pos/bug1056.scala)0
-rw-r--r--test/files/pos/t1059.scala2
-rw-r--r--test/files/pos/t1070.scala4
-rw-r--r--test/files/pos/t1071.scala17
-rw-r--r--test/files/pos/t1075.scala17
-rw-r--r--test/files/pos/t1085.scala (renamed from test/files/pos/bug1085.scala)0
-rw-r--r--test/files/pos/t1090.scala16
-rw-r--r--test/files/pos/t1107.scala (renamed from test/files/pos/bug1107.scala)0
-rw-r--r--test/files/pos/t1107/O.scala4
-rw-r--r--test/files/pos/t1107/T.scala2
-rw-r--r--test/files/pos/t1119.scala (renamed from test/files/pos/bug1119.scala)0
-rw-r--r--test/files/pos/t1123.scala11
-rw-r--r--test/files/pos/t112606A.scala (renamed from test/files/pos/bug112606A.scala)0
-rw-r--r--test/files/pos/t1136.scala (renamed from test/files/pos/bug1136.scala)0
-rw-r--r--test/files/pos/t115.scala9
-rw-r--r--test/files/pos/t116.scala (renamed from test/files/pos/bug116.scala)0
-rw-r--r--test/files/pos/t1164.scala32
-rw-r--r--test/files/pos/t1168.scala16
-rw-r--r--test/files/pos/t1185.scala (renamed from test/files/pos/bug1185.scala)0
-rw-r--r--test/files/pos/t119.scala (renamed from test/files/pos/bug119.scala)0
-rw-r--r--test/files/pos/t1203.scala (renamed from test/files/pos/bug1203.scala)0
-rw-r--r--test/files/pos/t1208.scala4
-rw-r--r--test/files/pos/t121.scala (renamed from test/files/pos/bug121.scala)0
-rw-r--r--test/files/pos/t1210a.scala15
-rw-r--r--test/files/pos/t122.scala4
-rw-r--r--test/files/pos/t1226.scala8
-rw-r--r--test/files/pos/t1236.scala14
-rw-r--r--test/files/pos/t1237.scala14
-rw-r--r--test/files/pos/t124.scala (renamed from test/files/pos/bug124.scala)0
-rw-r--r--test/files/pos/t1254/t1254.java2
-rw-r--r--test/files/pos/t1263/Test.java3
-rw-r--r--test/files/pos/t1263/test.scala2
-rw-r--r--test/files/pos/t1272.scala9
-rw-r--r--test/files/pos/t1279a.scala40
-rw-r--r--test/files/pos/t1292.scala33
-rw-r--r--test/files/pos/t1318.scala31
-rw-r--r--test/files/pos/t1380.flags1
-rw-r--r--test/files/pos/t1380/hallo.scala3
-rw-r--r--test/files/pos/t1381.scala (renamed from test/files/pos/bug1381.scala)0
-rw-r--r--test/files/pos/t1385.scala3
-rw-r--r--test/files/pos/t1422_pos.scala2
-rw-r--r--test/files/pos/t1439.flags1
-rw-r--r--test/files/pos/t1439.scala3
-rwxr-xr-xtest/files/pos/t1459/AbstractBase.java5
-rwxr-xr-xtest/files/pos/t1459/App.scala18
-rwxr-xr-xtest/files/pos/t1459/Caller.java7
-rw-r--r--test/files/pos/t1480.scala4
-rw-r--r--test/files/pos/t151.scala (renamed from test/files/pos/bug151.scala)0
-rw-r--r--test/files/pos/t1560.scala10
-rw-r--r--test/files/pos/t1565.scala18
-rw-r--r--test/files/pos/t1569.scala5
-rw-r--r--test/files/pos/t159.scala (renamed from test/files/pos/bug159.scala)0
-rw-r--r--test/files/pos/t1591_pos.scala7
-rw-r--r--test/files/pos/t1591b.scala13
-rw-r--r--test/files/pos/t160.scala (renamed from test/files/pos/bug160.scala)0
-rw-r--r--test/files/pos/t1626.scala (renamed from test/files/pos/bug1626.scala)0
-rw-r--r--test/files/pos/t1642b.scala (renamed from test/files/pos/t1642/test.scala)0
-rw-r--r--test/files/pos/t1693.scala9
-rw-r--r--test/files/pos/t1711/Seq.scala2
-rw-r--r--test/files/pos/t1722-A.scala4
-rwxr-xr-xtest/files/pos/t1722/Test.scala2
-rwxr-xr-xtest/files/pos/t1722/Top.scala4
-rw-r--r--test/files/pos/t1745/J.java6
-rw-r--r--test/files/pos/t175.scala (renamed from test/files/pos/bug175.scala)0
-rw-r--r--test/files/pos/t1751.cmds3
-rwxr-xr-xtest/files/pos/t1756.scala16
-rw-r--r--test/files/pos/t1761.scala2
-rw-r--r--test/files/pos/t177.scala (renamed from test/files/pos/bug177.scala)0
-rw-r--r--test/files/pos/t1782.cmds2
-rw-r--r--test/files/pos/t1782/Test_1.scala2
-rw-r--r--test/files/pos/t1798.scala2
-rw-r--r--test/files/pos/t183.scala (renamed from test/files/pos/bug183.scala)0
-rw-r--r--test/files/pos/t1836/J.java (renamed from test/pending/pos/t1836/J.java)0
-rw-r--r--test/files/pos/t1836/S.scala (renamed from test/pending/pos/t1836/S.scala)0
-rw-r--r--test/files/pos/t1840/J.java4
-rw-r--r--test/files/pos/t1843.scala (renamed from test/files/pos/bug1843.scala)0
-rw-r--r--test/files/pos/t1858.scala (renamed from test/files/pos/bug1858.scala)0
-rw-r--r--test/files/pos/t1909.scala (renamed from test/files/pos/bug1909.scala)0
-rw-r--r--test/files/pos/t1909b-pos.scala (renamed from test/files/pos/bug1909b.scala)0
-rw-r--r--test/files/pos/t1942.cmds2
-rw-r--r--test/files/pos/t1974.scala20
-rw-r--r--test/files/pos/t1996.scala (renamed from test/pending/pos/t1996.scala)0
-rw-r--r--test/files/pos/t201.scala (renamed from test/files/pos/bug201.scala)0
-rw-r--r--test/files/pos/t2018.scala15
-rw-r--r--test/files/pos/t2023.scala4
-rwxr-xr-xtest/files/pos/t2060.scala2
-rw-r--r--test/files/pos/t2081.scala11
-rwxr-xr-xtest/files/pos/t2082.scala16
-rw-r--r--test/files/pos/t2094.scala31
-rw-r--r--test/files/pos/t210.scala17
-rw-r--r--test/files/pos/t211.scala8
-rw-r--r--test/files/pos/t2119.scala4
-rw-r--r--test/files/pos/t2127.scala (renamed from test/files/pos/bug2127.scala)0
-rw-r--r--test/files/pos/t2130-1.scala5
-rw-r--r--test/files/pos/t2130-2.scala17
-rw-r--r--test/files/pos/t2133.scala18
-rw-r--r--test/files/pos/t2168.scala6
-rw-r--r--test/files/pos/t2171.flags1
-rw-r--r--test/files/pos/t2171.scala7
-rwxr-xr-xtest/files/pos/t2179.scala3
-rw-r--r--test/files/pos/t2187-2.scala7
-rw-r--r--test/files/pos/t2187.scala7
-rw-r--r--test/files/pos/t2208_pos.scala (renamed from test/files/pos/t2208.scala)0
-rw-r--r--test/files/pos/t2234.scala2
-rw-r--r--test/files/pos/t2260.scala (renamed from test/files/pos/bug2260.scala)0
-rw-r--r--test/files/pos/t2261.scala2
-rw-r--r--test/files/pos/t2281.scala41
-rw-r--r--test/files/pos/t229.scala (renamed from test/files/pos/bug229.scala)0
-rw-r--r--test/files/pos/t2305.scala26
-rw-r--r--test/files/pos/t2310.scala38
-rw-r--r--test/files/pos/t2331.scala11
-rw-r--r--test/files/pos/t2399.scala14
-rw-r--r--test/files/pos/t2409/J.java4
-rw-r--r--test/files/pos/t2409/t2409.scala1
-rw-r--r--test/files/pos/t2413/TestJava.java7
-rw-r--r--test/files/pos/t2413/TestScalac.scala23
-rw-r--r--test/files/pos/t2421.scala6
-rw-r--r--test/files/pos/t2421_delitedsl.scala10
-rw-r--r--test/files/pos/t2421b_pos.scala19
-rw-r--r--test/files/pos/t2421c.scala17
-rwxr-xr-xtest/files/pos/t2425.scala2
-rwxr-xr-xtest/files/pos/t2429.scala4
-rwxr-xr-xtest/files/pos/t2433/A.java4
-rwxr-xr-xtest/files/pos/t2433/B.java4
-rwxr-xr-xtest/files/pos/t2433/Test.scala3
-rw-r--r--test/files/pos/t2441pos.scala8
-rw-r--r--test/files/pos/t2444.scala6
-rw-r--r--test/files/pos/t245.scala (renamed from test/files/pos/bug245.scala)0
-rw-r--r--test/files/pos/t2454.scala25
-rw-r--r--test/files/pos/t2464.cmds3
-rw-r--r--test/files/pos/t2464/JavaOne.java5
-rw-r--r--test/files/pos/t2464/ScalaOne_1.scala6
-rw-r--r--test/files/pos/t2464/t2464_2.scala3
-rw-r--r--test/files/pos/t247.scala26
-rwxr-xr-xtest/files/pos/t2484.scala17
-rw-r--r--test/files/pos/t2486.scala (renamed from test/files/pos/bug2486.scala)0
-rwxr-xr-xtest/files/pos/t2504.scala2
-rw-r--r--test/files/pos/t252.scala17
-rwxr-xr-xtest/files/pos/t2545.scala4
-rw-r--r--test/files/pos/t2569/Child.scala6
-rw-r--r--test/files/pos/t2569/Parent.java6
-rw-r--r--test/files/pos/t261-ab.scala9
-rw-r--r--test/files/pos/t261-ba.scala9
-rw-r--r--test/files/pos/t2610.scala17
-rw-r--r--test/files/pos/t2619.scala80
-rw-r--r--test/files/pos/t262.scala14
-rw-r--r--test/files/pos/t2624.scala4
-rwxr-xr-xtest/files/pos/t2635.scala16
-rw-r--r--test/files/pos/t2660.scala25
-rw-r--r--test/files/pos/t2664.scala9
-rw-r--r--test/files/pos/t2665.scala3
-rw-r--r--test/files/pos/t2667.scala6
-rw-r--r--test/files/pos/t2669.scala28
-rw-r--r--test/files/pos/t267.scala55
-rwxr-xr-xtest/files/pos/t2683.scala7
-rw-r--r--test/files/pos/t2691.scala16
-rw-r--r--test/files/pos/t2693.scala6
-rw-r--r--test/files/pos/t2698.scala10
-rw-r--r--test/files/pos/t2708.scala1
-rw-r--r--test/files/pos/t2726.cmds2
-rw-r--r--test/files/pos/t2726/SQLBuilder_1.scala7
-rw-r--r--test/files/pos/t2726/t2726_2.scala3
-rw-r--r--test/files/pos/t2741/2741_1.scala9
-rw-r--r--test/files/pos/t2741/2741_2.scala5
-rw-r--r--test/files/pos/t2782.scala18
-rw-r--r--test/files/pos/t2794.scala9
-rw-r--r--test/files/pos/t2795.scala17
-rw-r--r--test/files/pos/t2797.scala9
-rw-r--r--test/files/pos/t2799.flags1
-rw-r--r--test/files/pos/t2799.scala1
-rw-r--r--test/files/pos/t2809.scala20
-rw-r--r--test/files/pos/t2810.scala8
-rw-r--r--test/files/pos/t284-pos.scala (renamed from test/files/pos/bug284.scala)0
-rw-r--r--test/files/pos/t2868.cmds3
-rw-r--r--test/files/pos/t2868/Jann.java5
-rw-r--r--test/files/pos/t2868/Nest.java3
-rw-r--r--test/files/pos/t2868/pick_1.scala7
-rw-r--r--test/files/pos/t2868/t2868_src_2.scala6
-rw-r--r--test/files/pos/t287.scala12
-rw-r--r--test/files/pos/t289.scala (renamed from test/files/pos/bug289.scala)0
-rw-r--r--test/files/pos/t2910.scala33
-rwxr-xr-xtest/files/pos/t2913.scala53
-rw-r--r--test/files/pos/t2939.scala13
-rw-r--r--test/files/pos/t294.cmds3
-rw-r--r--test/files/pos/t2940/Cycle.java3
-rw-r--r--test/files/pos/t2940/Error.scala12
-rw-r--r--test/files/pos/t2945.scala12
-rw-r--r--test/files/pos/t295.scala (renamed from test/files/pos/bug295.scala)0
-rw-r--r--test/files/pos/t2956/BeanDefinitionVisitor.java6
-rwxr-xr-xtest/files/pos/t2956/t2956.scala7
-rw-r--r--test/files/pos/t296.scala (renamed from test/files/pos/bug296.scala)0
-rw-r--r--test/files/pos/t2973.scala1
-rw-r--r--test/files/pos/t2994a.scala27
-rw-r--r--test/files/pos/t2994b.scala7
-rw-r--r--test/files/pos/t3020.scala9
-rw-r--r--test/files/pos/t3037.scala13
-rw-r--r--test/files/pos/t304.scala (renamed from test/files/pos/bug304.scala)0
-rw-r--r--test/files/pos/t3048.scala8
-rw-r--r--test/files/pos/t3071.scala7
-rw-r--r--test/files/pos/t3076/C2.scala4
-rw-r--r--test/files/pos/t3076/T.scala2
-rw-r--r--test/files/pos/t3079.scala17
-rw-r--r--test/files/pos/t3097.flags1
-rw-r--r--test/files/pos/t3097.scala31
-rw-r--r--test/files/pos/t3106.scala7
-rw-r--r--test/files/pos/t3108.scala5
-rw-r--r--test/files/pos/t3136.scala19
-rw-r--r--test/files/pos/t3137.scala17
-rw-r--r--test/files/pos/t3152.scala20
-rwxr-xr-xtest/files/pos/t3174.scala14
-rwxr-xr-xtest/files/pos/t3174b.scala12
-rw-r--r--test/files/pos/t3175-pos.scala7
-rw-r--r--test/files/pos/t3177.scala39
-rw-r--r--test/files/pos/t318.scala (renamed from test/files/pos/bug318.scala)0
-rw-r--r--test/files/pos/t319.scala (renamed from test/files/pos/bug319.scala)0
-rw-r--r--test/files/pos/t3234.flags1
-rw-r--r--test/files/pos/t3234.scala19
-rw-r--r--test/files/pos/t3249/Test.java5
-rw-r--r--test/files/pos/t3249/a.scala11
-rw-r--r--test/files/pos/t3252.flags1
-rw-r--r--test/files/pos/t3252.scala15
-rw-r--r--test/files/pos/t3274.scala9
-rw-r--r--test/files/pos/t3278.scala15
-rw-r--r--test/files/pos/t3312.scala17
-rw-r--r--test/files/pos/t3343.scala15
-rw-r--r--test/files/pos/t3349/AbstractTupleSet.java9
-rw-r--r--test/files/pos/t3349/Table.java9
-rw-r--r--test/files/pos/t3349/Test.scala5
-rw-r--r--test/files/pos/t3349/TupleSet.java4
-rwxr-xr-xtest/files/pos/t3363.scala18
-rw-r--r--test/files/pos/t3371.scala9
-rw-r--r--test/files/pos/t3373.scala11
-rw-r--r--test/files/pos/t3374.scala6
-rw-r--r--test/files/pos/t3384.scala14
-rw-r--r--test/files/pos/t3404/Base.java3
-rw-r--r--test/files/pos/t3404/Derived.scala3
-rw-r--r--test/files/pos/t3411.scala8
-rw-r--r--test/files/pos/t3417.scala11
-rw-r--r--test/files/pos/t3419/B_1.scala3
-rw-r--r--test/files/pos/t3419/C_2.scala3
-rw-r--r--test/files/pos/t342.scala8
-rw-r--r--test/files/pos/t3420.flags1
-rw-r--r--test/files/pos/t3420.scala5
-rw-r--r--test/files/pos/t3429/A.scala12
-rw-r--r--test/files/pos/t3429/Test.java3
-rw-r--r--test/files/pos/t3430.flags1
-rw-r--r--test/files/pos/t3430.scala13
-rw-r--r--test/files/pos/t344.scala (renamed from test/files/pos/bug344.scala)0
-rw-r--r--test/files/pos/t3440.scala18
-rw-r--r--test/files/pos/t3477.scala7
-rw-r--r--test/files/pos/t3480.scala4
-rw-r--r--test/files/pos/t3486/JTest.java3
-rw-r--r--test/files/pos/t3486/test.scala6
-rw-r--r--test/files/pos/t348plus.scala24
-rw-r--r--test/files/pos/t3494.scala7
-rw-r--r--test/files/pos/t3495.flags1
-rw-r--r--test/files/pos/t3495.scala2
-rw-r--r--test/files/pos/t3498.scala15
-rw-r--r--test/files/pos/t3521/DoubleValue.java7
-rw-r--r--test/files/pos/t3521/a.scala4
-rw-r--r--test/files/pos/t3528.scala8
-rw-r--r--test/files/pos/t3534.scala6
-rw-r--r--test/files/pos/t3560.scala2
-rw-r--r--test/files/pos/t3567/Foo.scala3
-rw-r--r--test/files/pos/t3567/Outer.java7
-rwxr-xr-xtest/files/pos/t3568.scala46
-rw-r--r--test/files/pos/t3570.scala7
-rw-r--r--test/files/pos/t3578.scala30
-rw-r--r--test/files/pos/t3582.scala12
-rw-r--r--test/files/pos/t3582b.scala5
-rw-r--r--test/files/pos/t359.scala (renamed from test/files/pos/bug359.scala)0
-rw-r--r--test/files/pos/t360.scala (renamed from test/files/pos/bug360.scala)0
-rw-r--r--test/files/pos/t361.scala (renamed from test/files/pos/bug361.scala)0
-rw-r--r--test/files/pos/t3612.scala6
-rw-r--r--test/files/pos/t3622/AsyncTask.java5
-rw-r--r--test/files/pos/t3622/MyAsyncTask.java9
-rw-r--r--test/files/pos/t3622/Test.scala5
-rw-r--r--test/files/pos/t3636.scala49
-rw-r--r--test/files/pos/t3642/Tuppel_1.java7
-rw-r--r--test/files/pos/t3642/t3642_2.scala3
-rw-r--r--test/files/pos/t3670.scala43
-rw-r--r--test/files/pos/t3671.scala7
-rw-r--r--test/files/pos/t3672.scala4
-rw-r--r--test/files/pos/t3676.scala5
-rw-r--r--test/files/pos/t3688-redux.scala8
-rw-r--r--test/files/pos/t3688.scala14
-rw-r--r--test/files/pos/t372.scala (renamed from test/files/pos/bug372.scala)0
-rw-r--r--test/files/pos/t3731.scala13
-rw-r--r--test/files/pos/t374.scala21
-rw-r--r--test/files/pos/t3774.scala5
-rw-r--r--test/files/pos/t3777.scala7
-rw-r--r--test/files/pos/t3792.scala4
-rw-r--r--test/files/pos/t3800.scala6
-rw-r--r--test/files/pos/t3808.scala11
-rw-r--r--test/files/pos/t3833.scala26
-rw-r--r--test/files/pos/t3837.scala10
-rw-r--r--test/files/pos/t3856.scala8
-rw-r--r--test/files/pos/t3859.scala4
-rw-r--r--test/files/pos/t3861.scala2
-rw-r--r--test/files/pos/t3862.scala8
-rw-r--r--test/files/pos/t3864/scalaz_2.scala1
-rw-r--r--test/files/pos/t3864/tuples_1.scala78
-rw-r--r--test/files/pos/t3866.scala17
-rw-r--r--test/files/pos/t3869.scala10
-rw-r--r--test/files/pos/t3883.scala15
-rw-r--r--test/files/pos/t389.scala (renamed from test/files/pos/bug389.scala)0
-rw-r--r--test/files/pos/t3890.scala4
-rw-r--r--test/files/pos/t3898.scala6
-rw-r--r--test/files/pos/t3924.scala6
-rw-r--r--test/files/pos/t3927.scala6
-rw-r--r--test/files/pos/t3938/Parent.java9
-rw-r--r--test/files/pos/t3938/UseParent.scala7
-rw-r--r--test/files/pos/t3946/A.java5
-rw-r--r--test/files/pos/t3946/Test_1.scala12
-rw-r--r--test/files/pos/t3951/Coll_1.scala36
-rw-r--r--test/files/pos/t3951/Test_2.scala4
-rw-r--r--test/files/pos/t3960.flags1
-rw-r--r--test/files/pos/t3960.scala7
-rw-r--r--test/files/pos/t397.scala (renamed from test/files/pos/bug397.scala)0
-rw-r--r--test/files/pos/t3972.scala11
-rw-r--r--test/files/pos/t3986.scala5
-rw-r--r--test/files/pos/t4018.scala15
-rw-r--r--test/files/pos/t402.scala (renamed from test/files/pos/bug402.scala)0
-rw-r--r--test/files/pos/t4020.flags1
-rw-r--r--test/files/pos/t4020.scala25
-rw-r--r--test/files/pos/t4036.scala13
-rw-r--r--test/files/pos/t404.scala (renamed from test/files/pos/bug404.scala)0
-rw-r--r--test/files/pos/t4052.scala5
-rw-r--r--test/files/pos/t4112.scala12
-rw-r--r--test/files/pos/t4114.scala8
-rw-r--r--test/files/pos/t415.scala (renamed from test/files/pos/bug415.scala)0
-rw-r--r--test/files/pos/t4173.scala4
-rw-r--r--test/files/pos/t4188.scala6
-rw-r--r--test/files/pos/t419.scala (renamed from test/files/pos/bug419.scala)0
-rw-r--r--test/files/pos/t4202.scala18
-rw-r--r--test/files/pos/t4205/1.scala3
-rw-r--r--test/files/pos/t4205/2.scala4
-rw-r--r--test/files/pos/t422.scala (renamed from test/files/pos/bug422.scala)0
-rw-r--r--test/files/pos/t4220.scala7
-rw-r--r--test/files/pos/t4237.scala6
-rw-r--r--test/files/pos/t4243.scala18
-rw-r--r--test/files/pos/t4257.scala15
-rw-r--r--test/files/pos/t4266.scala27
-rw-r--r--test/files/pos/t4269.scala5
-rw-r--r--test/files/pos/t4275.scala13
-rw-r--r--test/files/pos/t430-feb09.scala34
-rw-r--r--test/files/pos/t430.scala20
-rw-r--r--test/files/pos/t4305.scala31
-rw-r--r--test/files/pos/t432.scala2
-rw-r--r--test/files/pos/t4345.scala7
-rw-r--r--test/files/pos/t4351.check1
-rw-r--r--test/files/pos/t4351.scala20
-rw-r--r--test/files/pos/t4363.scala8
-rw-r--r--test/files/pos/t439.scala (renamed from test/files/pos/bug439.scala)0
-rw-r--r--test/files/pos/t4402/A.scala3
-rw-r--r--test/files/pos/t4402/Bar.java7
-rw-r--r--test/files/pos/t4402/Foo.java8
-rw-r--r--test/files/pos/t443.scala (renamed from test/files/pos/bug443.scala)0
-rw-r--r--test/files/pos/t4430.scala11
-rw-r--r--test/files/pos/t4432.scala42
-rw-r--r--test/files/pos/t4457_1.scala26
-rw-r--r--test/files/pos/t4494.flags1
-rw-r--r--test/files/pos/t4494.scala3
-rw-r--r--test/files/pos/t4501.scala14
-rw-r--r--test/files/pos/t4502.scala12
-rw-r--r--test/files/pos/t4524.scala9
-rw-r--r--test/files/pos/t4547.scala4
-rwxr-xr-xtest/files/pos/t4553.scala11
-rw-r--r--test/files/pos/t4593.scala20
-rw-r--r--test/files/pos/t460.scala9
-rw-r--r--test/files/pos/t4603/J.java7
-rw-r--r--test/files/pos/t4603/S.scala8
-rw-r--r--test/files/pos/t464.scala13
-rw-r--r--test/files/pos/t4692.scala27
-rw-r--r--test/files/pos/t4716.scala10
-rw-r--r--test/files/pos/t4731.scala14
-rw-r--r--test/files/pos/t4737/J_1.java9
-rw-r--r--test/files/pos/t4737/S_2.scala10
-rw-r--r--test/files/pos/t4757/A_2.scala4
-rw-r--r--test/files/pos/t4757/B_3.scala3
-rw-r--r--test/files/pos/t4757/P_1.scala6
-rw-r--r--test/files/pos/t4758.scala17
-rw-r--r--test/files/pos/t4840.flags1
-rw-r--r--test/files/pos/t4840.scala13
-rw-r--r--test/files/pos/t4853.scala12
-rw-r--r--test/files/pos/t4938.scala4
-rw-r--r--test/files/pos/t4957.scala89
-rw-r--r--test/files/pos/t4970.scala13
-rw-r--r--test/files/pos/t5012.scala12
-rw-r--r--test/files/pos/t5013/Bar_2.scala5
-rw-r--r--test/files/pos/t5013/Foo_1.scala5
-rw-r--r--test/files/pos/t5033.scala15
-rw-r--r--test/files/pos/t5071.scala18
-rw-r--r--test/files/pos/t5084.scala5
-rw-r--r--test/files/pos/t5099.scala14
-rw-r--r--test/files/pos/t5127.scala8
-rw-r--r--test/files/pos/t514.scala7
-rw-r--r--test/files/pos/t5156.scala21
-rw-r--r--test/files/pos/t516.scala15
-rw-r--r--test/files/pos/t5178.scala11
-rw-r--r--test/files/pos/t522.scala (renamed from test/files/pos/bug522.scala)0
-rw-r--r--test/files/pos/t5223.scala6
-rw-r--r--test/files/pos/t5245.scala3
-rw-r--r--test/files/pos/t530.scala (renamed from test/files/pos/bug530.scala)0
-rw-r--r--test/files/pos/t531.scala10
-rw-r--r--test/files/pos/t532.scala10
-rw-r--r--test/files/pos/t533.scala (renamed from test/files/pos/bug533.scala)0
-rw-r--r--test/files/pos/t566.scala (renamed from test/files/pos/bug566.scala)0
-rw-r--r--test/files/pos/t573.scala43
-rw-r--r--test/files/pos/t577.scala21
-rw-r--r--test/files/pos/t578.scala7
-rw-r--r--test/files/pos/t592.scala (renamed from test/files/pos/bug592.scala)0
-rw-r--r--test/files/pos/t595.scala (renamed from test/files/pos/bug595.scala)0
-rw-r--r--test/files/pos/t596.scala (renamed from test/files/pos/bug596.scala)0
-rw-r--r--test/files/pos/t599.scala19
-rw-r--r--test/files/pos/t602.scala14
-rw-r--r--test/files/pos/t604.scala (renamed from test/files/pos/bug604.scala)0
-rw-r--r--test/files/pos/t607.scala (renamed from test/files/pos/bug607.scala)0
-rw-r--r--test/files/pos/t611.scala (renamed from test/files/pos/bug611.scala)0
-rw-r--r--test/files/pos/t613.scala17
-rw-r--r--test/files/pos/t615.scala (renamed from test/files/pos/bug615.scala)0
-rw-r--r--test/files/pos/t616.scala11
-rw-r--r--test/files/pos/t628.scala (renamed from test/files/pos/bug628.scala)0
-rw-r--r--test/files/pos/t640.scala (renamed from test/files/pos/bug640.scala)0
-rw-r--r--test/files/pos/t651.scala15
-rw-r--r--test/files/pos/t661.scala (renamed from test/files/pos/bug661.scala)0
-rw-r--r--test/files/pos/t675.scala19
-rw-r--r--test/files/pos/t684.scala (renamed from test/files/pos/bug684.scala)0
-rw-r--r--test/files/pos/t690.scala14
-rw-r--r--test/files/pos/t694.scala (renamed from test/files/pos/bug694.scala)0
-rw-r--r--test/files/pos/t697.scala (renamed from test/files/pos/bug697.scala)0
-rw-r--r--test/files/pos/t698.scala12
-rw-r--r--test/files/pos/t703.scala (renamed from test/files/pos/bug703.scala)0
-rw-r--r--test/files/pos/t704.scala (renamed from test/files/pos/bug704.scala)0
-rw-r--r--test/files/pos/t711.scala14
-rw-r--r--test/files/pos/t715.cmds2
-rw-r--r--test/files/pos/t715/meredith_1.scala (renamed from test/files/pos/bug715/meredith_1.scala)16
-rw-r--r--test/files/pos/t715/runner_2.scala (renamed from test/files/pos/bug715/runner_2.scala)0
-rw-r--r--test/files/pos/t720.scala9
-rw-r--r--test/files/pos/t756.scala (renamed from test/files/pos/bug756.scala)0
-rw-r--r--test/files/pos/t757.scala13
-rw-r--r--test/files/pos/t757a.scala (renamed from test/files/pos/bug757a.scala)0
-rw-r--r--test/files/pos/t758.scala7
-rw-r--r--test/files/pos/t759.scala6
-rw-r--r--test/files/pos/t762.scala (renamed from test/files/pos/bug762.scala)0
-rw-r--r--test/files/pos/t767.scala18
-rw-r--r--test/files/pos/t780.scala (renamed from test/files/pos/bug780.scala)0
-rw-r--r--test/files/pos/t788.scala19
-rw-r--r--test/files/pos/t789.scala (renamed from test/files/pos/bug789.scala)0
-rw-r--r--test/files/pos/t796.scala26
-rw-r--r--test/files/pos/t802.scala27
-rw-r--r--test/files/pos/t803.scala (renamed from test/files/pos/bug803.scala)0
-rw-r--r--test/files/pos/t805.scala (renamed from test/files/pos/bug805.scala)0
-rw-r--r--test/files/pos/t807.scala45
-rw-r--r--test/files/pos/t812.scala7
-rw-r--r--test/files/pos/t839.scala26
-rw-r--r--test/files/pos/t851.scala (renamed from test/files/pos/bug851.scala)0
-rw-r--r--test/files/pos/t873.scala (renamed from test/files/pos/bug873.scala)0
-rw-r--r--test/files/pos/t880.scala (renamed from test/files/pos/bug880.scala)0
-rw-r--r--test/files/pos/t892.scala (renamed from test/files/pos/bug892.scala)0
-rw-r--r--test/files/pos/t911.scala (renamed from test/files/pos/bug911.scala)0
-rw-r--r--test/files/pos/t927.scala11
-rw-r--r--test/files/pos/t946.scala8
-rw-r--r--test/files/pos/tcpoly_boundedmonad.scala18
-rw-r--r--test/files/pos/tcpoly_bounds1.scala4
-rw-r--r--test/files/pos/tcpoly_checkkinds_mix.scala6
-rw-r--r--test/files/pos/tcpoly_gm.scala6
-rw-r--r--test/files/pos/tcpoly_higherorder_bound_method.scala2
-rw-r--r--test/files/pos/tcpoly_infer_explicit_tuple_wrapper.scala4
-rw-r--r--test/files/pos/tcpoly_infer_ticket1864.scala2
-rw-r--r--test/files/pos/tcpoly_infer_ticket716.scala4
-rw-r--r--test/files/pos/tcpoly_late_method_params.scala2
-rw-r--r--test/files/pos/tcpoly_method.scala2
-rw-r--r--test/files/pos/tcpoly_overloaded.scala14
-rw-r--r--test/files/pos/tcpoly_poly.scala2
-rw-r--r--test/files/pos/tcpoly_return_overriding.scala2
-rw-r--r--test/files/pos/tcpoly_seq.scala44
-rw-r--r--test/files/pos/tcpoly_seq_typealias.scala40
-rw-r--r--test/files/pos/tcpoly_variance_pos.scala (renamed from test/files/pos/tcpoly_variance.scala)0
-rw-r--r--test/files/pos/ted.scala2
-rw-r--r--test/files/pos/test2.scala5
-rw-r--r--test/files/pos/test5.scala4
-rw-r--r--test/files/pos/test5refine.scala4
-rw-r--r--test/files/pos/testCoercionThis.scala19
-rw-r--r--test/files/pos/thistypes.scala2
-rw-r--r--test/files/pos/ticket0137.scala6
-rw-r--r--test/files/pos/ticket2251.scala (renamed from test/pending/pos/ticket2251.scala)2
-rw-r--r--test/files/pos/traits.scala4
-rw-r--r--test/files/pos/typealias_dubious.scala10
-rw-r--r--test/files/pos/typealiases.scala14
-rw-r--r--test/files/pos/typerep-stephane.scala2
-rw-r--r--test/files/pos/typerep.scala21
-rw-r--r--test/files/pos/typerep_pos.scala21
-rw-r--r--test/files/pos/unapplyComplex.scala6
-rw-r--r--test/files/pos/unapplyNeedsMemberType.scala2
-rw-r--r--test/files/pos/unapplySeq.scala2
-rw-r--r--test/files/pos/unapplyVal.scala6
-rw-r--r--test/files/pos/variances_pos.scala (renamed from test/files/pos/variances.scala)0
-rw-r--r--test/files/pos/virtpatmat_castbinder.flags1
-rw-r--r--test/files/pos/virtpatmat_castbinder.scala15
-rw-r--r--test/files/pos/virtpatmat_exist1.flags1
-rw-r--r--test/files/pos/virtpatmat_exist1.scala24
-rw-r--r--test/files/pos/virtpatmat_exist2.flags1
-rw-r--r--test/files/pos/virtpatmat_exist2.scala20
-rw-r--r--test/files/pos/virtpatmat_exist3.flags1
-rw-r--r--test/files/pos/virtpatmat_exist3.scala12
-rw-r--r--test/files/pos/virtpatmat_gadt_array.flags1
-rw-r--r--test/files/pos/virtpatmat_gadt_array.scala15
-rw-r--r--test/files/pos/virtpatmat_infer_single_1.flags1
-rw-r--r--test/files/pos/virtpatmat_infer_single_1.scala7
-rw-r--r--test/files/pos/virtpatmat_obj_in_case.flags1
-rw-r--r--test/files/pos/virtpatmat_obj_in_case.scala5
-rw-r--r--test/files/pos/widen-existential.scala7
-rw-r--r--test/files/positions/Anon.scala2
-rw-r--r--test/files/positions/Enclosing1.scala2
-rw-r--r--test/files/positions/ExcludedPrefix1.scala16
-rw-r--r--test/files/positions/New1.scala3
-rw-r--r--test/files/positions/Overlap3.scala2
-rw-r--r--test/files/positions/Overlap7.scala3
-rw-r--r--test/files/positions/Scaladoc2.scala4
-rw-r--r--test/files/positions/Scaladoc3.scala2
-rw-r--r--test/files/positions/Scaladoc4.scala2
-rw-r--r--test/files/positions/Scaladoc6.scala10
-rw-r--r--test/files/positions/Scaladoc7.scala6
-rw-r--r--test/files/positions/Scaladoc8.scala6
-rw-r--r--test/files/positions/Unpositioned1.scala2
-rw-r--r--test/files/positions/Unsupported2.scala5
-rw-r--r--test/files/presentation/callcc-interpreter.check94
-rw-r--r--test/files/presentation/callcc-interpreter/Runner.scala3
-rw-r--r--test/files/presentation/callcc-interpreter/src/CallccInterpreter.scala86
-rw-r--r--test/files/presentation/ide-bug-1000349.check40
-rw-r--r--test/files/presentation/ide-bug-1000349/Runner.scala3
-rw-r--r--test/files/presentation/ide-bug-1000349/src/CompletionOnEmptyArgMethod.scala7
-rw-r--r--test/files/presentation/ide-bug-1000469.check1
-rw-r--r--test/files/presentation/ide-bug-1000469/Runner.scala5
-rw-r--r--test/files/presentation/ide-bug-1000469/src/java/JavaEventHandler.java3
-rw-r--r--test/files/presentation/ide-bug-1000469/src/scala/EventHandler.scala5
-rw-r--r--test/files/presentation/ide-bug-1000475.check115
-rw-r--r--test/files/presentation/ide-bug-1000475/Runner.scala3
-rw-r--r--test/files/presentation/ide-bug-1000475/src/Foo.scala9
-rw-r--r--test/files/presentation/ide-bug-1000531.check126
-rw-r--r--test/files/presentation/ide-bug-1000531.flags18
-rw-r--r--test/files/presentation/ide-bug-1000531/Runner.scala3
-rw-r--r--test/files/presentation/ide-bug-1000531/src/CrashOnLoad.scala7
-rw-r--r--test/files/presentation/ide-t1000609.check6
-rw-r--r--test/files/presentation/ide-t1000609/Runner.scala3
-rw-r--r--test/files/presentation/ide-t1000609/src/NoHyperlinking.scala8
-rw-r--r--test/files/presentation/implicit-member.check42
-rw-r--r--test/files/presentation/implicit-member/Runner.scala3
-rw-r--r--test/files/presentation/implicit-member/src/ImplicitMember.scala8
-rw-r--r--test/files/presentation/ping-pong.check102
-rw-r--r--test/files/presentation/ping-pong/Runner.scala3
-rw-r--r--test/files/presentation/ping-pong/src/PingPong.scala22
-rw-r--r--test/files/presentation/random.check27
-rw-r--r--test/files/presentation/random/Runner.scala3
-rw-r--r--test/files/presentation/random/src/Random.scala106
-rw-r--r--test/files/res/bug597.res2
-rw-r--r--test/files/res/bug597/Test.scala27
-rw-r--r--test/files/res/bug687.check11
-rw-r--r--test/files/res/bug687.res3
-rw-r--r--test/files/res/bug722.res2
-rw-r--r--test/files/res/bug722/Parser.scala8
-rw-r--r--test/files/res/bug722/ScanBased.scala10
-rw-r--r--test/files/res/bug735.res2
-rw-r--r--test/files/res/bug743.res2
-rw-r--r--test/files/res/bug743/BracesXXX.scala6
-rw-r--r--test/files/res/bug743/ParserXXX.scala15
-rw-r--r--test/files/res/bug785.res2
-rw-r--r--test/files/res/bug785/ScalaNewTyper.scala10
-rw-r--r--test/files/res/bug831.res2
-rw-r--r--test/files/res/t597.check (renamed from test/files/res/bug597.check)0
-rw-r--r--test/files/res/t597.res2
-rw-r--r--test/files/res/t597/Main.scala (renamed from test/files/res/bug597/Main.scala)0
-rw-r--r--test/files/res/t597/Test.scala27
-rw-r--r--test/files/res/t687.check8
-rw-r--r--test/files/res/t687.res3
-rw-r--r--test/files/res/t687/QueryA.scala (renamed from test/files/res/bug687/QueryA.scala)2
-rw-r--r--test/files/res/t687/QueryB.scala (renamed from test/files/res/bug687/QueryB.scala)2
-rw-r--r--test/files/res/t722.check (renamed from test/files/res/bug722.check)0
-rw-r--r--test/files/res/t722.res2
-rw-r--r--test/files/res/t722/IfElse.scala (renamed from test/files/res/bug722/IfElse.scala)2
-rw-r--r--test/files/res/t722/Parser.scala8
-rw-r--r--test/files/res/t722/ScanBased.scala10
-rw-r--r--test/files/res/t735.check (renamed from test/files/res/bug735.check)0
-rw-r--r--test/files/res/t735.res2
-rw-r--r--test/files/res/t735/ScalaExpressions.scala (renamed from test/files/res/bug735/ScalaExpressions.scala)4
-rw-r--r--test/files/res/t735/ScalaTyper.scala (renamed from test/files/res/bug735/ScalaTyper.scala)2
-rw-r--r--test/files/res/t743.check (renamed from test/files/res/bug743.check)0
-rw-r--r--test/files/res/t743.res2
-rw-r--r--test/files/res/t743/BracesXXX.scala6
-rw-r--r--test/files/res/t743/ParserXXX.scala15
-rw-r--r--test/files/res/t785.check (renamed from test/files/res/bug785.check)0
-rw-r--r--test/files/res/t785.res2
-rw-r--r--test/files/res/t785/ScalaNewTyper.scala10
-rw-r--r--test/files/res/t785/ScalaTrees.scala (renamed from test/files/res/bug785/ScalaTrees.scala)2
-rw-r--r--test/files/res/t831.check (renamed from test/files/res/bug831.check)0
-rw-r--r--test/files/res/t831.res2
-rw-r--r--test/files/res/t831/NewScalaParserXXX.scala (renamed from test/files/res/bug831/NewScalaParserXXX.scala)22
-rw-r--r--test/files/res/t831/NewScalaTestXXX.scala (renamed from test/files/res/bug831/NewScalaTestXXX.scala)2
-rw-r--r--test/files/run/Course-2002-02.scala8
-rw-r--r--test/files/run/Course-2002-05.scala8
-rw-r--r--test/files/run/Course-2002-08.scala14
-rw-r--r--test/files/run/Course-2002-09.scala8
-rw-r--r--test/files/run/Course-2002-10.scala2
-rw-r--r--test/files/run/Course-2002-13.scala15
-rw-r--r--test/files/run/OrderingTest.scala10
-rw-r--r--test/files/run/ReplacementMatching.scala47
-rw-r--r--test/files/run/ReverseSeqView.scala25
-rw-r--r--test/files/run/SymbolsTest.scala283
-rw-r--r--test/files/run/UnrolledBuffer.scala125
-rw-r--r--test/files/run/absoverride.scala10
-rw-r--r--test/files/run/adding-growing-set.scala11
-rw-r--r--test/files/run/amp.scala2
-rw-r--r--test/files/run/arrayclone.scala106
-rw-r--r--test/files/run/arraycopy.scala31
-rw-r--r--test/files/run/arrays.scala30
-rw-r--r--test/files/run/arrayview.scala11
-rw-r--r--test/files/run/arybufgrow.scala6
-rw-r--r--test/files/run/bigDecimalCache.scala9
-rw-r--r--test/files/run/bigDecimalTest.check6
-rw-r--r--test/files/run/bigDecimalTest.scala35
-rw-r--r--test/files/run/bitsets-msil.check32
-rw-r--r--test/files/run/bitsets.check46
-rw-r--r--test/files/run/bitsets.scala87
-rw-r--r--test/files/run/boolexprs.scala2
-rw-r--r--test/files/run/breakout.scala4
-rw-r--r--test/files/run/bug0325.scala53
-rw-r--r--test/files/run/bug1005.scala19
-rw-r--r--test/files/run/bug1044.scala4
-rw-r--r--test/files/run/bug1074.check3
-rw-r--r--test/files/run/bug1079.scala3
-rw-r--r--test/files/run/bug1110.scala11
-rw-r--r--test/files/run/bug1141.scala7
-rw-r--r--test/files/run/bug1192.scala7
-rw-r--r--test/files/run/bug1220.scala15
-rw-r--r--test/files/run/bug1300.scala13
-rw-r--r--test/files/run/bug1309.scala7
-rw-r--r--test/files/run/bug1373.scala6
-rw-r--r--test/files/run/bug1466.scala11
-rw-r--r--test/files/run/bug2005.scala10
-rw-r--r--test/files/run/bug2029.scala16
-rw-r--r--test/files/run/bug2075.scala7
-rw-r--r--test/files/run/bug2124.scala25
-rw-r--r--test/files/run/bug2125.scala25
-rw-r--r--test/files/run/bug216.scala7
-rw-r--r--test/files/run/bug2241.scala7
-rw-r--r--test/files/run/bug2276.scala24
-rw-r--r--test/files/run/bug2512.scala14
-rw-r--r--test/files/run/bug2514.scala15
-rw-r--r--test/files/run/bug298.scala17
-rw-r--r--test/files/run/bug363.scala9
-rw-r--r--test/files/run/bug405.scala5
-rw-r--r--test/files/run/bug428.check8
-rw-r--r--test/files/run/bug428.scala37
-rw-r--r--test/files/run/bug429.check1
-rw-r--r--test/files/run/bug429.scala15
-rw-r--r--test/files/run/bug594.scala8
-rw-r--r--test/files/run/bug603.scala33
-rw-r--r--test/files/run/bug627.scala6
-rw-r--r--test/files/run/bug657.scala51
-rw-r--r--test/files/run/bug744.scala20
-rw-r--r--test/files/run/bug889.scala9
-rw-r--r--test/files/run/bug920.scala20
-rw-r--r--test/files/run/bug949.scala14
-rw-r--r--test/files/run/bug978.scala38
-rw-r--r--test/files/run/bugs.scala2
-rw-r--r--test/files/run/byname.scala8
-rw-r--r--test/files/run/bytecodecs.scala39
-rw-r--r--test/files/run/caseClassEquality.scala36
-rw-r--r--test/files/run/caseclasses.scala2
-rw-r--r--test/files/run/castsingleton.scala4
-rw-r--r--test/files/run/checked.scala8
-rw-r--r--test/files/run/classof.scala4
-rw-r--r--test/files/run/code.check29
-rw-r--r--test/files/run/code.scala60
-rw-r--r--test/files/run/collections-toSelf.scala11
-rw-r--r--test/files/run/collections.scala6
-rw-r--r--test/files/run/colltest.check6
-rw-r--r--test/files/run/colltest.scala17
-rw-r--r--test/files/run/colltest1.check32
-rw-r--r--test/files/run/colltest1.scala36
-rw-r--r--test/files/run/comparable-comparator.scala28
-rw-r--r--test/files/run/complicatedmatch.scala2
-rw-r--r--test/files/run/concat-two-strings.scala15
-rw-r--r--test/files/run/concurrent-stream.check3
-rw-r--r--test/files/run/concurrent-stream.scala36
-rw-r--r--test/files/run/constrained-types.check152
-rw-r--r--test/files/run/constrained-types.scala147
-rw-r--r--test/files/run/contrib674.scala2
-rw-r--r--test/files/run/ctor-order.scala4
-rw-r--r--test/files/run/distinct.check1
-rw-r--r--test/files/run/distinct.scala15
-rw-r--r--test/files/run/duplicate-meth.check1
-rw-r--r--test/files/run/duplicate-meth.scala23
-rw-r--r--test/files/run/elidable-noflags.check7
-rw-r--r--test/files/run/elidable-noflags.scala22
-rw-r--r--test/files/run/elidable.check1
-rw-r--r--test/files/run/elidable.flags1
-rw-r--r--test/files/run/elidable.scala16
-rw-r--r--test/files/run/emptypf.check3
-rw-r--r--test/files/run/emptypf.scala14
-rw-r--r--test/files/run/enums.check10
-rw-r--r--test/files/run/enums.scala59
-rw-r--r--test/files/run/equality.scala40
-rw-r--r--test/files/run/eta-expand-star.check1
-rw-r--r--test/files/run/eta-expand-star.scala8
-rw-r--r--test/files/run/eta-expand-star2.check1
-rw-r--r--test/files/run/eta-expand-star2.flags1
-rw-r--r--test/files/run/eta-expand-star2.scala8
-rw-r--r--test/files/run/exc.scala (renamed from test/pending/run/exc.scala)2
-rw-r--r--test/files/run/exc1.scala10
-rw-r--r--test/files/run/exc2.scala (renamed from test/pending/run/exc2.scala)2
-rw-r--r--test/files/run/exceptions-2.scala61
-rw-r--r--test/files/run/exceptions-nest.check13
-rw-r--r--test/files/run/exceptions-nest.scala157
-rw-r--r--test/files/run/existentials.scala22
-rw-r--r--test/files/run/exoticnames.scala2
-rw-r--r--test/files/run/finally.check32
-rw-r--r--test/files/run/finally.scala119
-rw-r--r--test/files/run/flat-flat-flat.scala11
-rw-r--r--test/files/run/fors.scala48
-rw-r--r--test/files/run/forvaleq.scala30
-rw-r--r--test/files/run/gadts.scala6
-rw-r--r--test/files/run/getClassTest.check18
-rw-r--r--test/files/run/getClassTest.scala66
-rw-r--r--test/files/run/global-showdef.check14
-rw-r--r--test/files/run/global-showdef.scala69
-rw-r--r--test/files/run/groupby.scala18
-rw-r--r--test/files/run/hashCodeBoxesRunTime.scala14
-rw-r--r--test/files/run/hashCodeDistribution.flags1
-rw-r--r--test/files/run/hashCodeDistribution.scala2
-rw-r--r--test/files/run/hashhash.scala10
-rw-r--r--test/files/run/imain.check1
-rw-r--r--test/files/run/imain.scala17
-rw-r--r--test/files/run/implicits.scala2
-rw-r--r--test/files/run/indexedSeq-apply.check (renamed from test/files/run/bug629.check)0
-rw-r--r--test/files/run/indexedSeq-apply.scala15
-rw-r--r--test/files/run/indexedSeq.scala10
-rw-r--r--test/files/run/infiniteloop.scala2
-rw-r--r--test/files/run/infix.scala4
-rw-r--r--test/files/run/inline-ex-handlers.check314
-rw-r--r--test/files/run/inline-ex-handlers.scala329
-rw-r--r--test/files/run/inliner-infer.scala8
-rw-r--r--test/files/run/inner-obj-auto.check65
-rw-r--r--test/files/run/inner-obj-auto.scala2092
-rw-r--r--test/files/run/intmap.scala2
-rw-r--r--test/files/run/io-position.checkbin0 -> 126 bytes
-rw-r--r--test/files/run/io-position.scala13
-rw-r--r--test/files/run/iq.scala28
-rw-r--r--test/files/run/is-valid-num.scala20
-rw-r--r--test/files/run/issue192.scala34
-rw-r--r--test/files/run/iterables.scala2
-rw-r--r--test/files/run/iterator-iterate-lazy.scala5
-rw-r--r--test/files/run/iterator3444.scala23
-rw-r--r--test/files/run/iterators.check2
-rw-r--r--test/files/run/iterators.scala26
-rw-r--r--test/files/run/java-erasure.check1
-rw-r--r--test/files/run/java-erasure.scala10
-rw-r--r--test/files/run/json.check25
-rw-r--r--test/files/run/json.scala153
-rw-r--r--test/files/run/kmpSliceSearch.check4
-rw-r--r--test/files/run/kmpSliceSearch.scala60
-rw-r--r--test/files/run/lazy-concurrent.check1
-rw-r--r--test/files/run/lazy-concurrent.scala17
-rw-r--r--test/files/run/lazy-exprs.scala18
-rw-r--r--test/files/run/lazy-leaks.scala4
-rw-r--r--test/files/run/lazy-locals.scala16
-rw-r--r--test/files/run/lazy-override-run.check (renamed from test/files/run/lazy-override.check)0
-rw-r--r--test/files/run/lazy-override-run.scala26
-rw-r--r--test/files/run/lazy-override.scala26
-rw-r--r--test/files/run/lazy-traits.scala76
-rw-r--r--test/files/run/lift-and-unlift.scala27
-rw-r--r--test/files/run/lists-run.scala185
-rw-r--r--test/files/run/lists.scala210
-rw-r--r--test/files/run/manifests.scala147
-rw-r--r--test/files/run/mapConserve.scala53
-rw-r--r--test/files/run/mapValues.scala8
-rw-r--r--test/files/run/map_java_conversions.scala60
-rw-r--r--test/files/run/map_test.scala12
-rw-r--r--test/files/run/matcharraytail.check2
-rw-r--r--test/files/run/matcharraytail.scala2
-rw-r--r--test/files/run/matchbytes.scala4
-rw-r--r--test/files/run/matchemptyarray.scala2
-rw-r--r--test/files/run/matchintasany.scala4
-rw-r--r--test/files/run/matchnull.scala2
-rw-r--r--test/files/run/matchonstream.scala2
-rw-r--r--test/files/run/misc.scala2
-rw-r--r--test/files/run/missingparams.scala6
-rw-r--r--test/files/run/mock.check3
-rw-r--r--test/files/run/mock.scala29
-rw-r--r--test/files/run/multi-array.scala6
-rw-r--r--test/files/run/names-defaults.check41
-rw-r--r--test/files/run/names-defaults.scala161
-rw-r--r--test/files/run/nodebuffer-array.check3
-rw-r--r--test/files/run/nodebuffer-array.scala15
-rw-r--r--test/files/run/null-and-intersect.check9
-rw-r--r--test/files/run/null-and-intersect.scala34
-rw-r--r--test/files/run/null-hash.scala15
-rw-r--r--test/files/run/number-parsing.scala31
-rw-r--r--test/files/run/numbereq.scala41
-rw-r--r--test/files/run/numeric-range.scala13
-rw-r--r--test/files/run/optimizer-array-load.check6
-rw-r--r--test/files/run/optimizer-array-load.flags1
-rw-r--r--test/files/run/optimizer-array-load.scala16
-rw-r--r--test/files/run/origins.check6
-rw-r--r--test/files/run/origins.flags1
-rw-r--r--test/files/run/origins.scala21
-rw-r--r--test/files/run/packrat1.scala12
-rw-r--r--test/files/run/packrat2.scala18
-rw-r--r--test/files/run/packrat3.scala14
-rw-r--r--test/files/run/parmap-ops.scala48
-rw-r--r--test/files/run/parserFilter.check9
-rw-r--r--test/files/run/parserFilter.scala15
-rw-r--r--test/files/run/parserForFilter.check1
-rw-r--r--test/files/run/parserForFilter.scala12
-rw-r--r--test/files/run/parserNoSuccessMessage.check20
-rw-r--r--test/files/run/parserNoSuccessMessage.scala19
-rw-r--r--test/files/run/patch-boundary.scala8
-rw-r--r--test/files/run/patmat-exprs.check1
-rw-r--r--test/files/run/patmat-exprs.scala579
-rw-r--r--test/files/run/patmat-seqs.check13
-rw-r--r--test/files/run/patmat-seqs.scala42
-rw-r--r--test/files/run/patmat_unapp_abstype.check2
-rw-r--r--test/files/run/patmat_unapp_abstype.scala39
-rw-r--r--test/files/run/patmatnew.scala860
-rw-r--r--test/files/run/pc-conversions.scala92
-rw-r--r--test/files/run/pf-catch.check4
-rw-r--r--test/files/run/pf-catch.scala34
-rw-r--r--test/files/run/preinits.check3
-rw-r--r--test/files/run/preinits.scala (renamed from test/pending/run/preinits.scala)2
-rw-r--r--test/files/run/primitive-sigs-2.check7
-rw-r--r--test/files/run/primitive-sigs-2.scala39
-rw-r--r--test/files/run/priorityQueue.scala389
-rw-r--r--test/files/run/private-inline.check1
-rw-r--r--test/files/run/private-inline.flags1
-rw-r--r--test/files/run/private-inline.scala52
-rw-r--r--test/files/run/programmatic-main.check29
-rw-r--r--test/files/run/programmatic-main.scala14
-rw-r--r--test/files/run/proxy.check2
-rw-r--r--test/files/run/proxy.scala12
-rw-r--r--test/files/run/randomAccessSeq-apply.scala15
-rw-r--r--test/files/run/range.scala48
-rw-r--r--test/files/run/records.scala27
-rw-r--r--test/files/run/reflection-implClass.scala38
-rw-r--r--test/files/run/regularpatmat.check126
-rw-r--r--test/files/run/reify_anonymous.check1
-rw-r--r--test/files/run/reify_anonymous.scala14
-rw-r--r--test/files/run/reify_for1.check0
-rw-r--r--test/files/run/reify_for1.scala16
-rw-r--r--test/files/run/reify_generic.check1
-rw-r--r--test/files/run/reify_generic.scala15
-rw-r--r--test/files/run/reify_inheritance.check1
-rw-r--r--test/files/run/reify_inheritance.scala23
-rw-r--r--test/files/run/reify_printf.check0
-rw-r--r--test/files/run/reify_printf.scala75
-rw-r--r--test/files/run/reify_varargs.check1
-rw-r--r--test/files/run/reify_varargs.scala17
-rw-r--r--test/files/run/repl-assign.check20
-rw-r--r--test/files/run/repl-assign.scala10
-rw-r--r--test/files/run/repl-backticks.check2
-rw-r--r--test/files/run/repl-backticks.scala18
-rw-r--r--test/files/run/repl-bare-expr.check54
-rw-r--r--test/files/run/repl-bare-expr.scala16
-rw-r--r--test/files/run/repl-colon-type.check57
-rw-r--r--test/files/run/repl-colon-type.scala23
-rw-r--r--test/files/run/repl-exceptions.check25
-rw-r--r--test/files/run/repl-exceptions.scala13
-rw-r--r--test/files/run/repl-parens.check84
-rw-r--r--test/files/run/repl-parens.scala29
-rw-r--r--test/files/run/repl-paste-2.check64
-rw-r--r--test/files/run/repl-paste-2.scala31
-rw-r--r--test/files/run/repl-paste-3.check14
-rw-r--r--test/files/run/repl-paste-3.scala8
-rw-r--r--test/files/run/repl-paste.check27
-rw-r--r--test/files/run/repl-paste.scala19
-rw-r--r--test/files/run/repl-power.check16
-rw-r--r--test/files/run/repl-power.scala10
-rw-r--r--test/files/run/repl-reset.check55
-rw-r--r--test/files/run/repl-reset.scala22
-rw-r--r--test/files/run/repl-suppressed-warnings.check65
-rw-r--r--test/files/run/repl-suppressed-warnings.scala31
-rw-r--r--test/files/run/repl-transcript.check41
-rw-r--r--test/files/run/repl-transcript.scala20
-rw-r--r--test/files/run/richWrapperEquals.scala10
-rw-r--r--test/files/run/run-bug4840.check2
-rw-r--r--test/files/run/run-bug4840.flags1
-rw-r--r--test/files/run/run-bug4840.scala30
-rw-r--r--test/files/run/runtime-richChar.scala12
-rw-r--r--test/files/run/scan.scala23
-rw-r--r--test/files/run/seqlike-kmp.check90
-rw-r--r--test/files/run/seqlike-kmp.scala32
-rw-r--r--test/files/run/sequenceComparisons.scala56
-rw-r--r--test/files/run/serialize-stream.check6
-rw-r--r--test/files/run/serialize-stream.scala20
-rw-r--r--test/files/run/shutdownhooks.check3
-rw-r--r--test/files/run/shutdownhooks.scala37
-rw-r--r--test/files/run/slice-strings.scala19
-rw-r--r--test/files/run/slices.scala2
-rw-r--r--test/files/run/sort.scala14
-rw-r--r--test/files/run/spec-self.check2
-rw-r--r--test/files/run/spec-self.scala14
-rw-r--r--test/files/run/streamWithFilter.check5
-rw-r--r--test/files/run/streamWithFilter.scala11
-rw-r--r--test/files/run/stream_flatmap_odds.scala4
-rw-r--r--test/files/run/stream_length.check1
-rw-r--r--test/files/run/stream_length.scala15
-rw-r--r--test/files/run/streams.scala4
-rw-r--r--test/files/run/stringInterpolation.check2
-rw-r--r--test/files/run/stringInterpolation.flags1
-rw-r--r--test/files/run/stringInterpolation.scala7
-rw-r--r--test/files/run/stringbuilder-drop.scala7
-rw-r--r--test/files/run/stringbuilder.scala18
-rw-r--r--test/files/run/structural.scala54
-rw-r--r--test/files/run/sysprops.scala50
-rw-r--r--test/files/run/t0017.check2
-rw-r--r--test/files/run/t0017.scala6
-rw-r--r--test/files/run/t0042.scala2
-rw-r--r--test/files/run/t0048.check (renamed from test/pending/run/t0048.check)0
-rw-r--r--test/files/run/t0048.scala (renamed from test/pending/run/t0048.scala)2
-rw-r--r--test/files/run/t0325.check (renamed from test/files/run/bug0325.check)0
-rw-r--r--test/files/run/t0325.scala53
-rw-r--r--test/files/run/t0412.scala2
-rw-r--r--test/files/run/t0421.scala18
-rw-r--r--test/files/run/t0432.scala15
-rw-r--r--test/files/run/t0486.scala2
-rw-r--r--test/files/run/t0508.scala4
-rw-r--r--test/files/run/t0528.scala4
-rw-r--r--test/files/run/t0607.scala2
-rw-r--r--test/files/run/t0631.scala4
-rw-r--r--test/files/run/t0663.scala2
-rw-r--r--test/files/run/t0668.scala2
-rw-r--r--test/files/run/t0677.scala7
-rw-r--r--test/files/run/t0807.scala4
-rw-r--r--test/files/run/t0883.scala14
-rw-r--r--test/files/run/t0911.scala2
-rw-r--r--test/files/run/t0936.scala2
-rw-r--r--test/files/run/t1005.check (renamed from test/files/run/bug1005.check)0
-rw-r--r--test/files/run/t1005.scala19
-rw-r--r--test/files/run/t102.check2
-rw-r--r--test/files/run/t102.scala24
-rw-r--r--test/files/run/t1042.check1
-rw-r--r--test/files/run/t1042.scala14
-rw-r--r--test/files/run/t1044.scala4
-rw-r--r--test/files/run/t1048.check2
-rw-r--r--test/files/run/t1048.scala21
-rw-r--r--test/files/run/t1074.check3
-rw-r--r--test/files/run/t1074.scala (renamed from test/files/run/bug1074.scala)0
-rw-r--r--test/files/run/t1079.check (renamed from test/files/run/bug1079.check)0
-rw-r--r--test/files/run/t1079.scala3
-rw-r--r--test/files/run/t1100.check4
-rw-r--r--test/files/run/t1100.scala17
-rw-r--r--test/files/run/t1110.scala11
-rw-r--r--test/files/run/t1141.check (renamed from test/files/run/bug1141.check)0
-rw-r--r--test/files/run/t1141.scala7
-rw-r--r--test/files/run/t1167.check3
-rw-r--r--test/files/run/t1167.scala32
-rw-r--r--test/files/run/t1192.check (renamed from test/files/run/bug1192.check)0
-rw-r--r--test/files/run/t1192.scala7
-rw-r--r--test/files/run/t1220.scala15
-rw-r--r--test/files/run/t1300.check (renamed from test/files/run/bug1300.check)0
-rw-r--r--test/files/run/t1300.scala13
-rw-r--r--test/files/run/t1309.scala7
-rw-r--r--test/files/run/t1323.scala38
-rw-r--r--test/files/run/t1333.check3
-rw-r--r--test/files/run/t1333.scala14
-rw-r--r--test/files/run/t1360.check (renamed from test/files/run/bug1360.check)0
-rw-r--r--test/files/run/t1360.scala (renamed from test/files/run/bug1360.scala)0
-rw-r--r--test/files/run/t1368.scala2
-rw-r--r--test/files/run/t1373.scala6
-rw-r--r--test/files/run/t1423.scala4
-rw-r--r--test/files/run/t1427.scala15
-rw-r--r--test/files/run/t1430.check1
-rw-r--r--test/files/run/t1430/Bar_1.java8
-rw-r--r--test/files/run/t1430/Test_2.scala16
-rw-r--r--test/files/run/t1434.scala (renamed from test/files/run/bug1434.scala)0
-rw-r--r--test/files/run/t1466.scala11
-rw-r--r--test/files/run/t1500.check2
-rw-r--r--test/files/run/t1500.scala30
-rw-r--r--test/files/run/t1501.scala28
-rw-r--r--test/files/run/t1505.scala2
-rw-r--r--test/files/run/t1524.scala6
-rw-r--r--test/files/run/t153.check2
-rw-r--r--test/files/run/t153.scala6
-rw-r--r--test/files/run/t1535.scala2
-rw-r--r--test/files/run/t1537.check2
-rw-r--r--test/files/run/t1537.scala18
-rw-r--r--test/files/run/t1591.check1
-rw-r--r--test/files/run/t1591.scala14
-rw-r--r--test/files/run/t1618.scala2
-rw-r--r--test/files/run/t1620.scala2
-rw-r--r--test/files/run/t1718.scala6
-rw-r--r--test/files/run/t1747.scala2
-rw-r--r--test/files/run/t1766.scala16
-rw-r--r--test/files/run/t1773.scala6
-rw-r--r--test/files/run/t1829.scala2
-rw-r--r--test/files/run/t1939.scala2
-rw-r--r--test/files/run/t2005.scala10
-rw-r--r--test/files/run/t2029.check (renamed from test/files/run/bug2029.check)0
-rw-r--r--test/files/run/t2029.scala16
-rw-r--r--test/files/run/t2030.scala2
-rw-r--r--test/files/run/t2074.scala3
-rw-r--r--test/files/run/t2074_2.check6
-rw-r--r--test/files/run/t2074_2.scala9
-rw-r--r--test/files/run/t2075.scala7
-rw-r--r--test/files/run/t2087-and-2400.scala20
-rw-r--r--test/files/run/t2106.flags1
-rw-r--r--test/files/run/t2106.scala8
-rw-r--r--test/files/run/t2111.scala2
-rw-r--r--test/files/run/t2124.check (renamed from test/files/run/bug2124.check)0
-rw-r--r--test/files/run/t2124.scala25
-rw-r--r--test/files/run/t2125.check (renamed from test/files/run/bug2125.check)0
-rw-r--r--test/files/run/t2125.scala25
-rw-r--r--test/files/run/t2147.scala2
-rw-r--r--test/files/run/t216.check (renamed from test/files/run/randomAccessSeq-apply.check)0
-rw-r--r--test/files/run/t216.scala7
-rw-r--r--test/files/run/t2162.check2
-rw-r--r--test/files/run/t2162.scala (renamed from test/pending/pos/t2162.scala)3
-rw-r--r--test/files/run/t2175.scala (renamed from test/files/run/bug2175.scala)0
-rw-r--r--test/files/run/t2176.scala2
-rw-r--r--test/files/run/t2177.scala2
-rw-r--r--test/files/run/t2212.scala10
-rwxr-xr-xtest/files/run/t2236.scala2
-rw-r--r--test/files/run/t2241.scala7
-rw-r--r--test/files/run/t2250.scala (renamed from test/files/run/bug2250.scala)0
-rw-r--r--test/files/run/t2255.scala2
-rw-r--r--test/files/run/t2276.check (renamed from test/files/run/bug2276.check)0
-rw-r--r--test/files/run/t2276.scala24
-rw-r--r--test/files/run/t2308a.check1
-rw-r--r--test/files/run/t2308a.scala7
-rw-r--r--test/files/run/t2316_run.scala (renamed from test/files/run/t2316.scala)0
-rw-r--r--test/files/run/t2333.scala16
-rw-r--r--test/files/run/t2354.scala17
-rw-r--r--test/files/run/t2378.scala9
-rw-r--r--test/files/run/t2417.check12
-rw-r--r--test/files/run/t2417.scala77
-rwxr-xr-xtest/files/run/t2503.scala2
-rw-r--r--test/files/run/t2512.scala13
-rw-r--r--test/files/run/t2514.scala15
-rw-r--r--test/files/run/t2526.scala53
-rw-r--r--test/files/run/t2552.check48
-rw-r--r--test/files/run/t2552.scala34
-rw-r--r--test/files/run/t2594_tcpoly.check0
-rw-r--r--test/files/run/t2594_tcpoly.scala18
-rw-r--r--test/files/run/t2636.scala35
-rw-r--r--test/files/run/t266.scala23
-rw-r--r--test/files/run/t2721.check2
-rw-r--r--test/files/run/t2721.scala12
-rw-r--r--test/files/run/t2754.scala39
-rw-r--r--test/files/run/t2755.check21
-rw-r--r--test/files/run/t2755.scala58
-rw-r--r--test/files/run/t2788.check1
-rw-r--r--test/files/run/t2788.scala3
-rw-r--r--test/files/run/t2800.check14
-rw-r--r--test/files/run/t2800.scala36
-rw-r--r--test/files/run/t2813.2.scala39
-rw-r--r--test/files/run/t2849.scala48
-rw-r--r--test/files/run/t2857.check1
-rw-r--r--test/files/run/t2857.scala9
-rw-r--r--test/files/run/t2867.scala15
-rw-r--r--test/files/run/t2873.check1
-rw-r--r--test/files/run/t2873.scala5
-rw-r--r--test/files/run/t2876.scala7
-rw-r--r--test/files/run/t2886.check5
-rw-r--r--test/files/run/t2958.scala16
-rw-r--r--test/files/run/t298.check (renamed from test/files/run/bug298.check)0
-rw-r--r--test/files/run/t298.scala17
-rw-r--r--test/files/run/t3004.scala14
-rw-r--r--test/files/run/t3026.check2
-rwxr-xr-xtest/files/run/t3026.scala8
-rw-r--r--test/files/run/t3038.check19
-rw-r--r--test/files/run/t3038.scala68
-rw-r--r--test/files/run/t3038b.check6
-rw-r--r--test/files/run/t3038b.flags1
-rw-r--r--test/files/run/t3038b.scala20
-rw-r--r--test/files/run/t3038c.check2
-rw-r--r--test/files/run/t3038c/A_1.scala83
-rw-r--r--test/files/run/t3038c/B_2.scala24
-rw-r--r--test/files/run/t3038d.flags1
-rw-r--r--test/files/run/t3038d.scala60
-rw-r--r--test/files/run/t3050.scala9
-rw-r--r--test/files/run/t3088.scala9
-rw-r--r--test/files/run/t3112.check4
-rw-r--r--test/files/run/t3112.scala11
-rw-r--r--test/files/run/t3126.scala9
-rw-r--r--test/files/run/t3150.scala10
-rw-r--r--test/files/run/t3158.check1
-rw-r--r--test/files/run/t3158.scala9
-rw-r--r--test/files/run/t3175.check11
-rw-r--r--test/files/run/t3175.scala55
-rw-r--r--test/files/run/t3186.check1
-rw-r--r--test/files/run/t3186.scala7
-rw-r--r--test/files/run/t3232.scala21
-rw-r--r--test/files/run/t3241.check1
-rw-r--r--test/files/run/t3241.scala23
-rw-r--r--test/files/run/t3242.check18
-rw-r--r--test/files/run/t3242.scala49
-rw-r--r--test/files/run/t3242b.scala17
-rw-r--r--test/files/run/t3269.check2
-rw-r--r--test/files/run/t3269.scala9
-rw-r--r--test/files/run/t3273.scala10
-rw-r--r--test/files/run/t3327.check1
-rw-r--r--test/files/run/t3327.scala8
-rw-r--r--test/files/run/t3361.scala98
-rw-r--r--test/files/run/t3376.check18
-rw-r--r--test/files/run/t3376.scala13
-rw-r--r--test/files/run/t3395.check2
-rw-r--r--test/files/run/t3395.scala13
-rw-r--r--test/files/run/t3397.scala7
-rw-r--r--test/files/run/t3487.scala15
-rw-r--r--test/files/run/t3493.scala15
-rw-r--r--test/files/run/t3496.scala15
-rw-r--r--test/files/run/t3502.scala24
-rw-r--r--test/files/run/t3508.scala11
-rw-r--r--test/files/run/t3509.flags1
-rw-r--r--test/files/run/t3509.scala9
-rw-r--r--test/files/run/t3511.scala36
-rw-r--r--test/files/run/t3516.check3
-rw-r--r--test/files/run/t3516.scala13
-rw-r--r--test/files/run/t3518.scala16
-rw-r--r--test/files/run/t3529.scala14
-rw-r--r--test/files/run/t3530.check12
-rw-r--r--test/files/run/t3530.scala35
-rw-r--r--test/files/run/t3540.scala7
-rw-r--r--test/files/run/t3563.scala21
-rw-r--r--test/files/run/t3580.scala17
-rw-r--r--test/files/run/t3603.scala18
-rw-r--r--test/files/run/t3613.scala22
-rw-r--r--test/files/run/t3616.check1
-rw-r--r--test/files/run/t3616.scala12
-rw-r--r--test/files/run/t3619.scala34
-rw-r--r--test/files/run/t363.check (renamed from test/files/run/bug363.check)0
-rw-r--r--test/files/run/t363.scala9
-rw-r--r--test/files/run/t3645.scala6
-rw-r--r--test/files/run/t3647.scala23
-rw-r--r--test/files/run/t3651.scala10
-rw-r--r--test/files/run/t3667.check6
-rw-r--r--test/files/run/t3667.scala84
-rw-r--r--test/files/run/t3670.check5
-rw-r--r--test/files/run/t3670.scala31
-rw-r--r--test/files/run/t3687.check2
-rw-r--r--test/files/run/t3687.scala6
-rw-r--r--test/files/run/t3699.scala11
-rw-r--r--test/files/run/t3714.scala33
-rw-r--r--test/files/run/t3719.check4
-rw-r--r--test/files/run/t3719.scala35
-rw-r--r--test/files/run/t3726.check2
-rw-r--r--test/files/run/t3726.scala8
-rw-r--r--test/files/run/t3760.scala17
-rw-r--r--test/files/run/t3763.scala3
-rw-r--r--test/files/run/t3822.scala19
-rw-r--r--test/files/run/t3829.scala40
-rw-r--r--test/files/run/t3835.check2
-rw-r--r--test/files/run/t3835.scala4
-rw-r--r--test/files/run/t3855.scala18
-rw-r--r--test/files/run/t3877.check104
-rw-r--r--test/files/run/t3877.scala81
-rw-r--r--test/files/run/t3886.scala11
-rw-r--r--test/files/run/t3887.scala16
-rw-r--r--test/files/run/t3888.scala26
-rw-r--r--test/files/run/t3895.check2
-rw-r--r--test/files/run/t3895.flags1
-rw-r--r--test/files/run/t3895.scala36
-rw-r--r--test/files/run/t3895b.scala27
-rw-r--r--test/files/run/t3897.check8
-rw-r--r--test/files/run/t3897/J_2.java27
-rw-r--r--test/files/run/t3897/a_1.scala8
-rw-r--r--test/files/run/t3897/a_2.scala23
-rw-r--r--test/files/run/t3923.scala8
-rw-r--r--test/files/run/t3932.check6
-rw-r--r--test/files/run/t3932.scala35
-rw-r--r--test/files/run/t3935.scala15
-rw-r--r--test/files/run/t3950.check3
-rw-r--r--test/files/run/t3950.scala17
-rw-r--r--test/files/run/t3964.check2
-rw-r--r--test/files/run/t3964.scala16
-rw-r--r--test/files/run/t3970.scala21
-rw-r--r--test/files/run/t3980.check3
-rw-r--r--test/files/run/t3980.scala19
-rw-r--r--test/files/run/t3984.scala52
-rw-r--r--test/files/run/t3989.scala17
-rw-r--r--test/files/run/t3996.scala13
-rw-r--r--test/files/run/t4013.scala24
-rw-r--r--test/files/run/t4013b.scala20
-rw-r--r--test/files/run/t4013c.scala10
-rw-r--r--test/files/run/t4024.scala9
-rw-r--r--test/files/run/t4047.check5
-rw-r--r--test/files/run/t4047.scala34
-rw-r--r--test/files/run/t405.scala5
-rw-r--r--test/files/run/t4054.scala25
-rw-r--r--test/files/run/t4062.check2
-rw-r--r--test/files/run/t4062.scala16
-rw-r--r--test/files/run/t4072.flags1
-rw-r--r--test/files/run/t4072.scala13
-rw-r--r--test/files/run/t408.scala12
-rw-r--r--test/files/run/t4080.check1
-rw-r--r--test/files/run/t4080.scala12
-rw-r--r--test/files/run/t4110.check2
-rw-r--r--test/files/run/t4110.scala11
-rw-r--r--test/files/run/t4119/J.java7
-rw-r--r--test/files/run/t4119/S.scala14
-rw-r--r--test/files/run/t4122.scala14
-rw-r--r--test/files/run/t4146.scala7
-rw-r--r--test/files/run/t4148.check3
-rw-r--r--test/files/run/t4148.scala9
-rw-r--r--test/files/run/t4172.check11
-rw-r--r--test/files/run/t4172.scala7
-rw-r--r--test/files/run/t4201.scala7
-rw-r--r--test/files/run/t4238/J_1.java16
-rw-r--r--test/files/run/t4238/s_2.scala5
-rw-r--r--test/files/run/t4285.check17
-rw-r--r--test/files/run/t4285.flags1
-rw-r--r--test/files/run/t4285.scala8
-rw-r--r--test/files/run/t4288.scala13
-rw-r--r--test/files/run/t429.check1
-rw-r--r--test/files/run/t429.scala15
-rw-r--r--test/files/run/t4294.scala7
-rw-r--r--test/files/run/t4297.scala7
-rw-r--r--test/files/run/t4300.check4
-rw-r--r--test/files/run/t4300.scala25
-rw-r--r--test/files/run/t4317.check3
-rw-r--r--test/files/run/t4317.flags1
-rw-r--r--test/files/run/t4317/J_2.java5
-rw-r--r--test/files/run/t4317/S_1.scala9
-rw-r--r--test/files/run/t4317/S_3.scala8
-rw-r--r--test/files/run/t4387.scala12
-rw-r--r--test/files/run/t4396.check5
-rw-r--r--test/files/run/t4396.scala35
-rw-r--r--test/files/run/t4398.scala11
-rw-r--r--test/files/run/t4426.scala24
-rw-r--r--test/files/run/t4459.scala12
-rw-r--r--test/files/run/t4461.check7
-rw-r--r--test/files/run/t4461.scala19
-rw-r--r--test/files/run/t4535.check3
-rw-r--r--test/files/run/t4535.scala30
-rw-r--r--test/files/run/t4542.check22
-rw-r--r--test/files/run/t4542.scala11
-rw-r--r--test/files/run/t4558.scala6
-rw-r--r--test/files/run/t4560.check2
-rw-r--r--test/files/run/t4560.scala39
-rw-r--r--test/files/run/t4565_1.check1
-rw-r--r--test/files/run/t4565_1.scala14
-rw-r--r--test/files/run/t4570.check1
-rw-r--r--test/files/run/t4570.scala8
-rw-r--r--test/files/run/t4582.scala11
-rw-r--r--test/files/run/t4592.check3
-rw-r--r--test/files/run/t4592.scala10
-rw-r--r--test/files/run/t4601.check1
-rw-r--r--test/files/run/t4601.scala15
-rw-r--r--test/files/run/t4608.scala8
-rw-r--r--test/files/run/t4617.check1
-rw-r--r--test/files/run/t4617.scala15
-rw-r--r--test/files/run/t4656.check1
-rw-r--r--test/files/run/t4656.scala13
-rw-r--r--test/files/run/t4658.check80
-rw-r--r--test/files/run/t4658.scala41
-rw-r--r--test/files/run/t4660.scala11
-rw-r--r--test/files/run/t4671.check46
-rw-r--r--test/files/run/t4671.scala13
-rw-r--r--test/files/run/t4680.check60
-rw-r--r--test/files/run/t4680.scala71
-rw-r--r--test/files/run/t4697.check1
-rw-r--r--test/files/run/t4697.scala8
-rw-r--r--test/files/run/t4709.scala10
-rw-r--r--test/files/run/t4710.check7
-rw-r--r--test/files/run/t4710.scala6
-rw-r--r--test/files/run/t4723.scala9
-rw-r--r--test/files/run/t4752.scala10
-rw-r--r--test/files/run/t4753.check1
-rw-r--r--test/files/run/t4753.scala12
-rw-r--r--test/files/run/t4761.check4
-rw-r--r--test/files/run/t4761.scala11
-rw-r--r--test/files/run/t4766.check1
-rw-r--r--test/files/run/t4766.scala7
-rw-r--r--test/files/run/t4794.check1
-rw-r--r--test/files/run/t4794.scala12
-rw-r--r--test/files/run/t4827.scala15
-rw-r--r--test/files/run/t4827b.scala18
-rw-r--r--test/files/run/t4875.check17
-rw-r--r--test/files/run/t4875.scala12
-rw-r--r--test/files/run/t4891.check8
-rw-r--r--test/files/run/t4891/J_2.java13
-rw-r--r--test/files/run/t4891/S_1.scala26
-rw-r--r--test/files/run/t4891/S_3.scala5
-rw-r--r--test/files/run/t4894.scala27
-rw-r--r--test/files/run/t4895.scala16
-rw-r--r--test/files/run/t4930.check2
-rw-r--r--test/files/run/t4930.scala11
-rw-r--r--test/files/run/t498.scala4
-rw-r--r--test/files/run/t5052.scala6
-rw-r--r--test/files/run/t5080.check1
-rw-r--r--test/files/run/t5080.scala24
-rw-r--r--test/files/run/t5105.check1
-rw-r--r--test/files/run/t5105.scala14
-rw-r--r--test/files/run/t5115.scala14
-rw-r--r--test/files/run/t5230.check2
-rw-r--r--test/files/run/t5230.scala19
-rw-r--r--test/files/run/t5239.check13
-rw-r--r--test/files/run/t5239.scala20
-rw-r--r--test/files/run/t5266_1.check2
-rw-r--r--test/files/run/t5266_1.scala16
-rw-r--r--test/files/run/t5266_2.check2
-rw-r--r--test/files/run/t5266_2.scala17
-rw-r--r--test/files/run/t576.check5
-rw-r--r--test/files/run/t576.scala45
-rw-r--r--test/files/run/t594.check (renamed from test/files/run/bug594.check)0
-rw-r--r--test/files/run/t594.scala8
-rw-r--r--test/files/run/t601.check (renamed from test/files/run/bug601.check)0
-rw-r--r--test/files/run/t601.scala (renamed from test/files/run/bug601.scala)0
-rw-r--r--test/files/run/t603.check (renamed from test/files/run/bug603.check)0
-rw-r--r--test/files/run/t603.scala33
-rw-r--r--test/files/run/t627.check (renamed from test/files/run/bug627.check)0
-rw-r--r--test/files/run/t627.scala6
-rw-r--r--test/files/run/t629.check1
-rw-r--r--test/files/run/t629.scala (renamed from test/files/run/bug629.scala)0
-rw-r--r--test/files/run/t657.check (renamed from test/files/run/bug657.check)0
-rw-r--r--test/files/run/t657.scala51
-rw-r--r--test/files/run/t744.check (renamed from test/files/run/bug744.check)0
-rw-r--r--test/files/run/t744.scala20
-rw-r--r--test/files/run/t751.scala6
-rw-r--r--test/files/run/t874.check2
-rw-r--r--test/files/run/t874.scala17
-rw-r--r--test/files/run/t889.check (renamed from test/files/run/bug889.check)0
-rw-r--r--test/files/run/t889.scala9
-rw-r--r--test/files/run/t920.check (renamed from test/files/run/bug920.check)0
-rw-r--r--test/files/run/t920.scala20
-rw-r--r--test/files/run/t949.scala14
-rw-r--r--test/files/run/t978.scala38
-rw-r--r--test/files/run/tailcalls.scala26
-rw-r--r--test/files/run/takeAndDrop.scala4
-rw-r--r--test/files/run/tcpoly_monads.scala10
-rw-r--r--test/files/run/tcpoly_overriding.scala2
-rw-r--r--test/files/run/tcpoly_parseridioms.scala46
-rw-r--r--test/files/run/transform.scala8
-rw-r--r--test/files/run/transpose.scala12
-rw-r--r--test/files/run/treePrint.check5
-rw-r--r--test/files/run/treePrint.scala42
-rw-r--r--test/files/run/triple-quoted-expr.check5
-rw-r--r--test/files/run/triple-quoted-expr.scala26
-rw-r--r--test/files/run/try-2.scala12
-rw-r--r--test/files/run/try.scala8
-rw-r--r--test/files/run/tuple-match.check8
-rw-r--r--test/files/run/tuple-match.scala27
-rw-r--r--test/files/run/tuple-zipped.scala39
-rw-r--r--test/files/run/tuples.scala2
-rw-r--r--test/files/run/typealias_overriding.scala10
-rw-r--r--test/files/run/unapply.scala89
-rw-r--r--test/files/run/unapplyArray.scala2
-rw-r--r--test/files/run/unboxingBug.scala2
-rw-r--r--test/files/run/unittest_collection.scala123
-rw-r--r--test/files/run/unittest_io.scala54
-rw-r--r--test/files/run/unittest_iterator.scala26
-rw-r--r--test/files/run/vector1.scala34
-rw-r--r--test/files/run/view-headoption.check28
-rw-r--r--test/files/run/view-headoption.scala18
-rw-r--r--test/files/run/view-iterator-stream.check112
-rw-r--r--test/files/run/view-iterator-stream.scala67
-rw-r--r--test/files/run/viewtest.check12
-rwxr-xr-xtest/files/run/viewtest.scala11
-rw-r--r--test/files/run/virtpatmat_alts.check1
-rw-r--r--test/files/run/virtpatmat_alts.flags1
-rw-r--r--test/files/run/virtpatmat_alts.scala12
-rw-r--r--test/files/run/virtpatmat_apply.check1
-rw-r--r--test/files/run/virtpatmat_apply.flags1
-rw-r--r--test/files/run/virtpatmat_apply.scala7
-rw-r--r--test/files/run/virtpatmat_casting.check1
-rw-r--r--test/files/run/virtpatmat_casting.flags1
-rw-r--r--test/files/run/virtpatmat_casting.scala8
-rw-r--r--test/files/run/virtpatmat_literal.check3
-rw-r--r--test/files/run/virtpatmat_literal.flags1
-rw-r--r--test/files/run/virtpatmat_literal.scala21
-rw-r--r--test/files/run/virtpatmat_nested_lists.check1
-rw-r--r--test/files/run/virtpatmat_nested_lists.flags1
-rw-r--r--test/files/run/virtpatmat_nested_lists.scala3
-rw-r--r--test/files/run/virtpatmat_npe.check1
-rw-r--r--test/files/run/virtpatmat_npe.flags1
-rw-r--r--test/files/run/virtpatmat_npe.scala10
-rw-r--r--test/files/run/virtpatmat_partial.check2
-rw-r--r--test/files/run/virtpatmat_partial.flags1
-rw-r--r--test/files/run/virtpatmat_partial.scala73
-rw-r--r--test/files/run/virtpatmat_typed.check1
-rw-r--r--test/files/run/virtpatmat_typed.flags1
-rw-r--r--test/files/run/virtpatmat_typed.scala7
-rw-r--r--test/files/run/virtpatmat_unapply.check2
-rw-r--r--test/files/run/virtpatmat_unapply.flags1
-rw-r--r--test/files/run/virtpatmat_unapply.scala32
-rw-r--r--test/files/run/virtpatmat_unapplyseq.check1
-rw-r--r--test/files/run/virtpatmat_unapplyseq.flags1
-rw-r--r--test/files/run/virtpatmat_unapplyseq.scala5
-rwxr-xr-xtest/files/run/weakconform.scala4
-rw-r--r--test/files/run/withIndex.scala2
-rw-r--r--test/files/run/xml-loop-bug.scala6
-rw-r--r--test/files/scalacheck/CheckEither.scala194
-rw-r--r--test/files/scalacheck/HashTrieSplit.scala47
-rw-r--r--test/files/scalacheck/Unrolled.scala26
-rw-r--r--test/files/scalacheck/array.scala50
-rw-r--r--test/files/scalacheck/list.scala8
-rw-r--r--test/files/scalacheck/parallel-collections/IntOperators.scala129
-rw-r--r--test/files/scalacheck/parallel-collections/IntValues.scala29
-rw-r--r--test/files/scalacheck/parallel-collections/Operators.scala36
-rw-r--r--test/files/scalacheck/parallel-collections/PairOperators.scala101
-rw-r--r--test/files/scalacheck/parallel-collections/PairValues.scala28
-rw-r--r--test/files/scalacheck/parallel-collections/ParallelArrayCheck.scala69
-rw-r--r--test/files/scalacheck/parallel-collections/ParallelArrayTest.scala112
-rw-r--r--test/files/scalacheck/parallel-collections/ParallelArrayViewCheck.scala122
-rw-r--r--test/files/scalacheck/parallel-collections/ParallelHashMapCheck.scala97
-rw-r--r--test/files/scalacheck/parallel-collections/ParallelHashSetCheck.scala94
-rw-r--r--test/files/scalacheck/parallel-collections/ParallelHashTrieCheck.scala138
-rw-r--r--test/files/scalacheck/parallel-collections/ParallelIterableCheck.scala472
-rw-r--r--test/files/scalacheck/parallel-collections/ParallelMapCheck1.scala67
-rw-r--r--test/files/scalacheck/parallel-collections/ParallelRangeCheck.scala71
-rw-r--r--test/files/scalacheck/parallel-collections/ParallelSeqCheck.scala299
-rw-r--r--test/files/scalacheck/parallel-collections/ParallelSetCheck.scala62
-rw-r--r--test/files/scalacheck/parallel-collections/ParallelVectorCheck.scala61
-rw-r--r--test/files/scalacheck/parallel-collections/pc.scala51
-rw-r--r--test/files/scalacheck/primitive-eqeq.scala37
-rw-r--r--test/files/scalacheck/range.scala228
-rw-r--r--test/files/scalacheck/redblack.scala213
-rw-r--r--test/files/scalacheck/scan.scala19
-rw-r--r--test/files/scalacheck/substringTests.scala20
-rw-r--r--test/files/scalacheck/test.scala8
-rw-r--r--test/files/scalacheck/testdir/dep.scala7
-rw-r--r--test/files/scalacheck/testdir/test.scala10
-rw-r--r--test/files/scalap/caseClass/A.scala2
-rw-r--r--test/files/scalap/caseClass/result.test19
-rw-r--r--test/files/scalap/caseObject/A.scala2
-rw-r--r--test/files/scalap/caseObject/result.test13
-rw-r--r--test/files/scalap/cbnParam/A.scala2
-rw-r--r--test/files/scalap/classPrivate/A.scala9
-rw-r--r--test/files/scalap/classPrivate/result.test10
-rw-r--r--test/files/scalap/classWithExistential/result.test4
-rw-r--r--test/files/scalap/covariantParam/result.test4
-rw-r--r--test/files/scalap/defaultParameter/A.scala3
-rw-r--r--test/files/scalap/defaultParameter/result.test3
-rw-r--r--test/files/scalap/typeAnnotations/A.scala9
-rw-r--r--test/files/scalap/typeAnnotations/result.test8
-rwxr-xr-xtest/files/script/utf8.scala27
-rw-r--r--test/files/specialized/arrays-traits.check6
-rw-r--r--test/files/specialized/arrays-traits.scala46
-rw-r--r--test/files/specialized/arrays.check4
-rw-r--r--test/files/specialized/arrays.scala55
-rw-r--r--test/files/specialized/fft.check4
-rw-r--r--test/files/specialized/fft.scala149
-rw-r--r--test/files/specialized/input2.txt65537
-rw-r--r--test/files/specialized/spec-absfun.check1
-rw-r--r--test/files/specialized/spec-absfun.scala44
-rw-r--r--test/files/specialized/spec-ame.check3
-rw-r--r--test/files/specialized/spec-ame.scala18
-rw-r--r--test/files/specialized/spec-constr.check3
-rw-r--r--test/files/specialized/spec-constr.scala15
-rw-r--r--test/files/specialized/spec-early.check5
-rw-r--r--test/files/specialized/spec-early.scala16
-rw-r--r--test/files/specialized/spec-init.check10
-rw-r--r--test/files/specialized/spec-init.scala42
-rw-r--r--test/files/specialized/spec-matrix.check2
-rw-r--r--test/files/specialized/spec-matrix.scala80
-rw-r--r--test/files/specialized/spec-overrides.check1
-rw-r--r--test/files/specialized/spec-overrides.scala22
-rw-r--r--test/files/specialized/spec-patmatch.check20
-rw-r--r--test/files/specialized/spec-patmatch.scala53
-rw-r--r--test/files/specialized/spec-super.check3
-rw-r--r--test/files/specialized/spec-super.scala20
-rw-r--r--test/files/specialized/spec-t3896.check3
-rw-r--r--test/files/specialized/spec-t3896.scala20
-rw-r--r--test/files/specialized/tb3651.check1
-rw-r--r--test/files/specialized/tb3651.scala11
-rw-r--r--test/files/specialized/tc3651.check1
-rw-r--r--test/files/specialized/tc3651.scala15
-rw-r--r--test/files/specialized/td3651.check2
-rw-r--r--test/files/specialized/td3651.scala19
-rw-r--r--test/files/specialized/test.scala9
-rw-r--r--test/files/speclib/instrumented.jar.desired.sha11
-rw-r--r--test/instrumented/library/scala/runtime/BoxesRunTime.java876
-rw-r--r--test/instrumented/library/scala/runtime/ScalaRunTime.scala327
-rwxr-xr-xtest/instrumented/mkinstrumented46
-rwxr-xr-xtest/partest22
-rwxr-xr-xtest/partest.bat14
-rw-r--r--test/pending/buildmanager/t2443/BitSet.scala2
-rw-r--r--test/pending/buildmanager/t2443/t2443.changes/BitSet2.scala1
-rw-r--r--test/pending/buildmanager/t2443/t2443.check6
-rw-r--r--test/pending/buildmanager/t2443/t2443.test3
-rw-r--r--test/pending/continuations-pos/t3620.scala73
-rw-r--r--test/pending/continuations-run/example0.scala9
-rw-r--r--test/pending/continuations-run/example1.scala9
-rw-r--r--test/pending/continuations-run/example16.scala9
-rw-r--r--test/pending/continuations-run/example2.scala9
-rw-r--r--test/pending/continuations-run/example3.scala9
-rw-r--r--test/pending/continuations-run/example4.scala9
-rw-r--r--test/pending/continuations-run/example5.scala9
-rw-r--r--test/pending/continuations-run/example6.scala9
-rw-r--r--test/pending/continuations-run/example7.scala9
-rw-r--r--test/pending/continuations-run/example8.scala9
-rw-r--r--test/pending/continuations-run/example9.scala9
-rw-r--r--test/pending/continuations-run/foreach.check4
-rw-r--r--test/pending/continuations-run/foreach.scala33
-rw-r--r--test/pending/jvm/actor-executor4.check21
-rw-r--r--test/pending/jvm/actor-executor4.scala64
-rw-r--r--test/pending/jvm/actorgc_leak.scala2
-rw-r--r--test/pending/jvm/annotations.scala159
-rw-r--r--test/pending/jvm/backendBugUnapply.scala9
-rw-r--r--test/pending/jvm/cf-attributes.check50
-rw-r--r--test/pending/jvm/cf-attributes.scala146
-rw-r--r--test/pending/jvm/javasigs.check321
-rw-r--r--test/pending/jvm/javasigs.scala78
-rw-r--r--test/pending/jvm/serialization.check198
-rw-r--r--test/pending/jvm/serialization.scala411
-rw-r--r--test/pending/jvm/t1801.check (renamed from test/files/jvm/t1801.check)0
-rw-r--r--test/pending/jvm/t1801.scala (renamed from test/files/jvm/t1801.scala)0
-rw-r--r--test/pending/jvm/t2515.check (renamed from test/files/jvm/t2515.check)0
-rw-r--r--test/pending/jvm/t2515.scala43
-rw-r--r--test/pending/jvm/t2705/GenericInterface.java1
-rw-r--r--test/pending/jvm/t2705/Methods.java4
-rw-r--r--test/pending/jvm/t2705/t2705.scala5
-rw-r--r--test/pending/jvm/timeout.scala2
-rw-r--r--test/pending/neg/bug112506A.scala19
-rw-r--r--test/pending/neg/bug1210.scala10
-rw-r--r--test/pending/neg/bug1987.scala14
-rw-r--r--test/pending/neg/dbldef.check14
-rw-r--r--test/pending/neg/dbldef.scala1
-rw-r--r--test/pending/neg/dot-classpath.flags1
-rw-r--r--test/pending/neg/dot-classpath/S_1.scala3
-rw-r--r--test/pending/neg/dot-classpath/S_2.scala3
-rw-r--r--test/pending/neg/plugin-after-terminal.check (renamed from test/files/neg/plugin-after-terminal.check)0
-rw-r--r--test/pending/neg/plugin-after-terminal.flags (renamed from test/files/neg/plugin-after-terminal.flags)0
-rw-r--r--test/pending/neg/plugin-after-terminal/lib/plugins.jar.desired.sha11
-rwxr-xr-xtest/pending/neg/plugin-after-terminal/misc/build.sh (renamed from test/files/neg/plugin-after-terminal/misc/build.sh)0
-rw-r--r--test/pending/neg/plugin-after-terminal/misc/scalac-plugin.xml (renamed from test/files/neg/plugin-after-terminal/misc/scalac-plugin.xml)0
-rw-r--r--test/pending/neg/plugin-after-terminal/src/ThePlugin.scala31
-rw-r--r--test/pending/neg/plugin-after-terminal/testsource.scala (renamed from test/files/neg/plugin-after-terminal/testsource.scala)0
-rw-r--r--test/pending/neg/plugin-before-parser.check (renamed from test/files/neg/plugin-before-parser.check)0
-rw-r--r--test/pending/neg/plugin-before-parser.flags (renamed from test/files/neg/plugin-before-parser.flags)0
-rw-r--r--test/pending/neg/plugin-before-parser/lib/plugins.jar.desired.sha11
-rwxr-xr-xtest/pending/neg/plugin-before-parser/misc/build.sh (renamed from test/files/neg/plugin-before-parser/misc/build.sh)0
-rw-r--r--test/pending/neg/plugin-before-parser/misc/scalac-plugin.xml (renamed from test/files/neg/plugin-before-parser/misc/scalac-plugin.xml)0
-rw-r--r--test/pending/neg/plugin-before-parser/src/ThePlugin.scala32
-rw-r--r--test/pending/neg/plugin-before-parser/testsource.scala (renamed from test/files/neg/plugin-before-parser/testsource.scala)0
-rw-r--r--test/pending/neg/plugin-cyclic-dependency.check (renamed from test/files/neg/plugin-cyclic-dependency.check)0
-rw-r--r--test/pending/neg/plugin-cyclic-dependency.flags (renamed from test/files/neg/plugin-cyclic-dependency.flags)0
-rw-r--r--test/pending/neg/plugin-cyclic-dependency/lib/plugins.jar.desired.sha11
-rwxr-xr-xtest/pending/neg/plugin-cyclic-dependency/misc/build.sh (renamed from test/files/neg/plugin-cyclic-dependency/misc/build.sh)0
-rw-r--r--test/pending/neg/plugin-cyclic-dependency/misc/scalac-plugin.xml (renamed from test/files/neg/plugin-cyclic-dependency/misc/scalac-plugin.xml)0
-rw-r--r--test/pending/neg/plugin-cyclic-dependency/src/ThePlugin.scala41
-rw-r--r--test/pending/neg/plugin-cyclic-dependency/testsource.scala (renamed from test/files/neg/plugin-cyclic-dependency/testsource.scala)0
-rw-r--r--test/pending/neg/plugin-multiple-rafter.check (renamed from test/files/neg/plugin-multiple-rafter.check)0
-rw-r--r--test/pending/neg/plugin-multiple-rafter.flags (renamed from test/files/neg/plugin-multiple-rafter.flags)0
-rw-r--r--test/pending/neg/plugin-multiple-rafter/lib/plugins.jar.desired.sha11
-rwxr-xr-xtest/pending/neg/plugin-multiple-rafter/misc/build.sh (renamed from test/files/neg/plugin-multiple-rafter/misc/build.sh)0
-rw-r--r--test/pending/neg/plugin-multiple-rafter/misc/scalac-plugin.xml (renamed from test/files/neg/plugin-multiple-rafter/misc/scalac-plugin.xml)0
-rw-r--r--test/pending/neg/plugin-multiple-rafter/src/ThePlugin.scala31
-rw-r--r--test/pending/neg/plugin-multiple-rafter/testsource.scala (renamed from test/files/neg/plugin-multiple-rafter/testsource.scala)0
-rw-r--r--test/pending/neg/plugin-rafter-before-1.check (renamed from test/files/neg/plugin-rafter-before-1.check)0
-rw-r--r--test/pending/neg/plugin-rafter-before-1.flags (renamed from test/files/neg/plugin-rafter-before-1.flags)0
-rw-r--r--test/pending/neg/plugin-rafter-before-1/lib/plugins.jar.desired.sha11
-rwxr-xr-xtest/pending/neg/plugin-rafter-before-1/misc/build.sh (renamed from test/files/neg/plugin-rafter-before-1/misc/build.sh)0
-rw-r--r--test/pending/neg/plugin-rafter-before-1/misc/scalac-plugin.xml (renamed from test/files/neg/plugin-rafter-before-1/misc/scalac-plugin.xml)0
-rw-r--r--test/pending/neg/plugin-rafter-before-1/src/ThePlugin.scala31
-rw-r--r--test/pending/neg/plugin-rafter-before-1/testsource.scala (renamed from test/files/neg/plugin-rafter-before-1/testsource.scala)0
-rw-r--r--test/pending/neg/plugin-rightafter-terminal.check (renamed from test/files/neg/plugin-rightafter-terminal.check)0
-rw-r--r--test/pending/neg/plugin-rightafter-terminal.flags (renamed from test/files/neg/plugin-rightafter-terminal.flags)0
-rw-r--r--test/pending/neg/plugin-rightafter-terminal/lib/plugins.jar.desired.sha11
-rwxr-xr-xtest/pending/neg/plugin-rightafter-terminal/misc/build.sh (renamed from test/files/neg/plugin-rightafter-terminal/misc/build.sh)0
-rw-r--r--test/pending/neg/plugin-rightafter-terminal/misc/scalac-plugin.xml (renamed from test/files/neg/plugin-rightafter-terminal/misc/scalac-plugin.xml)0
-rw-r--r--test/pending/neg/plugin-rightafter-terminal/src/ThePlugin.scala32
-rw-r--r--test/pending/neg/plugin-rightafter-terminal/testsource.scala (renamed from test/files/neg/plugin-rightafter-terminal/testsource.scala)0
-rw-r--r--test/pending/neg/scopes.check30
-rw-r--r--test/pending/neg/scopes.scala20
-rw-r--r--test/pending/neg/t0513.scala6
-rw-r--r--test/pending/neg/t0625.check7
-rw-r--r--test/pending/neg/t0625.scala4
-rw-r--r--test/pending/neg/t0653.check5
-rw-r--r--test/pending/neg/t0653.scala28
-rw-r--r--test/pending/neg/t1038.check4
-rw-r--r--test/pending/neg/t1038.scala7
-rwxr-xr-xtest/pending/neg/t1545.scala16
-rw-r--r--test/pending/neg/t1845.scala12
-rw-r--r--test/pending/neg/t2078.scala9
-rw-r--r--test/pending/neg/t2079.scala25
-rw-r--r--test/pending/neg/t2080.scala2
-rw-r--r--test/pending/neg/t2180.scala31
-rw-r--r--test/pending/neg/t3152.scala8
-rw-r--r--test/pending/neg/t3189.check7
-rw-r--r--test/pending/neg/t3189.scala3
-rw-r--r--test/pending/neg/t3633/test/Test.scala23
-rw-r--r--test/pending/neg/t796.scala (renamed from test/pending/pos/t796.scala)0
-rw-r--r--test/pending/neg/t963.scala26
-rw-r--r--test/pending/neg/tcpoly_typealias_eta.scala6
-rw-r--r--test/pending/neg/tcpoly_variance_enforce_getter_setter.scala4
-rw-r--r--test/pending/neg/type-diagnostics.scala11
-rw-r--r--test/pending/pos/bug0305.scala8
-rw-r--r--test/pending/pos/bug112606B.scala11
-rw-r--r--test/pending/pos/bug2018.scala15
-rw-r--r--test/pending/pos/bug563.scala7
-rw-r--r--test/pending/pos/bug572.scala33
-rw-r--r--test/pending/pos/bug573.scala43
-rw-r--r--test/pending/pos/bug578.scala7
-rw-r--r--test/pending/pos/bug579.scala21
-rw-r--r--test/pending/pos/bug586.scala78
-rw-r--r--test/pending/pos/existentials-harmful.scala54
-rw-r--r--test/pending/pos/foo.scala3
-rw-r--r--test/pending/pos/misc/B.scala2
-rw-r--r--test/pending/pos/moors.scala12
-rw-r--r--test/pending/pos/no-widen-locals.scala19
-rw-r--r--test/pending/pos/package-case.scala4
-rw-r--r--test/pending/pos/sig/sigs.scala2
-rw-r--r--test/pending/pos/t0576.scala9
-rw-r--r--test/pending/pos/t0621.scala2
-rw-r--r--test/pending/pos/t0644.scala11
-rw-r--r--test/pending/pos/t0716.scala24
-rw-r--r--test/pending/pos/t0756.scala8
-rw-r--r--test/pending/pos/t0805.scala9
-rw-r--r--test/pending/pos/t0816.scala12
-rw-r--r--test/pending/pos/t1003.scala3
-rw-r--r--test/pending/pos/t1004.scala6
-rw-r--r--test/pending/pos/t1024.scala4
-rw-r--r--test/pending/pos/t1035.scala32
-rw-r--r--test/pending/pos/t1357.scala21
-rw-r--r--test/pending/pos/t1380/gnujaxp.jar.desired.sha1 (renamed from test/files/pos/t1380/gnujaxp.jar.desired.sha1)0
-rw-r--r--test/pending/pos/t1380/hallo.scala3
-rw-r--r--test/pending/pos/t1659.scala4
-rw-r--r--test/pending/pos/t1786.scala4
-rw-r--r--test/pending/pos/t1957.scala (renamed from test/pending/pos/bug1957.scala)0
-rw-r--r--test/pending/pos/t1987/a.scala7
-rw-r--r--test/pending/pos/t1987/b.scala10
-rw-r--r--test/pending/pos/t2060.scala28
-rw-r--r--test/pending/pos/t2099.scala27
-rw-r--r--test/pending/pos/t2173.scala25
-rw-r--r--test/pending/pos/t2179.scala6
-rw-r--r--test/pending/pos/t425variant.scala10
-rw-r--r--test/pending/pos/t4606.scala29
-rw-r--r--test/pending/pos/t4859.scala15
-rw-r--r--test/pending/pos/those-kinds-are-high.scala37
-rw-r--r--test/pending/pos/unappgadteval.scala84
-rw-r--r--test/pending/pos/unapplyGeneric.scala11
-rw-r--r--test/pending/pos/virt.scala4
-rw-r--r--test/pending/res/bug1092.res1
-rw-r--r--test/pending/res/bug1092/A.scala4
-rw-r--r--test/pending/res/bug1092/B.scala4
-rw-r--r--test/pending/res/bug1092/C.scala6
-rw-r--r--test/pending/res/bug830/Bad.scala11
-rw-r--r--test/pending/res/bug830/Good.scala11
-rw-r--r--test/pending/res/bug830A.res13
-rw-r--r--test/pending/res/bug830B.res13
-rw-r--r--test/pending/res/bug837.res3
-rw-r--r--test/pending/res/bug837/DataFlowAnalysis.scala17
-rw-r--r--test/pending/res/bug837/DeadCode.scala6
-rw-r--r--test/pending/run/TestFlatMap.scala29
-rw-r--r--test/pending/run/array_casts.check16
-rw-r--r--test/pending/run/array_casts.scala42
-rw-r--r--test/pending/run/arrays-2.check7
-rw-r--r--test/pending/run/arrays-2.scala25
-rw-r--r--test/pending/run/bug0412.scala33
-rw-r--r--test/pending/run/bug0551.scala5
-rw-r--r--test/pending/run/bug1006.check1
-rw-r--r--test/pending/run/bug1006.scala13
-rw-r--r--test/pending/run/bug1031.scala11
-rw-r--r--test/pending/run/bug1042.scala14
-rw-r--r--test/pending/run/bug2087.scala8
-rw-r--r--test/pending/run/bug424.scala3
-rw-r--r--test/pending/run/bug874.scala17
-rw-r--r--test/pending/run/bugs425-and-816.scala27
-rw-r--r--test/pending/run/castsingleton.check2
-rw-r--r--test/pending/run/castsingleton.scala10
-rw-r--r--test/pending/run/collections.check36
-rw-r--r--test/pending/run/collections.scala102
-rw-r--r--test/pending/run/deprecated.scala35
-rw-r--r--test/pending/run/exc1.scala10
-rw-r--r--test/pending/run/hk-lub-fail.scala37
-rw-r--r--test/pending/run/instanceOfAndTypeMatching.scala192
-rw-r--r--test/pending/run/jar-version.scala11
-rw-r--r--test/pending/run/mixins.scala6
-rw-r--r--test/pending/run/records.scala25
-rw-r--r--test/pending/run/reify_addressbook.check30
-rw-r--r--test/pending/run/reify_addressbook.scala71
-rw-r--r--test/pending/run/reify_brainf_ck.check4
-rw-r--r--test/pending/run/reify_brainf_ck.scala85
-rw-r--r--test/pending/run/reify_callccinterpreter.check3
-rw-r--r--test/pending/run/reify_callccinterpreter.scala94
-rw-r--r--test/pending/run/reify_complex.check1
-rw-r--r--test/pending/run/reify_complex.scala31
-rw-r--r--test/pending/run/reify_csv.check10
-rw-r--r--test/pending/run/reify_csv.scala42
-rw-r--r--test/pending/run/reify_extendbuiltins.check1
-rw-r--r--test/pending/run/reify_extendbuiltins.scala21
-rw-r--r--test/pending/run/reify_fors.check5
-rw-r--r--test/pending/run/reify_fors.scala107
-rw-r--r--test/pending/run/reify_gadts.check1
-rw-r--r--test/pending/run/reify_gadts.scala45
-rw-r--r--test/pending/run/reify_implicits.check1
-rw-r--r--test/pending/run/reify_implicits.scala21
-rw-r--r--test/pending/run/reify_lazyevaluation.check8
-rw-r--r--test/pending/run/reify_lazyevaluation.scala65
-rw-r--r--test/pending/run/reify_maps.check4
-rw-r--r--test/pending/run/reify_maps.scala26
-rw-r--r--test/pending/run/reify_properties.check2
-rw-r--r--test/pending/run/reify_properties.scala63
-rw-r--r--test/pending/run/reify_simpleinterpreter.check2
-rw-r--r--test/pending/run/reify_simpleinterpreter.scala82
-rw-r--r--test/pending/run/reify_sort.check2
-rw-r--r--test/pending/run/reify_sort.scala57
-rw-r--r--test/pending/run/reify_sort1.check2
-rw-r--r--test/pending/run/reify_sort1.scala27
-rw-r--r--test/pending/run/reify_timeofday.check1
-rw-r--r--test/pending/run/reify_timeofday.scala48
-rw-r--r--test/pending/run/signals.scala22
-rw-r--r--test/pending/run/sigtp.check11
-rw-r--r--test/pending/run/sigtp.scala17
-rw-r--r--test/pending/run/string-reverse.scala22
-rw-r--r--test/pending/run/structural-types-vs-anon-classes.scala17
-rw-r--r--test/pending/run/t0446.scala6
-rw-r--r--test/pending/run/t0508x.scala6
-rw-r--r--test/pending/run/t0727.check2
-rw-r--r--test/pending/run/t0727.scala5
-rw-r--r--test/pending/run/t0732.check3
-rw-r--r--test/pending/run/t0732.scala8
-rw-r--r--test/pending/run/t0807.scala5
-rw-r--r--test/pending/run/t0818.scala4
-rw-r--r--test/pending/run/t0947.check1
-rw-r--r--test/pending/run/t0947.scala8
-rw-r--r--test/pending/run/t1044.scala5
-rw-r--r--test/pending/run/t1697.scala (renamed from test/files/run/bug1697.scala)0
-rw-r--r--test/pending/run/t1939.scala41
-rw-r--r--test/pending/run/t1980.scala16
-rw-r--r--test/pending/run/t2318.check2
-rw-r--r--test/pending/run/t2318.scala38
-rw-r--r--test/pending/run/t2364.check1
-rw-r--r--test/pending/run/t2364.scala60
-rw-r--r--test/pending/run/t2897.scala22
-rwxr-xr-xtest/pending/run/t3609.scala28
-rw-r--r--test/pending/run/t3669.scala22
-rw-r--r--test/pending/run/t3857.check11
-rw-r--r--test/pending/run/t3857.scala13
-rw-r--r--test/pending/run/t4283/AbstractFoo.java6
-rw-r--r--test/pending/run/t4283/IllegalAccess.scala17
-rw-r--r--test/pending/run/t4283/ScalaBipp.scala5
-rw-r--r--test/pending/run/t4291.check87
-rw-r--r--test/pending/run/t4291.scala19
-rw-r--r--test/pending/run/t4713/JavaAnnots.java14
-rw-r--r--test/pending/run/t4713/Problem.scala5
-rw-r--r--test/pending/run/t5224.check9
-rw-r--r--test/pending/run/t5224.scala8
-rw-r--r--test/pending/run/t5225_1.check4
-rw-r--r--test/pending/run/t5225_1.scala8
-rw-r--r--test/pending/run/t5225_2.check4
-rw-r--r--test/pending/run/t5225_2.scala8
-rw-r--r--test/pending/run/t5229_1.check0
-rw-r--r--test/pending/run/t5229_1.scala14
-rw-r--r--test/pending/run/t5229_1_nolift.scala1
-rw-r--r--test/pending/run/t5229_2.check2
-rw-r--r--test/pending/run/t5229_2.scala19
-rw-r--r--test/pending/run/t5269.check1
-rw-r--r--test/pending/run/t5269.scala22
-rw-r--r--test/pending/run/t5270.check1
-rw-r--r--test/pending/run/t5270.scala26
-rw-r--r--test/pending/run/t5271_1.check0
-rw-r--r--test/pending/run/t5271_1.scala14
-rw-r--r--test/pending/run/t5271_2.check1
-rw-r--r--test/pending/run/t5271_2.scala16
-rw-r--r--test/pending/run/t5272.check1
-rw-r--r--test/pending/run/t5272.scala17
-rw-r--r--test/pending/run/t5273_1.check1
-rw-r--r--test/pending/run/t5273_1.scala16
-rw-r--r--test/pending/run/t5273_2.check1
-rw-r--r--test/pending/run/t5273_2.scala17
-rw-r--r--test/pending/run/t5274_1.check3
-rw-r--r--test/pending/run/t5274_1.scala20
-rw-r--r--test/pending/run/t5274_2.check2
-rw-r--r--test/pending/run/t5274_2.scala57
-rw-r--r--test/pending/run/t5275.check1
-rw-r--r--test/pending/run/t5275.scala15
-rw-r--r--test/pending/run/t5276.check1
-rw-r--r--test/pending/run/t5276.scala15
-rw-r--r--test/pending/run/t5277_1.check1
-rw-r--r--test/pending/run/t5277_1.scala21
-rw-r--r--test/pending/run/t5277_2.check2
-rw-r--r--test/pending/run/t5277_2.scala18
-rw-r--r--test/pending/run/t5279.check1
-rw-r--r--test/pending/run/t5279.scala14
-rw-r--r--test/pending/run/treesetmap.check1
-rw-r--r--test/pending/run/treesetmap.scala5
-rw-r--r--test/pending/scalacheck/CheckEither.scala253
-rw-r--r--test/pending/scalacheck/process.scala160
-rw-r--r--test/pending/script/error-messages.check (renamed from test/pending/script/errors.check)0
-rw-r--r--test/pending/script/error-messages.scala (renamed from test/pending/script/errors.scala)0
-rw-r--r--test/pending/script/t2365.javaopts1
-rwxr-xr-xtest/pending/script/t2365.sh13
-rw-r--r--test/pending/script/t2365/Test.scala35
-rwxr-xr-xtest/pending/script/t2365/runner.scala9
-rw-r--r--test/pending/shootout/fasta.check171
-rw-r--r--test/pending/shootout/fasta.scala162
-rw-r--r--test/pending/shootout/fasta.scala.runner3
-rw-r--r--test/pending/shootout/harmonic.scala-2.scala14
-rw-r--r--test/pending/shootout/harmonic.scala-2.scala.runner16
-rw-r--r--test/pending/shootout/harmonic.scala-3.scala15
-rw-r--r--test/pending/shootout/harmonic.scala-3.scala.runner3
-rw-r--r--test/pending/shootout/heapsort.scala72
-rw-r--r--test/pending/shootout/heapsort.scala.runner3
-rw-r--r--test/pending/shootout/mandelbrot.scala-2.checkbin0 -> 5011 bytes
-rw-r--r--test/pending/shootout/mandelbrot.scala-2.scala79
-rw-r--r--test/pending/shootout/mandelbrot.scala-2.scala.runner3
-rw-r--r--test/pending/shootout/message.check1
-rw-r--r--test/pending/shootout/message.javaopts1
-rw-r--r--test/pending/shootout/message.scala47
-rw-r--r--test/pending/shootout/message.scala.runner3
-rw-r--r--test/pending/shootout/meteor.scala496
-rw-r--r--test/pending/shootout/meteor.scala-2.scala496
-rw-r--r--test/pending/shootout/meteor.scala-2.scala.runner3
-rw-r--r--test/pending/shootout/meteor.scala-3.scala557
-rw-r--r--test/pending/shootout/meteor.scala-3.scala.runner3
-rw-r--r--test/pending/shootout/meteor.scala-4.scala587
-rw-r--r--test/pending/shootout/meteor.scala-4.scala.runner3
-rw-r--r--test/pending/shootout/meteor.scala.runner3
-rw-r--r--test/pending/shootout/methcall.scala58
-rw-r--r--test/pending/shootout/methcall.scala.runner3
-rw-r--r--test/pending/shootout/nsieve.scala-4.check9
-rw-r--r--test/pending/shootout/nsieve.scala-4.scala45
-rw-r--r--test/pending/shootout/nsieve.scala-4.scala.runner3
-rw-r--r--test/pending/shootout/pidigits.check100
-rw-r--r--test/pending/shootout/pidigits.scala69
-rw-r--r--test/pending/shootout/pidigits.scala.runner3
-rw-r--r--test/pending/shootout/prodcons.scala64
-rw-r--r--test/pending/shootout/prodcons.scala.runner3
-rw-r--r--test/pending/shootout/random.scala32
-rw-r--r--test/pending/shootout/random.scala.runner3
-rw-r--r--test/pending/shootout/revcomp.scala-2.check171
-rw-r--r--test/pending/shootout/revcomp.scala-2.scala92
-rw-r--r--test/pending/shootout/revcomp.scala-2.scala.runner6
-rw-r--r--test/pending/shootout/revcomp.scala-3.check171
-rw-r--r--test/pending/shootout/revcomp.scala-3.scala147
-rw-r--r--test/pending/shootout/revcomp.scala-3.scala.runner6
-rw-r--r--test/pending/shootout/sieve.scala43
-rw-r--r--test/pending/shootout/sieve.scala.runner3
-rw-r--r--test/postreview.py2540
-rwxr-xr-xtest/review44
-rw-r--r--test/scaladoc/javascript/package.html1
-rw-r--r--test/scaladoc/javascript/test-index.html35
-rw-r--r--test/scaladoc/javascript/test-index.js17
-rw-r--r--test/scaladoc/resources/SI_4287.scala6
-rw-r--r--test/scaladoc/resources/SI_4421.scala7
-rw-r--r--test/scaladoc/resources/SI_4507.scala19
-rw-r--r--test/scaladoc/resources/SI_4589.scala11
-rw-r--r--test/scaladoc/resources/SI_4641.scala3
-rw-r--r--test/scaladoc/resources/SI_4676.scala4
-rw-r--r--test/scaladoc/resources/SI_4715.scala7
-rw-r--r--test/scaladoc/resources/SI_4898.scala9
-rw-r--r--test/scaladoc/resources/SI_5054_q1.scala9
-rw-r--r--test/scaladoc/resources/SI_5054_q2.scala9
-rw-r--r--test/scaladoc/resources/SI_5054_q3.scala9
-rw-r--r--test/scaladoc/resources/SI_5054_q4.scala9
-rw-r--r--test/scaladoc/resources/SI_5054_q5.scala9
-rw-r--r--test/scaladoc/resources/SI_5054_q6.scala9
-rw-r--r--test/scaladoc/resources/SI_5054_q7.scala22
-rw-r--r--test/scaladoc/resources/Trac3484.scala27
-rw-r--r--test/scaladoc/resources/Trac3790.scala11
-rw-r--r--test/scaladoc/resources/Trac4180.scala4
-rw-r--r--test/scaladoc/resources/Trac4289.scala13
-rw-r--r--test/scaladoc/resources/Trac4306.scala5
-rw-r--r--test/scaladoc/resources/Trac4325.scala5
-rw-r--r--test/scaladoc/resources/Trac4358.scala8
-rw-r--r--test/scaladoc/resources/Trac4366.scala8
-rw-r--r--test/scaladoc/resources/Trac4372.scala5
-rw-r--r--test/scaladoc/resources/Trac4374.scala5
-rw-r--r--test/scaladoc/resources/Trac4409.scala14
-rw-r--r--test/scaladoc/resources/Trac4420.scala14
-rw-r--r--test/scaladoc/resources/Trac4452.scala30
-rw-r--r--test/scaladoc/resources/Trac4471.scala9
-rw-r--r--test/scaladoc/resources/Trac484.scala18
-rw-r--r--test/scaladoc/resources/basic.scala27
-rw-r--r--test/scaladoc/scala/IndexScriptTest.scala52
-rw-r--r--test/scaladoc/scala/IndexTest.scala82
-rw-r--r--test/scaladoc/scala/html/HtmlFactoryTest.scala520
-rw-r--r--test/scaladoc/scala/model/CommentFactoryTest.scala155
-rwxr-xr-xtest/script-tests/README8
-rw-r--r--test/script-tests/jar-manifest/resources/MANIFEST.MF3
-rwxr-xr-xtest/script-tests/jar-manifest/run-test41
-rw-r--r--test/script-tests/jar-manifest/run-test.check30
-rw-r--r--test/script-tests/jar-manifest/src/jar-test.scala34
-rw-r--r--test/simplejson/__init__.py318
-rw-r--r--test/simplejson/decoder.py354
-rw-r--r--test/simplejson/encoder.py440
-rw-r--r--test/simplejson/scanner.py65
-rw-r--r--test/simplejson/tool.py37
-rw-r--r--test/support/annotations/NestedAnnotations.java (renamed from test/files/jvm/NestedAnnotations.java)8
-rw-r--r--test/support/annotations/OuterEnum.java (renamed from test/files/jvm/OuterEnum.java)0
-rw-r--r--test/support/annotations/OuterTParams.java (renamed from test/files/jvm/OuterTParams.java)0
-rw-r--r--test/support/annotations/SourceAnnotation.java (renamed from test/files/jvm/SourceAnnotation.java)0
-rwxr-xr-xtest/support/annotations/mkAnnotationsJar.sh (renamed from test/files/jvm/mkAnnotationsJar.sh)0
3761 files changed, 255429 insertions, 10371 deletions
diff --git a/test/files/cli/test1/Main.check.j9vm5 b/test/attic/files/cli/test1/Main.check.j9vm5
index de454ef478..de454ef478 100644
--- a/test/files/cli/test1/Main.check.j9vm5
+++ b/test/attic/files/cli/test1/Main.check.j9vm5
diff --git a/test/files/cli/test1/Main.check.java b/test/attic/files/cli/test1/Main.check.java
index 64410de98f..64410de98f 100644
--- a/test/files/cli/test1/Main.check.java
+++ b/test/attic/files/cli/test1/Main.check.java
diff --git a/test/files/cli/test1/Main.check.java5 b/test/attic/files/cli/test1/Main.check.java5
index 64410de98f..64410de98f 100644
--- a/test/files/cli/test1/Main.check.java5
+++ b/test/attic/files/cli/test1/Main.check.java5
diff --git a/test/files/cli/test1/Main.check.java5_api b/test/attic/files/cli/test1/Main.check.java5_api
index 8693a5d92f..8693a5d92f 100644
--- a/test/files/cli/test1/Main.check.java5_api
+++ b/test/attic/files/cli/test1/Main.check.java5_api
diff --git a/test/files/cli/test1/Main.check.java5_j9 b/test/attic/files/cli/test1/Main.check.java5_j9
index de454ef478..de454ef478 100644
--- a/test/files/cli/test1/Main.check.java5_j9
+++ b/test/attic/files/cli/test1/Main.check.java5_j9
diff --git a/test/files/cli/test1/Main.check.javac b/test/attic/files/cli/test1/Main.check.javac
index ba25d9b6ca..ba25d9b6ca 100644
--- a/test/files/cli/test1/Main.check.javac
+++ b/test/attic/files/cli/test1/Main.check.javac
diff --git a/test/files/cli/test1/Main.check.javac5 b/test/attic/files/cli/test1/Main.check.javac5
index 0cb29d31ff..0cb29d31ff 100644
--- a/test/files/cli/test1/Main.check.javac5
+++ b/test/attic/files/cli/test1/Main.check.javac5
diff --git a/test/files/cli/test1/Main.check.javac6 b/test/attic/files/cli/test1/Main.check.javac6
index 8f37a05bcb..8f37a05bcb 100644
--- a/test/files/cli/test1/Main.check.javac6
+++ b/test/attic/files/cli/test1/Main.check.javac6
diff --git a/test/files/cli/test1/Main.check.jikes b/test/attic/files/cli/test1/Main.check.jikes
index cd891689db..cd891689db 100644
--- a/test/files/cli/test1/Main.check.jikes
+++ b/test/attic/files/cli/test1/Main.check.jikes
diff --git a/test/files/cli/test1/Main.check.jikes5 b/test/attic/files/cli/test1/Main.check.jikes5
index cd891689db..cd891689db 100644
--- a/test/files/cli/test1/Main.check.jikes5
+++ b/test/attic/files/cli/test1/Main.check.jikes5
diff --git a/test/files/cli/test1/Main.check.scala b/test/attic/files/cli/test1/Main.check.scala
index 43b200ae02..43b200ae02 100644
--- a/test/files/cli/test1/Main.check.scala
+++ b/test/attic/files/cli/test1/Main.check.scala
diff --git a/test/files/cli/test1/Main.check.scala_api b/test/attic/files/cli/test1/Main.check.scala_api
index 6fac39d3f0..6fac39d3f0 100644
--- a/test/files/cli/test1/Main.check.scala_api
+++ b/test/attic/files/cli/test1/Main.check.scala_api
diff --git a/test/files/cli/test1/Main.check.scala_j9 b/test/attic/files/cli/test1/Main.check.scala_j9
index 65d5ddaac4..65d5ddaac4 100644
--- a/test/files/cli/test1/Main.check.scala_j9
+++ b/test/attic/files/cli/test1/Main.check.scala_j9
diff --git a/test/files/cli/test1/Main.check.scalac b/test/attic/files/cli/test1/Main.check.scalac
index 8465810d0b..8465810d0b 100644
--- a/test/files/cli/test1/Main.check.scalac
+++ b/test/attic/files/cli/test1/Main.check.scalac
diff --git a/test/files/cli/test1/Main.check.scalaint b/test/attic/files/cli/test1/Main.check.scalaint
index 88345d1874..88345d1874 100644
--- a/test/files/cli/test1/Main.check.scalaint
+++ b/test/attic/files/cli/test1/Main.check.scalaint
diff --git a/test/files/cli/test1/Main.java b/test/attic/files/cli/test1/Main.java
index 8850b87517..8850b87517 100644
--- a/test/files/cli/test1/Main.java
+++ b/test/attic/files/cli/test1/Main.java
diff --git a/test/files/cli/test1/Main.scala b/test/attic/files/cli/test1/Main.scala
index f7dd8a0a36..f7dd8a0a36 100644
--- a/test/files/cli/test1/Main.scala
+++ b/test/attic/files/cli/test1/Main.scala
diff --git a/test/files/cli/test2/Main.check.j9vm5 b/test/attic/files/cli/test2/Main.check.j9vm5
index 8f4fdf8aa1..8f4fdf8aa1 100644
--- a/test/files/cli/test2/Main.check.j9vm5
+++ b/test/attic/files/cli/test2/Main.check.j9vm5
diff --git a/test/files/cli/test2/Main.check.java b/test/attic/files/cli/test2/Main.check.java
index aca383de3e..aca383de3e 100644
--- a/test/files/cli/test2/Main.check.java
+++ b/test/attic/files/cli/test2/Main.check.java
diff --git a/test/files/cli/test2/Main.check.java5 b/test/attic/files/cli/test2/Main.check.java5
index aca383de3e..aca383de3e 100644
--- a/test/files/cli/test2/Main.check.java5
+++ b/test/attic/files/cli/test2/Main.check.java5
diff --git a/test/files/cli/test2/Main.check.java5_api b/test/attic/files/cli/test2/Main.check.java5_api
index 4ff775c3da..4ff775c3da 100644
--- a/test/files/cli/test2/Main.check.java5_api
+++ b/test/attic/files/cli/test2/Main.check.java5_api
diff --git a/test/files/cli/test2/Main.check.java5_j9 b/test/attic/files/cli/test2/Main.check.java5_j9
index 2dcb6e892a..2dcb6e892a 100644
--- a/test/files/cli/test2/Main.check.java5_j9
+++ b/test/attic/files/cli/test2/Main.check.java5_j9
diff --git a/test/files/cli/test2/Main.check.javac b/test/attic/files/cli/test2/Main.check.javac
index c40c0a7a89..c40c0a7a89 100644
--- a/test/files/cli/test2/Main.check.javac
+++ b/test/attic/files/cli/test2/Main.check.javac
diff --git a/test/files/cli/test2/Main.check.javac5 b/test/attic/files/cli/test2/Main.check.javac5
index 0ac32b056e..0ac32b056e 100644
--- a/test/files/cli/test2/Main.check.javac5
+++ b/test/attic/files/cli/test2/Main.check.javac5
diff --git a/test/files/cli/test2/Main.check.javac6 b/test/attic/files/cli/test2/Main.check.javac6
index 350d3253bc..350d3253bc 100644
--- a/test/files/cli/test2/Main.check.javac6
+++ b/test/attic/files/cli/test2/Main.check.javac6
diff --git a/test/files/cli/test2/Main.check.jikes b/test/attic/files/cli/test2/Main.check.jikes
index 97943e8347..97943e8347 100644
--- a/test/files/cli/test2/Main.check.jikes
+++ b/test/attic/files/cli/test2/Main.check.jikes
diff --git a/test/files/cli/test2/Main.check.jikes5 b/test/attic/files/cli/test2/Main.check.jikes5
index 97943e8347..97943e8347 100644
--- a/test/files/cli/test2/Main.check.jikes5
+++ b/test/attic/files/cli/test2/Main.check.jikes5
diff --git a/test/files/cli/test2/Main.check.scala b/test/attic/files/cli/test2/Main.check.scala
index 7e5f17625b..7e5f17625b 100644
--- a/test/files/cli/test2/Main.check.scala
+++ b/test/attic/files/cli/test2/Main.check.scala
diff --git a/test/files/cli/test2/Main.check.scala_api b/test/attic/files/cli/test2/Main.check.scala_api
index bcb0f0c7fb..bcb0f0c7fb 100644
--- a/test/files/cli/test2/Main.check.scala_api
+++ b/test/attic/files/cli/test2/Main.check.scala_api
diff --git a/test/files/cli/test2/Main.check.scala_j9 b/test/attic/files/cli/test2/Main.check.scala_j9
index 80cbb50fa9..80cbb50fa9 100644
--- a/test/files/cli/test2/Main.check.scala_j9
+++ b/test/attic/files/cli/test2/Main.check.scala_j9
diff --git a/test/files/cli/test2/Main.check.scalac b/test/attic/files/cli/test2/Main.check.scalac
index 8465810d0b..8465810d0b 100644
--- a/test/files/cli/test2/Main.check.scalac
+++ b/test/attic/files/cli/test2/Main.check.scalac
diff --git a/test/files/cli/test2/Main.check.scalaint b/test/attic/files/cli/test2/Main.check.scalaint
index 89b6766bb5..89b6766bb5 100644
--- a/test/files/cli/test2/Main.check.scalaint
+++ b/test/attic/files/cli/test2/Main.check.scalaint
diff --git a/test/files/cli/test2/Main.java b/test/attic/files/cli/test2/Main.java
index f6797632bf..f6797632bf 100644
--- a/test/files/cli/test2/Main.java
+++ b/test/attic/files/cli/test2/Main.java
diff --git a/test/files/cli/test2/Main.scala b/test/attic/files/cli/test2/Main.scala
index 1d43759fdf..11c878b9c0 100644
--- a/test/files/cli/test2/Main.scala
+++ b/test/attic/files/cli/test2/Main.scala
@@ -1,5 +1,5 @@
// @info 1 dependency
-package test2
+package test2
object Main {
def main(args: Array[String]) = {
Console.print("2: ")
diff --git a/test/files/cli/test3/Main.check.j9vm5 b/test/attic/files/cli/test3/Main.check.j9vm5
index a094dc8daf..a094dc8daf 100644
--- a/test/files/cli/test3/Main.check.j9vm5
+++ b/test/attic/files/cli/test3/Main.check.j9vm5
diff --git a/test/files/cli/test3/Main.check.java b/test/attic/files/cli/test3/Main.check.java
index de3eb7b136..de3eb7b136 100644
--- a/test/files/cli/test3/Main.check.java
+++ b/test/attic/files/cli/test3/Main.check.java
diff --git a/test/files/cli/test3/Main.check.java5 b/test/attic/files/cli/test3/Main.check.java5
index de3eb7b136..de3eb7b136 100644
--- a/test/files/cli/test3/Main.check.java5
+++ b/test/attic/files/cli/test3/Main.check.java5
diff --git a/test/files/cli/test3/Main.check.java5_api b/test/attic/files/cli/test3/Main.check.java5_api
index f6112211f0..f6112211f0 100644
--- a/test/files/cli/test3/Main.check.java5_api
+++ b/test/attic/files/cli/test3/Main.check.java5_api
diff --git a/test/files/cli/test3/Main.check.java5_j9 b/test/attic/files/cli/test3/Main.check.java5_j9
index 9e228d7649..9e228d7649 100644
--- a/test/files/cli/test3/Main.check.java5_j9
+++ b/test/attic/files/cli/test3/Main.check.java5_j9
diff --git a/test/files/cli/test3/Main.check.javac b/test/attic/files/cli/test3/Main.check.javac
index 8d235b647b..8d235b647b 100644
--- a/test/files/cli/test3/Main.check.javac
+++ b/test/attic/files/cli/test3/Main.check.javac
diff --git a/test/files/cli/test3/Main.check.javac5 b/test/attic/files/cli/test3/Main.check.javac5
index 3a48fa000e..3a48fa000e 100644
--- a/test/files/cli/test3/Main.check.javac5
+++ b/test/attic/files/cli/test3/Main.check.javac5
diff --git a/test/files/cli/test3/Main.check.javac6 b/test/attic/files/cli/test3/Main.check.javac6
index 677b950aed..677b950aed 100644
--- a/test/files/cli/test3/Main.check.javac6
+++ b/test/attic/files/cli/test3/Main.check.javac6
diff --git a/test/files/cli/test3/Main.check.jikes b/test/attic/files/cli/test3/Main.check.jikes
index 604333e81a..604333e81a 100644
--- a/test/files/cli/test3/Main.check.jikes
+++ b/test/attic/files/cli/test3/Main.check.jikes
diff --git a/test/files/cli/test3/Main.check.jikes5 b/test/attic/files/cli/test3/Main.check.jikes5
index 604333e81a..604333e81a 100644
--- a/test/files/cli/test3/Main.check.jikes5
+++ b/test/attic/files/cli/test3/Main.check.jikes5
diff --git a/test/files/cli/test3/Main.check.scala b/test/attic/files/cli/test3/Main.check.scala
index f78729b9a2..f78729b9a2 100644
--- a/test/files/cli/test3/Main.check.scala
+++ b/test/attic/files/cli/test3/Main.check.scala
diff --git a/test/files/cli/test3/Main.check.scala_api b/test/attic/files/cli/test3/Main.check.scala_api
index 4552819b5b..4552819b5b 100644
--- a/test/files/cli/test3/Main.check.scala_api
+++ b/test/attic/files/cli/test3/Main.check.scala_api
diff --git a/test/files/cli/test3/Main.check.scala_j9 b/test/attic/files/cli/test3/Main.check.scala_j9
index 3804c17636..3804c17636 100644
--- a/test/files/cli/test3/Main.check.scala_j9
+++ b/test/attic/files/cli/test3/Main.check.scala_j9
diff --git a/test/files/cli/test3/Main.check.scalac b/test/attic/files/cli/test3/Main.check.scalac
index 8465810d0b..8465810d0b 100644
--- a/test/files/cli/test3/Main.check.scalac
+++ b/test/attic/files/cli/test3/Main.check.scalac
diff --git a/test/files/cli/test3/Main.check.scalaint b/test/attic/files/cli/test3/Main.check.scalaint
index cffa02c5b6..cffa02c5b6 100644
--- a/test/files/cli/test3/Main.check.scalaint
+++ b/test/attic/files/cli/test3/Main.check.scalaint
diff --git a/test/files/cli/test3/Main.java b/test/attic/files/cli/test3/Main.java
index 208863d012..208863d012 100644
--- a/test/files/cli/test3/Main.java
+++ b/test/attic/files/cli/test3/Main.java
diff --git a/test/files/cli/test3/Main.scala b/test/attic/files/cli/test3/Main.scala
index 63fc11b771..63fc11b771 100644
--- a/test/files/cli/test3/Main.scala
+++ b/test/attic/files/cli/test3/Main.scala
diff --git a/test/benchmarks/bench b/test/benchmarks/bench
new file mode 100755
index 0000000000..3aa7e7468c
--- /dev/null
+++ b/test/benchmarks/bench
@@ -0,0 +1,63 @@
+
+#################################################################
+#
+# 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
new file mode 100644
index 0000000000..c879571eae
--- /dev/null
+++ b/test/benchmarks/lib/jsr166_and_extra.jar.desired.sha1
@@ -0,0 +1 @@
+0392ecdeb306263c471ce51fa368223388b82b61 ?jsr166_and_extra.jar
diff --git a/test/benchmarks/source.list b/test/benchmarks/source.list
new file mode 100644
index 0000000000..c5d5f7f8fe
--- /dev/null
+++ b/test/benchmarks/source.list
@@ -0,0 +1,79 @@
+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
new file mode 100644
index 0000000000..e167ff04e8
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/immutable/range-bench.scala
@@ -0,0 +1,61 @@
+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
new file mode 100644
index 0000000000..c01e7cb46e
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/mutable/hashtable-bench.scala
@@ -0,0 +1,61 @@
+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
new file mode 100644
index 0000000000..bd75764636
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/Benchmarking.scala
@@ -0,0 +1,223 @@
+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
new file mode 100644
index 0000000000..e8dfe0ac50
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/Bench.scala
@@ -0,0 +1,126 @@
+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 overidden 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
new file mode 100644
index 0000000000..39232122a9
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/Arrays.scala
@@ -0,0 +1,63 @@
+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
new file mode 100644
index 0000000000..56af7b9d85
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/Dummy.scala
@@ -0,0 +1,22 @@
+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
new file mode 100644
index 0000000000..81f0e4da03
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/IntAccess.scala
@@ -0,0 +1,68 @@
+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
new file mode 100644
index 0000000000..29251f3719
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/ObjectAccess.scala
@@ -0,0 +1,75 @@
+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
new file mode 100644
index 0000000000..e6feb59fcd
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/Resetting.scala
@@ -0,0 +1,39 @@
+package scala.collection.parallel.benchmarks.arrays
+
+
+import scala.collection.parallel.benchmarks._
+
+
+abstract class Resetting[T: Manifest](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
new file mode 100644
index 0000000000..46a28ae111
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/UnknownManif.scala
@@ -0,0 +1,38 @@
+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
new file mode 100644
index 0000000000..3b5308f8c2
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/generic/Dummy.scala
@@ -0,0 +1,83 @@
+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
new file mode 100644
index 0000000000..539e3f6972
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/generic/Operators.scala
@@ -0,0 +1,64 @@
+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
new file mode 100644
index 0000000000..c39c384927
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/generic/ParallelBenches.scala
@@ -0,0 +1,362 @@
+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
new file mode 100644
index 0000000000..17f0315103
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtables/ParallelHashTableSets.scala
@@ -0,0 +1,144 @@
+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
new file mode 100644
index 0000000000..79d038bf3d
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtables/ParallelHashTables.scala
@@ -0,0 +1,232 @@
+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
new file mode 100644
index 0000000000..96598840fd
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Combine.scala
@@ -0,0 +1,66 @@
+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
new file mode 100644
index 0000000000..f65a349ec5
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Construct.scala
@@ -0,0 +1,54 @@
+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
new file mode 100644
index 0000000000..f53ea02e36
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Foreach.scala
@@ -0,0 +1,45 @@
+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
new file mode 100644
index 0000000000..79ebd0e98c
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/IntInit.scala
@@ -0,0 +1,31 @@
+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
new file mode 100644
index 0000000000..d27aa200b8
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Iterate.scala
@@ -0,0 +1,51 @@
+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
new file mode 100644
index 0000000000..4ee8c17118
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Lookup.scala
@@ -0,0 +1,57 @@
+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
new file mode 100644
index 0000000000..c08d6b5cad
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/MultipleCombine.scala
@@ -0,0 +1,87 @@
+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
new file mode 100644
index 0000000000..dc8804cf57
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/ParallelHashTries.scala
@@ -0,0 +1,180 @@
+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
new file mode 100644
index 0000000000..9cc1f4a0f6
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/misc/Coder.scala
@@ -0,0 +1,162 @@
+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 mnemnonics 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 mnemnonics 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
new file mode 100644
index 0000000000..e6ff55d234
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/misc/Dictionary.scala
@@ -0,0 +1,13 @@
+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
new file mode 100644
index 0000000000..c7e4723e64
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/misc/Loader.scala
@@ -0,0 +1,66 @@
+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
new file mode 100644
index 0000000000..46e95c907f
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/misc/dict.txt
@@ -0,0 +1,58111 @@
+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
new file mode 100644
index 0000000000..2eaddd7572
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/AggregateLight.scala
@@ -0,0 +1,39 @@
+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
new file mode 100644
index 0000000000..f5d6c75abb
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/Companion.scala
@@ -0,0 +1,9 @@
+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
new file mode 100644
index 0000000000..033921d451
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/CopyToArray.scala
@@ -0,0 +1,21 @@
+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
new file mode 100644
index 0000000000..c9b3f07ff3
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/Corresponds.scala
@@ -0,0 +1,47 @@
+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
new file mode 100644
index 0000000000..7438be8447
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/CountHeavy.scala
@@ -0,0 +1,36 @@
+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
new file mode 100644
index 0000000000..21c64358b4
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/CountLight.scala
@@ -0,0 +1,22 @@
+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
new file mode 100644
index 0000000000..9c6ac19229
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/CountList.scala
@@ -0,0 +1,30 @@
+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
new file mode 100644
index 0000000000..4b27569239
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/DiffHalf.scala
@@ -0,0 +1,48 @@
+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
new file mode 100644
index 0000000000..443ef2b500
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/DropMany.scala
@@ -0,0 +1,47 @@
+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
new file mode 100644
index 0000000000..2749216735
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ExistsLight.scala
@@ -0,0 +1,49 @@
+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
new file mode 100644
index 0000000000..d4c8395951
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/FilterLight.scala
@@ -0,0 +1,64 @@
+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
new file mode 100644
index 0000000000..f08ddf29e3
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/FindLight.scala
@@ -0,0 +1,52 @@
+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
new file mode 100644
index 0000000000..01ecbbf016
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/FlatMapLight.scala
@@ -0,0 +1,24 @@
+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
new file mode 100644
index 0000000000..0d61e5aeb5
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForallHeavy.scala
@@ -0,0 +1,59 @@
+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
new file mode 100644
index 0000000000..19671d2bc4
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForallLight.scala
@@ -0,0 +1,46 @@
+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
new file mode 100644
index 0000000000..624266e49d
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForallQuickStop.scala
@@ -0,0 +1,46 @@
+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
new file mode 100644
index 0000000000..c7462ed04b
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForallStop80k.scala
@@ -0,0 +1,46 @@
+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
new file mode 100644
index 0000000000..d1a3f8085c
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForeachHeavy.scala
@@ -0,0 +1,45 @@
+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
new file mode 100644
index 0000000000..3d0c5c45c4
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForeachLight.scala
@@ -0,0 +1,26 @@
+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
new file mode 100644
index 0000000000..a90227a6e4
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/GroupBy.scala
@@ -0,0 +1,45 @@
+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
new file mode 100644
index 0000000000..3a22bdd1db
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/IndexWhere.scala
@@ -0,0 +1,47 @@
+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
new file mode 100644
index 0000000000..e429fb288e
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/IntersectHalf.scala
@@ -0,0 +1,48 @@
+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
new file mode 100644
index 0000000000..427afa5571
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/LastIndexWhere.scala
@@ -0,0 +1,47 @@
+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
new file mode 100644
index 0000000000..1451f6a57a
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/MapLight.scala
@@ -0,0 +1,27 @@
+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
new file mode 100644
index 0000000000..5f902ff483
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/MatrixMultiplication.scala
@@ -0,0 +1,84 @@
+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], man: Manifest[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], man: Manifest[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
new file mode 100644
index 0000000000..a51b5d6176
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/MinLight.scala
@@ -0,0 +1,28 @@
+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
new file mode 100644
index 0000000000..f8a985c349
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PadToDouble.scala
@@ -0,0 +1,53 @@
+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
new file mode 100644
index 0000000000..57f8536b9e
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PartialMapLight.scala
@@ -0,0 +1,24 @@
+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
new file mode 100644
index 0000000000..b99a25b285
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PartitionLight.scala
@@ -0,0 +1,61 @@
+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
new file mode 100644
index 0000000000..55cc71f129
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PatchHalf.scala
@@ -0,0 +1,46 @@
+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
new file mode 100644
index 0000000000..2574621212
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PlusPlus.scala
@@ -0,0 +1,29 @@
+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
new file mode 100644
index 0000000000..dd660ba8e0
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReduceHeavy.scala
@@ -0,0 +1,22 @@
+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
new file mode 100644
index 0000000000..f1f2a32403
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReduceLight.scala
@@ -0,0 +1,50 @@
+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
new file mode 100644
index 0000000000..f095797d1c
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReduceList.scala
@@ -0,0 +1,53 @@
+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
new file mode 100644
index 0000000000..1cf4f4169a
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReduceNew.scala
@@ -0,0 +1,30 @@
+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
new file mode 100644
index 0000000000..8fb90981ac
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReducePrime.scala
@@ -0,0 +1,65 @@
+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
new file mode 100644
index 0000000000..feb1bd9466
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/RemoveDuplicates.scala
@@ -0,0 +1,44 @@
+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
new file mode 100644
index 0000000000..b4403fcb9c
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/Resettable.scala
@@ -0,0 +1,127 @@
+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
new file mode 100644
index 0000000000..ec690d4b2d
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/Reverse.scala
@@ -0,0 +1,35 @@
+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
new file mode 100644
index 0000000000..47ae108c45
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReverseMap.scala
@@ -0,0 +1,48 @@
+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
new file mode 100644
index 0000000000..d22c4df661
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SameElementsLong.scala
@@ -0,0 +1,45 @@
+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
new file mode 100644
index 0000000000..d0ddf9f70e
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ScanLight.scala
@@ -0,0 +1,46 @@
+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
new file mode 100644
index 0000000000..a60ba7aa33
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ScanMedium.scala
@@ -0,0 +1,55 @@
+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
new file mode 100644
index 0000000000..8fae899b45
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SegmentLength.scala
@@ -0,0 +1,42 @@
+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
new file mode 100644
index 0000000000..ba32036002
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SequentialOps.scala
@@ -0,0 +1,562 @@
+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 = occurences(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 = occurences(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 occurences(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
new file mode 100644
index 0000000000..450d640b8d
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SliceFew.scala
@@ -0,0 +1,47 @@
+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
new file mode 100644
index 0000000000..4a30b60e1f
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SliceMany.scala
@@ -0,0 +1,47 @@
+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
new file mode 100644
index 0000000000..e16002f15d
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SliceMedium.scala
@@ -0,0 +1,47 @@
+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
new file mode 100644
index 0000000000..5f1e631bce
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SpanLight.scala
@@ -0,0 +1,62 @@
+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
new file mode 100644
index 0000000000..ff1e009481
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SplitHalf.scala
@@ -0,0 +1,47 @@
+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
new file mode 100644
index 0000000000..6ed6d14370
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SumLight.scala
@@ -0,0 +1,28 @@
+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
new file mode 100644
index 0000000000..9ddfb77a9d
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/TakeMany.scala
@@ -0,0 +1,47 @@
+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
new file mode 100644
index 0000000000..a86c67d0d8
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/TakeWhileLight.scala
@@ -0,0 +1,61 @@
+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
new file mode 100644
index 0000000000..af852ce992
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_range/RangeBenches.scala
@@ -0,0 +1,211 @@
+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
new file mode 100644
index 0000000000..1c1cd52120
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_view/SeqViewBenches.scala
@@ -0,0 +1,51 @@
+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
new file mode 100644
index 0000000000..a4d310e6d1
--- /dev/null
+++ b/test/benchmarks/src/scala/util/HashSpeedTest.scala
@@ -0,0 +1,253 @@
+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/checker-tests/fail1.scala b/test/checker-tests/fail1.scala
new file mode 100644
index 0000000000..b70a37d9cd
--- /dev/null
+++ b/test/checker-tests/fail1.scala
@@ -0,0 +1,17 @@
+case class DebugParam[T](param: T)
+
+// TypeStack init: REFERENCE(type AnyRef)
+// [Now checking: typer]
+// [check: typer] work/fail1.scala:1: trees differ
+// old: T [Trees$Ident] (tpe = T)
+// new: T [Trees$TypeTree] (tpe = T)
+// [check: typer] work/fail1.scala:1: trees differ
+// old: DebugParam[T] [Trees$AppliedTypeTree] (tpe = null)
+// new: DebugParam[T] [Trees$TypeTree] (tpe = DebugParam[T])
+// Exception in thread "main" java.lang.NullPointerException
+// at scala.tools.nsc.typechecker.Typers$Typer.typedTypeConstructor(Typers.scala:4337)
+// at scala.tools.nsc.typechecker.Typers$Typer.typedTypeConstructor(Typers.scala:4358)
+// at scala.tools.nsc.typechecker.Typers$Typer.typedNew$1(Typers.scala:3240)
+// at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:3994)
+// at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:4223)
+// at scala.tools.nsc.typechecker.TreeCheckers$TreeChecker.scala$tools$nsc$typechecker$TreeCheckers$TreeChecker$$super$typed(TreeCheckers.scala:101)
diff --git a/test/checker-tests/fail10.scala b/test/checker-tests/fail10.scala
new file mode 100644
index 0000000000..c4aac71295
--- /dev/null
+++ b/test/checker-tests/fail10.scala
@@ -0,0 +1,23 @@
+class ClassCounts extends scala.collection.mutable.HashMap[Class[_], Int] { }
+
+class A {
+ def f(xs: ClassCounts) {
+ // ok
+ xs(getClass) = xs(getClass) + 1
+ // not ok
+ xs(getClass) += 1
+ }
+}
+
+// [Not checkable: parser]
+// [Not checkable: namer]
+// [Not checkable: packageobjects]
+// [Now checking: typer]
+// test/checker-tests/fail10.scala:8: error:
+// **** ERROR DURING INTERNAL CHECKING ****
+// type mismatch;
+// found : java.lang.Class[?0(in value ev$1)] where type ?0(in value ev$1)
+// required: java.lang.Class[?0(in method f)] where type ?0(in method f)
+// xs(getClass) += 1
+// ^
+// one error found
diff --git a/test/checker-tests/fail12.scala b/test/checker-tests/fail12.scala
new file mode 100644
index 0000000000..27c212ac65
--- /dev/null
+++ b/test/checker-tests/fail12.scala
@@ -0,0 +1,20 @@
+class A {
+ def f(b: Boolean) = {
+ locally {
+ while (b == false) ()
+ // or:
+ // do () while (b == false)
+ }
+ }
+}
+//
+// [Now checking: erasure]
+// [check: erasure] New symbols: BoxedUnit UNIT runtime scala
+// /tmp/fail.scala:4: error:
+// **** ERROR DURING INTERNAL CHECKING ****
+// type mismatch;
+// found : scala.runtime.BoxedUnit
+// required: Unit
+// while (b == false) ()
+// ^
+// one error found
diff --git a/test/checker-tests/fail2.scala b/test/checker-tests/fail2.scala
new file mode 100644
index 0000000000..63672208db
--- /dev/null
+++ b/test/checker-tests/fail2.scala
@@ -0,0 +1,50 @@
+// CC#9248 is conspicuously absent from the printed trees at every phase.
+class A {
+ def f[A, CC[X] <: Traversable[X]](): Unit = ()
+}
+
+// % work/check all -uniqid -Xprint:typer work/fail2.scala
+//
+// TypeStack init: REFERENCE(type AnyRef#2783)
+// [Not checkable: parser]
+// [Not checkable: namer]
+// [Not checkable: packageobjects]
+// [[syntax trees at end of typer]]// Scala source: fail2.scala
+// package <empty>#3 {
+// class A#9239 extends java.lang.Object#2488 with ScalaObject#1481 {
+// def this#9243(): A#9239 = {
+// A#9239.super.this#5850();
+// ()
+// };
+// def f#9244[A#9245 >: Nothing#5846 <: Any#46, CC#9246[X#11055 >: Nothing#5846 <: Any#46] >: [X#11055]Nothing#5846 <: [X#11055]Traversable#3199[X#11055]](): Unit#3819 = ()
+// }
+// }
+//
+// [Now checking: typer]
+// [check: typer] work/fail2.scala:3: Expected owner type CC#9248, found type CC#9246: Trees$TypeDef / type X#11055>: Nothing#5846 <: Any#46
+// [Now checking: superaccessors]
+// [check: superaccessors] work/fail2.scala:3: Expected owner type CC#9248, found type CC#9246: Trees$TypeDef / type X#11055>: Nothing#5846 <: Any#46
+// [Now checking: pickler]
+// [check: pickler] work/fail2.scala:3: Expected owner type CC#9248, found type CC#9246: Trees$TypeDef / type X#11055>: Nothing#5846 <: Any#46
+// [Now checking: refchecks]
+// [check: refchecks] work/fail2.scala:3: Expected owner type CC#9248, found type CC#9246: Trees$TypeDef / type X#11055>: Nothing#5846 <: Any#46
+// [Now checking: selectiveanf]
+// [check: selectiveanf] work/fail2.scala:3: Expected owner type CC#9248, found type CC#9246: Trees$TypeDef / type X#11055>: Nothing#5846 <: Any#46
+// [Now checking: liftcode]
+// [check: liftcode] work/fail2.scala:3: Expected owner type CC#9248, found type CC#9246: Trees$TypeDef / type X#11055>: Nothing#5846 <: Any#46
+// [Now checking: selectivecps]
+// [check: selectivecps] work/fail2.scala:3: Expected owner type CC#9248, found type CC#9246: Trees$TypeDef / type X#11055>: Nothing#5846 <: Any#46
+// [Now checking: uncurry]
+// [check: uncurry] work/fail2.scala:3: Expected owner type CC#9248, found type CC#9246: Trees$TypeDef / type X#11055>: Nothing#5846 <: Any#46
+// [Now checking: tailcalls]
+// [check: tailcalls] work/fail2.scala:3: Expected owner type CC#9248, found type CC#9246: Trees$TypeDef / type X#11055>: Nothing#5846 <: Any#46
+// [Not checkable: specialize]
+// [Not checkable: explicitouter]
+// [Now checking: erasure]
+// [Now checking: lazyvals]
+// [Now checking: lambdalift]
+// [Now checking: constructors]
+// [Now checking: flatten]
+// [Now checking: mixin]
+// [Now checking: cleanup]
+// ... \ No newline at end of file
diff --git a/test/checker-tests/fail6.scala b/test/checker-tests/fail6.scala
new file mode 100644
index 0000000000..a43bada400
--- /dev/null
+++ b/test/checker-tests/fail6.scala
@@ -0,0 +1,61 @@
+// BoxedUnit/Unit confusion involving while.
+//
+// Apply( // sym=method while$1, tpe=Unit, tpe.sym=class Unit, tpe.sym.owner=package scala
+// Ident("while$1"), // sym=method while$1, sym.owner=method f, sym.tpe=()Unit, tpe=()Unit, tpe.sym=<none>,
+class Erasure {
+ def f(b: Boolean) = {
+ if (b) "abc"
+ else while (b) ()
+ }
+}
+
+// % work/check all -Xprint:erasure work/fail6.scala
+// TypeStack init: REFERENCE(type AnyRef)
+// [Not checkable: parser]
+// [Not checkable: namer]
+// [Not checkable: packageobjects]
+// [Now checking: typer]
+// [Now checking: superaccessors]
+// [Now checking: pickler]
+// [Now checking: refchecks]
+// [Now checking: selectiveanf]
+// [Now checking: liftcode]
+// [Now checking: selectivecps]
+// [Now checking: uncurry]
+// [Now checking: tailcalls]
+// [Not checkable: specialize]
+// [Not checkable: explicitouter]
+// [[syntax trees at end of erasure]]// Scala source: fail6.scala
+// package <empty> {
+// class Erasure extends java.lang.Object with ScalaObject {
+// def this(): Erasure = {
+// Erasure.super.this();
+// ()
+// };
+// def f(b: Boolean): java.lang.Object = if (b)
+// "abc"
+// else
+// while$1(){
+// if (b)
+// {
+// ();
+// while$1()
+// }
+// else
+// ();
+// scala.runtime.BoxedUnit.UNIT
+// }
+// }
+// }
+//
+// [Now checking: erasure]
+// work/fail6.scala:4: error:
+// **** ERROR DURING INTERNAL CHECKING ****
+// type mismatch;
+// found : scala.runtime.BoxedUnit
+// required: Unit
+// else while (b) ()
+// ^
+// one error found
+//
+//
diff --git a/test/checker-tests/fail7.scala b/test/checker-tests/fail7.scala
new file mode 100644
index 0000000000..58db58e37d
--- /dev/null
+++ b/test/checker-tests/fail7.scala
@@ -0,0 +1,70 @@
+case class Foo(x: Int)
+
+// 1) Checking typer specifically:
+//
+// [Now checking: typer]
+// work/fail7.scala:1: error: double definition:
+// method canEqual:(x$1: Any)Boolean and
+// method canEqual:(x$1: Any)Boolean at line 1
+// have same type
+// case class Foo(x: Int)
+// ^
+//
+// 2) Checking all, which somehow misses it until superaccessors:
+//
+// [Not checkable: parser]
+// [Not checkable: namer]
+// [Not checkable: packageobjects]
+// [Now checking: typer]
+// [Now checking: superaccessors]
+// work/fail7.scala:1: error:
+// **** ERROR DURING INTERNAL CHECKING ****
+// method canEqual is defined twice
+// case class Foo(x: Int)
+// ^
+// one error found
+//
+// 3) Checking uncurry:
+//
+// [Now checking: uncurry]
+// work/fail7.scala:1: error: double definition:
+// method canEqual:(x$1: Any)Boolean and
+// method canEqual:(x$1: Any)Boolean at line 1
+// have same type
+// case class Foo(x: Int)
+// ^
+// exception when typing Foo.this.productArity()
+// Foo.this.productArity of type Int does not take parameters in file work/fail7.scala
+// scala.tools.nsc.symtab.Types$TypeError: Foo.this.productArity of type Int does not take parameters
+// at scala.tools.nsc.typechecker.Contexts$Context.error(Contexts.scala:277)
+// at scala.tools.nsc.typechecker.Infer$Inferencer.error(Infer.scala:205)
+// at scala.tools.nsc.typechecker.Infer$Inferencer.errorTree(Infer.scala:209)
+// at scala.tools.nsc.typechecker.Typers$Typer.doTypedApply(Typers.scala:2632)
+// at scala.tools.nsc.typechecker.Typers$Typer.typedApply$1(Typers.scala:3400)
+// at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:4069)
+// at scala.tools.nsc.transform.Erasure$Eraser.liftedTree1$1(Erasure.scala:663)
+// at scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:662)
+// at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:4223)
+// at scala.tools.nsc.typechecker.Typers$Typer.transformedOrTyped(Typers.scala:4368)
+// at scala.tools.nsc.typechecker.Typers$Typer.typedDefDef(Typers.scala:1796)
+//
+// 4) Checking constructors:
+//
+// [Now checking: constructors]
+// work/fail7.scala:1: error:
+// **** ERROR DURING INTERNAL CHECKING ****
+// value x in class Foo cannot be accessed in Foo
+// because of an internal error (no accessible symbol):
+// sym = value x
+// underlying(sym) = value x
+// pre = Foo
+// site = Foo.this
+// tree = Foo.this.x
+// sym.accessBoundary(sym.owner) = class Foo
+// sym.ownerChain = List(value x, class Foo, package <empty>, package <root>)
+// sym.owner.thisType = Foo
+// context.owner = package <empty>
+// context.outer.enclClass.owner = package <empty>
+// case class Foo(x: Int)
+// ^
+// one error found
diff --git a/test/files/jvm/bug680.check b/test/debug/buildmanager/.gitignore
index e69de29bb2..e69de29bb2 100644
--- a/test/files/jvm/bug680.check
+++ b/test/debug/buildmanager/.gitignore
diff --git a/test/debug/jvm/.gitignore b/test/debug/jvm/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/test/debug/jvm/.gitignore
diff --git a/test/debug/neg/.gitignore b/test/debug/neg/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/test/debug/neg/.gitignore
diff --git a/test/debug/pos/.gitignore b/test/debug/pos/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/test/debug/pos/.gitignore
diff --git a/test/debug/res/.gitignore b/test/debug/res/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/test/debug/res/.gitignore
diff --git a/test/debug/run/.gitignore b/test/debug/run/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/test/debug/run/.gitignore
diff --git a/test/debug/scalacheck/.gitignore b/test/debug/scalacheck/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/test/debug/scalacheck/.gitignore
diff --git a/test/debug/scalap/.gitignore b/test/debug/scalap/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/test/debug/scalap/.gitignore
diff --git a/test/debug/shootout/.gitignore b/test/debug/shootout/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/test/debug/shootout/.gitignore
diff --git a/test/files/script/loadAndExecute/loadAndExecute.check b/test/disabled-windows/script/loadAndExecute.check
index ccd8cd6e37..ccd8cd6e37 100644
--- a/test/files/script/loadAndExecute/loadAndExecute.check
+++ b/test/disabled-windows/script/loadAndExecute.check
diff --git a/test/files/script/loadAndExecute/lAndE1.scala b/test/disabled-windows/script/loadAndExecute/lAndE1.scala
index b20d1a9428..b20d1a9428 100755
--- a/test/files/script/loadAndExecute/lAndE1.scala
+++ b/test/disabled-windows/script/loadAndExecute/lAndE1.scala
diff --git a/test/files/script/loadAndExecute/lAndE2.scala b/test/disabled-windows/script/loadAndExecute/lAndE2.scala
index ea15a04d86..ea15a04d86 100755
--- a/test/files/script/loadAndExecute/lAndE2.scala
+++ b/test/disabled-windows/script/loadAndExecute/lAndE2.scala
diff --git a/test/files/script/loadAndExecute/loadAndExecute.scala b/test/disabled-windows/script/loadAndExecute/loadAndExecute.scala
index 2a9718382b..2a9718382b 100755
--- a/test/files/script/loadAndExecute/loadAndExecute.scala
+++ b/test/disabled-windows/script/loadAndExecute/loadAndExecute.scala
diff --git a/test/files/script/utf8.bat b/test/disabled-windows/script/utf8.bat
index 8bc5c886f7..8bc5c886f7 100755
--- a/test/files/script/utf8.bat
+++ b/test/disabled-windows/script/utf8.bat
diff --git a/test/files/script/utf8.check b/test/disabled-windows/script/utf8.check
index 29dc0518ff..29dc0518ff 100644
--- a/test/files/script/utf8.check
+++ b/test/disabled-windows/script/utf8.check
diff --git a/test/disabled-windows/script/utf8.scala b/test/disabled-windows/script/utf8.scala
new file mode 100755
index 0000000000..5dfade0bb2
--- /dev/null
+++ b/test/disabled-windows/script/utf8.scala
@@ -0,0 +1,26 @@
+#!/bin/sh
+#
+# Checks if UTF-8 output makes it through unmangled.
+
+cygwin=false;
+case "`uname`" in
+ CYGWIN*) cygwin=true ;;
+esac
+
+SOURCE="$0";
+if $cygwin; then
+ if [ "$OS" = "Windows_NT" ] && cygpath -m .>/dev/null 2>/dev/null ;
+then
+ format=mixed
+ else
+ format=windows
+ fi
+ SOURCE=`cygpath --$format "$SOURCE"`;
+fi
+
+exec scala -Dfile.encoding="UTF-8" -nocompdaemon "$SOURCE" "$@"
+!#
+
+/*Comment Комментарий*/
+Console.println("QWERTY");
+Console.println("ЙЦУКЕН");
diff --git a/test/disabled/buildmanager/t2651_1/A.scala b/test/disabled/buildmanager/t2651_1/A.scala
new file mode 100644
index 0000000000..d712f6febe
--- /dev/null
+++ b/test/disabled/buildmanager/t2651_1/A.scala
@@ -0,0 +1 @@
+trait A[T]
diff --git a/test/disabled/buildmanager/t2651_1/B.scala b/test/disabled/buildmanager/t2651_1/B.scala
new file mode 100644
index 0000000000..a8aca3d0ed
--- /dev/null
+++ b/test/disabled/buildmanager/t2651_1/B.scala
@@ -0,0 +1,2 @@
+trait B[T] extends A[T]
+
diff --git a/test/disabled/buildmanager/t2651_1/C.scala b/test/disabled/buildmanager/t2651_1/C.scala
new file mode 100644
index 0000000000..690dcf518d
--- /dev/null
+++ b/test/disabled/buildmanager/t2651_1/C.scala
@@ -0,0 +1,3 @@
+object C {
+ new A[Int] {}
+}
diff --git a/test/disabled/buildmanager/t2651_1/D.scala b/test/disabled/buildmanager/t2651_1/D.scala
new file mode 100644
index 0000000000..51273ad986
--- /dev/null
+++ b/test/disabled/buildmanager/t2651_1/D.scala
@@ -0,0 +1,3 @@
+object D {
+ def x[T](a: A[T]) = a
+}
diff --git a/test/disabled/buildmanager/t2651_1/t2651_1.changes/A2.scala b/test/disabled/buildmanager/t2651_1/t2651_1.changes/A2.scala
new file mode 100644
index 0000000000..574b522149
--- /dev/null
+++ b/test/disabled/buildmanager/t2651_1/t2651_1.changes/A2.scala
@@ -0,0 +1,2 @@
+trait A
+
diff --git a/test/disabled/buildmanager/t2651_1/t2651_1.check b/test/disabled/buildmanager/t2651_1/t2651_1.check
new file mode 100644
index 0000000000..8d2cbc8194
--- /dev/null
+++ b/test/disabled/buildmanager/t2651_1/t2651_1.check
@@ -0,0 +1,19 @@
+builder > A.scala B.scala C.scala D.scala
+compiling Set(A.scala, B.scala, C.scala, D.scala)
+Changes: Map()
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map(trait A -> List(Changed(Class(A))[ tparams: List()]))
+invalidate B.scala because parents have changed [Changed(Class(A))[ tparams: List()]]
+invalidate C.scala because parents have changed [Changed(Class(A))[ tparams: List()]]
+invalidate D.scala because it references changed class [Changed(Class(A))[ tparams: List()]]
+compiling Set(B.scala, C.scala, D.scala)
+B.scala:1: error: A does not take type parameters
+trait B[T] extends A[T]
+ ^
+C.scala:2: error: A does not take type parameters
+ new A[Int] {}
+ ^
+D.scala:2: error: A does not take type parameters
+ def x[T](a: A[T]) = a
+ ^
diff --git a/test/disabled/buildmanager/t2651_1/t2651_1.test b/test/disabled/buildmanager/t2651_1/t2651_1.test
new file mode 100644
index 0000000000..4f67d5e233
--- /dev/null
+++ b/test/disabled/buildmanager/t2651_1/t2651_1.test
@@ -0,0 +1,3 @@
+>>compile A.scala B.scala C.scala D.scala
+>>update A.scala=>A2.scala
+>>compile A.scala
diff --git a/test/disabled/coder/Coder.scala b/test/disabled/coder/Coder.scala
new file mode 100644
index 0000000000..4e29c2a6ee
--- /dev/null
+++ b/test/disabled/coder/Coder.scala
@@ -0,0 +1,212 @@
+
+
+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 mnemnonics 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, List[String]] =
+ words groupBy wordCode withDefaultValue List()
+
+ val memo = collection.mutable.Map[String, Set[List[String]]]("" -> Set(List()))
+ val wfnmemo = collection.mutable.Map[(String, String), Set[List[String]]]()
+ val subsmemo = collection.mutable.Map[(String, String, String), Set[List[String]]]()
+
+ /** All ways to encode a number as a list of words */
+ def encode(number: String): Set[List[String]] =
+ if (number.isEmpty) Set(List())
+ 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)
+ val subsmapped = subs.map(rest => word :: rest)
+ subsmemo += (number, number drop split, word) -> subsmapped
+ subsmapped
+ })
+ wfnmemo += (number, number take split) -> wfn.toSet
+ wfn
+ })
+ memo += number -> r
+ r
+ }
+
+ /** Maps a number to a list of all word phrases that can
+ * represent it */
+ def translate(number: String): Set[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 mnemnonics 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, List[String]] =
+ words groupBy wordCode withDefaultValue List()
+
+ val comparison = new SeqCoder(words)
+
+ /** All ways to encode a number as a list of words */
+ def encode(number: String): ParSet[List[String]] =
+ if (number.isEmpty) ParSet(List())
+ else {
+ val splits = (1 to number.length).toSet.par
+ // 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)
+ assertNumber(number drop split, subs)
+ val subsmapped = subs.map(rest => word :: rest)
+ assertSubs(number, number drop split, word, subsmapped)
+ subsmapped.toList
+ })
+ assertWfn(number, number take split, number drop split, wfn)
+ wfn
+ })
+ assertNumber(number, r)
+ r
+ }
+
+ def assertSubs(num: String, subsfrom: String, word: String, r: ParSet[List[String]]) {
+ val m = comparison.subsmemo((num, subsfrom, word))
+ if (r != m) {
+ println("map for number from subs and word: " + num + ", " + subsfrom + ", " + word)
+ println("parset: " + r.size)
+ println("memoed: " + m.size)
+ error("r != m")
+ }
+ }
+
+ def assertWfn(num: String, split: String, dropped: String, r: List[List[String]]) {
+ val m = comparison.wfnmemo((num, split))
+ val rs = r.toSet
+ val words: List[String] = wordsForNum(split)
+ if (rs != m) {
+ println("flatmap for number with split: " + num + ", " + split)
+ println("words for: " + words)
+ println("parset: " + rs.size)
+ println("memoed: " + m.size)
+ println("retrying...")
+ for (i <- 0 until 30) {
+ val r2: List[List[String]] = words.flatMap(word => {
+ val subs: ParSet[List[String]] = encode(dropped)
+ println("subs size for '" + dropped + "': " + subs.size)
+ val subsmapped: ParSet[List[String]] = subs.map(rest => word :: rest)
+ println("map size: " + subsmapped.size)
+ subsmapped.toList
+ })
+ println(i + ") retry size: " + r2.size)
+ }
+ error("rs != m")
+ }
+ }
+
+ def assertNumber(num: String, r: ParSet[List[String]]) {
+ val m = comparison.memo(num)
+ if (r != m) {
+ println("for number: " + num)
+ println("parset: " + r.size)
+ println("memoed: " + m.size)
+ error("r != m")
+ }
+ }
+
+ /** Maps a number to a list of all word phrases that can
+ * represent it */
+ def translate(number: String): ParSet[String] = {
+ comparison.translate(number)
+ encode(number) map (_ mkString " ")
+ }
+
+ def ??? : Nothing = throw new UnsupportedOperationException
+}
+
+
+/** Test code */
+object Test {
+ val code = "2328437472947"//36262633"//837976"//"6477323986225453446"
+ //val code = "747294736262633"
+
+ /* */
+ def main(args : Array[String]) {
+ // import scala.concurrent.forkjoin.ForkJoinPool
+ // collection.parallel.tasksupport.environment match {
+ // case fj: ForkJoinPool => fj.setParallelism(1)
+ // }
+ // println(collection.parallel.tasksupport.parallelismLevel)
+
+ for (i <- 0 until 10) {
+ val seqcoder = new SeqCoder(Dictionary.wordlist)
+ val st = seqcoder.translate(code)
+ //println("Translation check: " + st.size)
+
+ val parcoder = new ParCoder(Dictionary.wordlist)
+ val pt = parcoder.translate(code)
+ //println("Translation check: " + pt.size)
+
+ // val st = sts.toList.sorted
+ // val pt = pts.toList.sorted
+ if (st.size != pt.size) {
+ // val zipped = st.zip(pt)
+ // val ind = zipped.indexWhere { case (a, b) => a != b }
+ // val sliced = zipped.slice(ind - 10, ind + 10)
+ // println(sliced.map(t => t._1 + "\n" + t._2 + "\n--------").mkString("\n"))
+ println(i + ") seq vs par: " + st.size + " vs " + pt.size)
+ }
+ assert(st == pt)
+ }
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/disabled/coder/Dictionary.scala b/test/disabled/coder/Dictionary.scala
new file mode 100644
index 0000000000..7b354b9aa8
--- /dev/null
+++ b/test/disabled/coder/Dictionary.scala
@@ -0,0 +1,10 @@
+
+
+
+
+
+object Dictionary {
+ val wordlist = wordlines.split(System.getProperty("line.separator")).filter(_.trim != "").toList
+ val wordarray = wordlist.toArray
+ def wordlines = scala.io.Source.fromFile("test/files/run/coder/dict.txt").mkString
+}
diff --git a/test/disabled/coder/dict.txt b/test/disabled/coder/dict.txt
new file mode 100644
index 0000000000..46e95c907f
--- /dev/null
+++ b/test/disabled/coder/dict.txt
@@ -0,0 +1,58111 @@
+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/files/jvm/JavaInteraction.check b/test/disabled/jvm/JavaInteraction.check
index fb9d3cdd8c..fb9d3cdd8c 100644
--- a/test/files/jvm/JavaInteraction.check
+++ b/test/disabled/jvm/JavaInteraction.check
diff --git a/test/disabled/jvm/JavaInteraction.scala b/test/disabled/jvm/JavaInteraction.scala
new file mode 100644
index 0000000000..65e3c5cb40
--- /dev/null
+++ b/test/disabled/jvm/JavaInteraction.scala
@@ -0,0 +1,38 @@
+//############################################################################
+// Test Java interaction
+//############################################################################
+
+import java.awt.Color;
+import java.awt.Point;
+
+class ColoredPoint(x: Int, y: Int, c_ : Color) extends Point(x, y) {
+ val c: Color = c_;
+ def getC(): Color = c;
+}
+
+object Test {
+ val expected = """
+p.x = 5
+p.c = java.awt.Color[r=255,g=0,b=0]
+p.getX() = 5.0
+p.getC() = java.awt.Color[r=255,g=0,b=0]
+ """.trim
+
+ def connect() = {
+ val p = new ColoredPoint(5, 7, Color.RED);
+ List(
+ "p.x = " + p.x,
+ "p.c = " + p.c,
+ "p.getX() = " + p.getX(),
+ "p.getC() = " + p.getC()
+ ).mkString("\n")
+ }
+
+ // This test would pointlessly fail the whole build anytime the account
+ // running the test could not connect to the windowing server. The below
+ // is intended to defend against this outcome.
+ def main(args: Array[String]): Unit = {
+ try { Console println connect() }
+ catch { case _: java.lang.InternalError => Console println expected }
+ }
+}
diff --git a/test/disabled/jvm/libnatives.jnilib b/test/disabled/jvm/libnatives.jnilib
deleted file mode 100644
index daac50e3df..0000000000
--- a/test/disabled/jvm/libnatives.jnilib
+++ /dev/null
Binary files differ
diff --git a/test/disabled/neg/abstract-report3.check b/test/disabled/neg/abstract-report3.check
new file mode 100644
index 0000000000..ac3f4abd5a
--- /dev/null
+++ b/test/disabled/neg/abstract-report3.check
@@ -0,0 +1,39 @@
+abstract-report3.scala:1: error: class Foo needs to be abstract, since:
+it has 25 unimplemented members.
+/** As seen from class Foo, the missing signatures are as follows.
+ * For convenience, these are usable as stub implementations.
+ */
+ // Members declared in java.util.concurrent.BlockingQueue
+ def add(x$1: T): Boolean = ???
+ def contains(x$1: Any): Boolean = ???
+ def drainTo(x$1: java.util.Collection[_ >: T],x$2: Int): Int = ???
+ def drainTo(x$1: java.util.Collection[_ >: T]): Int = ???
+ def offer(x$1: T,x$2: Long,x$3: java.util.concurrent.TimeUnit): Boolean = ???
+ def offer(x$1: T): Boolean = ???
+ def poll(x$1: Long,x$2: java.util.concurrent.TimeUnit): T = ???
+ def put(x$1: T): Unit = ???
+ def remainingCapacity(): Int = ???
+ def remove(x$1: Any): Boolean = ???
+ def take(): T = ???
+
+ // Members declared in java.util.Collection
+ def addAll(x$1: java.util.Collection[_ <: T]): Boolean = ???
+ def clear(): Unit = ???
+ def containsAll(x$1: java.util.Collection[_]): Boolean = ???
+ def isEmpty(): Boolean = ???
+ def iterator(): java.util.Iterator[T] = ???
+ def removeAll(x$1: java.util.Collection[_]): Boolean = ???
+ def retainAll(x$1: java.util.Collection[_]): Boolean = ???
+ def size(): Int = ???
+ def toArray[T](x$1: Array[T with Object]): Array[T with Object] = ???
+ def toArray(): Array[Object] = ???
+
+ // Members declared in java.util.Queue
+ def element(): T = ???
+ def peek(): T = ???
+ def poll(): T = ???
+ def remove(): T = ???
+
+class Foo[T] extends java.util.concurrent.BlockingQueue[T] { }
+ ^
+one error found
diff --git a/test/disabled/neg/abstract-report3.scala b/test/disabled/neg/abstract-report3.scala
new file mode 100644
index 0000000000..d3cce86a6b
--- /dev/null
+++ b/test/disabled/neg/abstract-report3.scala
@@ -0,0 +1 @@
+class Foo[T] extends java.util.concurrent.BlockingQueue[T] { } \ No newline at end of file
diff --git a/test/disabled/pos/caseclass-parents.flags b/test/disabled/pos/caseclass-parents.flags
new file mode 100644
index 0000000000..e1b37447c9
--- /dev/null
+++ b/test/disabled/pos/caseclass-parents.flags
@@ -0,0 +1 @@
+-Xexperimental \ No newline at end of file
diff --git a/test/disabled/pos/caseclass-parents.scala b/test/disabled/pos/caseclass-parents.scala
new file mode 100644
index 0000000000..d4bc52154b
--- /dev/null
+++ b/test/disabled/pos/caseclass-parents.scala
@@ -0,0 +1,11 @@
+case class Foo() extends Serializable
+case object Bar extends Serializable
+
+case class Bippy[T, U](x: T, y: U) extends Product2[T, U] { }
+
+case class Bounded[T <: util.Random, U <: util.Random](x: T, y: U) { }
+
+class A {
+ def f(x: Bounded[_, _]) = x.productIterator foreach g
+ def g(rand: util.Random) = ()
+} \ No newline at end of file
diff --git a/test/disabled/pos/caseclass-productN.flags b/test/disabled/pos/caseclass-productN.flags
new file mode 100644
index 0000000000..e1b37447c9
--- /dev/null
+++ b/test/disabled/pos/caseclass-productN.flags
@@ -0,0 +1 @@
+-Xexperimental \ No newline at end of file
diff --git a/test/disabled/pos/caseclass-productN.scala b/test/disabled/pos/caseclass-productN.scala
new file mode 100644
index 0000000000..e2177856fd
--- /dev/null
+++ b/test/disabled/pos/caseclass-productN.scala
@@ -0,0 +1,20 @@
+object Test {
+ class A
+ class B extends A
+ class C extends B
+
+ case class Bippy[T](x: Int, y: List[T], z: T) { }
+ case class Bippy2[T](x: Int, y: List[T], z: T) { }
+
+ def bippies = List(
+ Bippy(5, List(new C), new B),
+ Bippy2(5, List(new B), new C)
+ )
+
+ def bmethod(x: B) = ()
+
+ def main(args: Array[String]): Unit = {
+ bippies flatMap (_._2) foreach bmethod
+ bippies map (_._3) foreach bmethod
+ }
+}
diff --git a/test/files/pos/spec-List.scala b/test/disabled/pos/spec-List.scala
index 17291fae56..81e55f46cb 100644
--- a/test/files/pos/spec-List.scala
+++ b/test/disabled/pos/spec-List.scala
@@ -1,6 +1,6 @@
/* __ *\
** ________ ___ / / ___ Scala API **
-** / __/ __// _ | / / / _ | (c) 2003-2009, LAMP/EPFL **
+** / __/ __// _ | / / / _ | (c) 2003-2011, LAMP/EPFL **
** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ **
** /____/\___/_/ |_/____/_/ | | **
** |/ **
@@ -23,10 +23,10 @@ import annotation.tailrec
* @author Martin Odersky and others
* @version 2.8
*/
-sealed abstract class List[@specialized +A] extends LinearSeq[A]
- with Product
+sealed trait List[@specialized +A] extends LinearSeq[A]
+ with Product
with GenericTraversableTemplate[A, List]
- with LinearSeqLike[A, List[A]] {
+ with LinearSeqOptimized[A, List[A]] {
override def companion: GenericCompanion[List] = List
import scala.collection.{Iterable, Traversable, Seq}
@@ -65,7 +65,7 @@ sealed abstract class List[@specialized +A] extends LinearSeq[A]
/** <p>
* Returns a list resulting from the concatenation of the given
- * list <code>prefix</code> and this list.
+ * list <code>prefix</code> and this list.
* </p>
*
* @param prefix the list to concatenate at the beginning of this list.
@@ -140,29 +140,23 @@ sealed abstract class List[@specialized +A] extends LinearSeq[A]
}
// Overridden methods from IterableLike or overloaded variants of such methods
-
+
/** Create a new list which contains all elements of this list
* followed by all elements of Traversable `that'
*/
- override def ++[B >: A, That](that: Traversable[B])(implicit bf: CanBuildFrom[List[A], B, That]): That = {
+ override def ++[B >: A, That](xs: GenTraversableOnce[B])(implicit bf: CanBuildFrom[List[A], B, That]): That = {
val b = bf(this)
- if (b.isInstanceOf[ListBuffer[_]]) (this ::: that.toList).asInstanceOf[That]
- else super.++(that)
+ if (b.isInstanceOf[ListBuffer[_]]) (this ::: xs.toList).asInstanceOf[That]
+ else super.++(xs)
}
- /** Create a new list which contains all elements of this list
- * followed by all elements of Iterator `that'
- */
- override def ++[B >: A, That](that: Iterator[B])(implicit bf: CanBuildFrom[List[A], B, That]): That =
- this ++ that.toList
-
/** Overrides the method in Iterable for efficiency.
*
* @return the list itself
*/
override def toList: List[A] = this
- /** Returns the <code>n</code> first elements of this list, or else the whole
+ /** Returns the <code>n</code> first elements of this list, or else the whole
* list, if it has less than <code>n</code> elements.
* @param n the number of elements to take.
@@ -222,7 +216,7 @@ sealed abstract class List[@specialized +A] extends LinearSeq[A]
}
loop(drop(n), this)
}
-
+
// dropRight is inherited from Stream
/** Split the list at a given point and return the two parts thus
@@ -308,7 +302,7 @@ sealed abstract class List[@specialized +A] extends LinearSeq[A]
override def stringPrefix = "List"
- override def toStream : Stream[A] =
+ override def toStream : Stream[A] =
if (isEmpty) Stream.Empty
else new Stream.Cons(head, tail.toStream)
@@ -493,10 +487,10 @@ final case class ::[@specialized B](private var hd: B, private[scala] var tl: Li
* @version 2.8
*/
object List extends SeqFactory[List] {
-
+
import collection.{Iterable, Seq}
- implicit def builderFactory[A]: CanBuildFrom[Coll, A, List[A]] =
+ implicit def builderFactory[A]: CanBuildFrom[Coll, A, List[A]] =
new GenericCanBuildFrom[A] {
override def apply() = newBuilder[A]
}
@@ -558,8 +552,8 @@ object List extends SeqFactory[List] {
* @return the concatenation of all the lists
*/
@deprecated("use `xss.flatten' instead")
- def flatten[A](xss: List[List[A]]): List[A] = {
- val b = new ListBuffer[A]
+ def flatten[A](xss: List[List[A]]): List[A] = {
+ val b = new ListBuffer[A]
for (xs <- xss) {
var xc = xs
while (!xc.isEmpty) {
@@ -594,7 +588,7 @@ object List extends SeqFactory[List] {
* @return a pair of lists.
*/
@deprecated("use `xs.unzip' instead")
- def unzip[A,B](xs: Iterable[(A,B)]): (List[A], List[B]) =
+ def unzip[A,B](xs: Iterable[(A,B)]): (List[A], List[B]) =
xs.foldRight[(List[A], List[B])]((Nil, Nil)) {
case ((x, y), (xs, ys)) => (x :: xs, y :: ys)
}
@@ -604,17 +598,17 @@ object List extends SeqFactory[List] {
* of <code>Either</code>s.
*/
@deprecated("use `Either.lefts' instead")
- def lefts[A, B](es: Iterable[Either[A, B]]) =
+ def lefts[A, B](es: Iterable[Either[A, B]]) =
es.foldRight[List[A]](Nil)((e, as) => e match {
case Left(a) => a :: as
case Right(_) => as
- })
-
+ })
+
/**
* Returns the <code>Right</code> values in the given<code>Iterable</code> of <code>Either</code>s.
*/
@deprecated("use `Either.rights' instead")
- def rights[A, B](es: Iterable[Either[A, B]]) =
+ def rights[A, B](es: Iterable[Either[A, B]]) =
es.foldRight[List[B]](Nil)((e, bs) => e match {
case Left(_) => bs
case Right(b) => b :: bs
@@ -654,7 +648,7 @@ object List extends SeqFactory[List] {
*
* @param arr the array to convert
* @param start the first index to consider
- * @param len the lenght of the range to convert
+ * @param len the length of the range to convert
* @return a list that contains the same elements than <code>arr</code>
* in the same order
*/
@@ -745,7 +739,7 @@ object List extends SeqFactory[List] {
/** Returns the list resulting from applying the given function <code>f</code>
* to corresponding elements of the argument lists.
* @param f function to apply to each pair of elements.
- * @return <code>[f(a0,b0), ..., f(an,bn)]</code> if the lists are
+ * @return <code>[f(a0,b0), ..., f(an,bn)]</code> if the lists are
* <code>[a0, ..., ak]</code>, <code>[b0, ..., bl]</code> and
* <code>n = min(k,l)</code>
*/
@@ -788,7 +782,7 @@ object List extends SeqFactory[List] {
b.toList
}
- /** Tests whether the given predicate <code>p</code> holds
+ /** Tests whether the given predicate <code>p</code> holds
* for all corresponding elements of the argument lists.
*
* @param p function to apply to each pair of elements.
diff --git a/test/disabled/pos/t1545.scala b/test/disabled/pos/t1545.scala
new file mode 100755
index 0000000000..4c5908b8a1
--- /dev/null
+++ b/test/disabled/pos/t1545.scala
@@ -0,0 +1,18 @@
+// According to the spec this code should not be legal.
+// Disabling for now.
+object Main extends App {
+
+ case class Foo (field : Option[String])
+
+ val x : PartialFunction[Foo,Int] =
+ {
+ c => c.field match {
+ case Some (s) => 42
+ case None => 99
+ }
+ }
+
+ println (x (Foo (None))) // prints 99
+ println (x (Foo (Some ("foo")))) // prints 42
+
+}
diff --git a/test/disabled/pos/t1737/A.java b/test/disabled/pos/t1737/A.java
new file mode 100644
index 0000000000..ee87e29a35
--- /dev/null
+++ b/test/disabled/pos/t1737/A.java
@@ -0,0 +1,3 @@
+public interface A<T extends String> {
+ T get();
+} \ No newline at end of file
diff --git a/test/disabled/pos/t1737/B.java b/test/disabled/pos/t1737/B.java
new file mode 100644
index 0000000000..28a1907a04
--- /dev/null
+++ b/test/disabled/pos/t1737/B.java
@@ -0,0 +1 @@
+public abstract class B implements A {} \ No newline at end of file
diff --git a/test/disabled/pos/t1737/c.scala b/test/disabled/pos/t1737/c.scala
new file mode 100644
index 0000000000..782ec18b9e
--- /dev/null
+++ b/test/disabled/pos/t1737/c.scala
@@ -0,0 +1,4 @@
+class C extends B {
+ this: A[_] =>
+ def get = "foo"
+} \ No newline at end of file
diff --git a/test/disabled/pos/t2919.scala b/test/disabled/pos/t2919.scala
new file mode 100644
index 0000000000..5e51cf9de7
--- /dev/null
+++ b/test/disabled/pos/t2919.scala
@@ -0,0 +1,12 @@
+import javax.xml.bind.annotation.adapters.XmlAdapter
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter
+
+case class Link(
+ @XmlJavaTypeAdapter(classOf[StringOptionAdapter]) val title: Option[String]
+)
+
+class StringOptionAdapter extends XmlAdapter[String, Option[String]] {
+ def unmarshal(str: String) = error("stub")
+ def marshal(op: Option[String]) = error("Stub")
+}
+
diff --git a/test/disabled/presentation/akka.check b/test/disabled/presentation/akka.check
new file mode 100644
index 0000000000..9cd20ffb1c
--- /dev/null
+++ b/test/disabled/presentation/akka.check
@@ -0,0 +1,492 @@
+reload: Actor.scala, ActorRef.scala, ActorRegistry.scala, Actors.java, Address.scala, AkkaException.scala, AkkaLoader.scala, Bootable.scala, BootableActorLoaderService.scala, BoundedBlockingQueue.scala, Config.scala, ConfigParser.scala, Configuration.scala, Configurator.scala, Crypt.scala, DataFlow.scala, Dispatchers.scala, Duration.scala, EventHandler.scala, ExecutorBasedEventDrivenDispatcher.scala, ExecutorBasedEventDrivenWorkStealingDispatcher.scala, FSM.scala, Future.scala, HashCode.scala, Helpers.scala, Hex.java, Importer.scala, Iterators.scala, JavaAPI.scala, JavaEventHandler.java, ListenerManagement.scala, Listeners.scala, LockUtil.scala, MACAddressParser.java, MailboxHandling.scala, MessageHandling.scala, Pool.scala, ReflectiveAccess.scala, RemoteEventHandler.scala, RemoteInterface.scala, Routers.scala, Routing.scala, Scheduler.scala, SupervisionConfig.scala, Supervisor.scala, ThreadBasedDispatcher.scala, ThreadPoolBuilder.scala, UUID.java, UUIDGen.java, UUIDHelper.java, UUIDHolder.java, UntypedActor.scala, package.scala, package.scala, pi.scala
+
+askTypeCompletion at pi.scala(52,59)
+================================================================================
+[response] aksTypeCompletion at (52,59)
+retrieved 0 members
+
+================================================================================
+
+askTypeCompletion at pi.scala(55,25)
+================================================================================
+[response] aksTypeCompletion at (55,25)
+retrieved 45 members
+`class Broadcastakka.routing.Routing.Broadcast`
+`method !=(x$1: Any)Boolean`
+`method !=(x$1: AnyRef)Boolean`
+`method ##()Int`
+`method +(other: String)String`
+`method ->[B](y: B)(akka.routing.Routing.type, B)`
+`method ==(x$1: Any)Boolean`
+`method ==(x$1: AnyRef)Boolean`
+`method asInstanceOf[T0]=> T0`
+`method clone()Object`
+`method dispatcherActor(routing: akka.routing.Routing.PF[Any,akka.actor.ActorRef])akka.actor.ActorRef`
+`method dispatcherActor(routing: akka.routing.Routing.PF[Any,akka.actor.ActorRef], msgTransformer: Any => Any)akka.actor.ActorRef`
+`method ensuring(cond: Boolean)akka.routing.Routing.type`
+`method ensuring(cond: Boolean, msg: => Any)akka.routing.Routing.type`
+`method ensuring(cond: akka.routing.Routing.type => Boolean)akka.routing.Routing.type`
+`method ensuring(cond: akka.routing.Routing.type => Boolean, msg: => Any)akka.routing.Routing.type`
+`method eq(x$1: AnyRef)Boolean`
+`method equals(x$1: Any)Boolean`
+`method filter[A, B](filter: akka.routing.Routing.PF[A,Unit], filtered: akka.routing.Routing.PF[A,B])akka.routing.Routing.PF[A,B]`
+`method finalize()Unit`
+`method formatted(fmtstr: String)String`
+`method hashCode()Int`
+`method intercept[A, B](interceptor: A => Unit, interceptee: akka.routing.Routing.PF[A,B])akka.routing.Routing.PF[A,B]`
+`method isInstanceOf[T0]=> Boolean`
+`method loadBalancerActor(actors: => akka.routing.InfiniteIterator[akka.actor.ActorRef])akka.actor.ActorRef`
+`method loggerActor(actorToLog: akka.actor.ActorRef, logger: Any => Unit)akka.actor.ActorRef`
+`method ne(x$1: AnyRef)Boolean`
+`method notify()Unit`
+`method notifyAll()Unit`
+`method synchronized[T0](x$1: T0)T0`
+`method toString()String`
+`method wait()Unit`
+`method wait(x$1: Long)Unit`
+`method wait(x$1: Long, x$2: Int)Unit`
+`method x=> akka.routing.Routing.type`
+`method →[B](y: B)(akka.routing.Routing.type, B)`
+`trait RoutingMessageakka.routing.Routing.RoutingMessage`
+`type PFakka.routing.Routing.PF`
+`value __leftOfArrowakka.routing.Routing.type`
+`value __resultOfEnsuringakka.routing.Routing.type`
+`value selfAny`
+================================================================================
+
+askTypeCompletion at pi.scala(55,73)
+================================================================================
+[response] aksTypeCompletion at (55,73)
+retrieved 131 members
+`method !!![T](message: Any, timeout: Long)(implicit sender: Option[akka.actor.ActorRef])akka.dispatch.Future[T]`
+`method !!(message: Any, timeout: Long)(implicit sender: Option[akka.actor.ActorRef])Option[Any]`
+`method !(message: Any)(implicit sender: Option[akka.actor.ActorRef])Unit`
+`method !=(x$1: Any)Boolean`
+`method !=(x$1: AnyRef)Boolean`
+`method ##()Int`
+`method +(other: String)String`
+`method ->[B](y: B)(akka.actor.ActorRef, B)`
+`method ==(x$1: Any)Boolean`
+`method ==(x$1: AnyRef)Boolean`
+`method actor=> akka.actor.Actor`
+`method actorClass=> Class[_ <: akka.actor.Actor]`
+`method actorClassName=> String`
+`method actorInstance=> java.util.concurrent.atomic.AtomicReference[akka.actor.Actor]`
+`method asInstanceOf[T0]=> T0`
+`method channel=> akka.actor.Channel[Any]`
+`method clone()Object`
+`method compareTo(other: akka.actor.ActorRef)Int`
+`method dispatcher=> akka.dispatch.MessageDispatcher`
+`method dispatcher_=(md: akka.dispatch.MessageDispatcher)Unit`
+`method ensuring(cond: Boolean)akka.actor.ActorRef`
+`method ensuring(cond: Boolean, msg: => Any)akka.actor.ActorRef`
+`method ensuring(cond: akka.actor.ActorRef => Boolean)akka.actor.ActorRef`
+`method ensuring(cond: akka.actor.ActorRef => Boolean, msg: => Any)akka.actor.ActorRef`
+`method eq(x$1: AnyRef)Boolean`
+`method equals(that: Any)Boolean`
+`method exit()Unit`
+`method finalize()Unit`
+`method formatted(fmtstr: String)String`
+`method forward(message: Any)(implicit sender: Some[akka.actor.ActorRef])Any`
+`method forward(message: AnyRef, sender: akka.actor.ActorRef)Unit`
+`method getActorClass()Class[_ <: akka.actor.Actor]`
+`method getActorClassName()String`
+`method getChannel=> akka.actor.Channel[Any]`
+`method getDispatcher()akka.dispatch.MessageDispatcher`
+`method getFaultHandler()akka.config.Supervision.FaultHandlingStrategy`
+`method getHomeAddress()java.net.InetSocketAddress`
+`method getId()String`
+`method getLifeCycle()akka.config.Supervision.LifeCycle`
+`method getLinkedActors()java.util.Map[akka.actor.Uuid,akka.actor.ActorRef]`
+`method getMailboxSize()Int`
+`method getReceiveTimeout()Option[Long]`
+`method getSender()Option[akka.actor.ActorRef]`
+`method getSenderFuture()Option[akka.dispatch.CompletableFuture[Any]]`
+`method getSupervisor()akka.actor.ActorRef`
+`method getTimeout()Long`
+`method getUuid()akka.actor.Uuid`
+`method handleTrapExit(dead: akka.actor.ActorRef, reason: Throwable)Unit`
+`method hashCode()Int`
+`method homeAddress=> Option[java.net.InetSocketAddress]`
+`method id=> String`
+`method id_=(id: String)Unit`
+`method invoke(messageHandle: akka.dispatch.MessageInvocation)Unit`
+`method isBeingRestarted=> Boolean`
+`method isDefinedAt(message: Any)Boolean`
+`method isInstanceOf[T0]=> Boolean`
+`method isRunning=> Boolean`
+`method isShutdown=> Boolean`
+`method isUnstarted=> Boolean`
+`method link(actorRef: akka.actor.ActorRef)Unit`
+`method linkedActors=> java.util.Map[akka.actor.Uuid,akka.actor.ActorRef]`
+`method mailbox=> AnyRef`
+`method mailboxSize=> Int`
+`method mailbox_=(value: AnyRef)AnyRef`
+`method ne(x$1: AnyRef)Boolean`
+`method notify()Unit`
+`method notifyAll()Unit`
+`method postMessageToMailbox(message: Any, senderOption: Option[akka.actor.ActorRef])Unit`
+`method postMessageToMailboxAndCreateFutureResultWithTimeout[T](message: Any, timeout: Long, senderOption: Option[akka.actor.ActorRef], senderFuture: Option[akka.dispatch.CompletableFuture[T]])akka.dispatch.CompletableFuture[T]`
+`method registerSupervisorAsRemoteActor=> Option[akka.actor.Uuid]`
+`method reply(message: Any)Unit`
+`method replySafe(message: AnyRef)Boolean`
+`method replyUnsafe(message: AnyRef)Unit`
+`method reply_?(message: Any)Boolean`
+`method restart(reason: Throwable, maxNrOfRetries: Option[Int], withinTimeRange: Option[Int])Unit`
+`method restartLinkedActors(reason: Throwable, maxNrOfRetries: Option[Int], withinTimeRange: Option[Int])Unit`
+`method sendOneWay(message: AnyRef)Unit`
+`method sendOneWay(message: AnyRef, sender: akka.actor.ActorRef)Unit`
+`method sendRequestReply(message: AnyRef)AnyRef`
+`method sendRequestReply(message: AnyRef, sender: akka.actor.ActorRef)AnyRef`
+`method sendRequestReply(message: AnyRef, timeout: Long, sender: akka.actor.ActorRef)AnyRef`
+`method sendRequestReplyFuture[T <: AnyRef](message: AnyRef)akka.dispatch.Future[T]`
+`method sendRequestReplyFuture[T <: AnyRef](message: AnyRef, sender: akka.actor.ActorRef)akka.dispatch.Future[T]`
+`method sendRequestReplyFuture[T <: AnyRef](message: AnyRef, timeout: Long, sender: akka.actor.ActorRef)akka.dispatch.Future[T]`
+`method sender=> Option[akka.actor.ActorRef]`
+`method senderFuture()Option[akka.dispatch.CompletableFuture[Any]]`
+`method setDispatcher(dispatcher: akka.dispatch.MessageDispatcher)Unit`
+`method setFaultHandler(handler: akka.config.Supervision.FaultHandlingStrategy)Unit`
+`method setId(x$1: String)Unit`
+`method setLifeCycle(lifeCycle: akka.config.Supervision.LifeCycle)Unit`
+`method setReceiveTimeout(timeout: Long)Unit`
+`method setTimeout(x$1: Long)Unit`
+`method spawn(clazz: Class[_ <: akka.actor.Actor])akka.actor.ActorRef`
+`method spawnLink(clazz: Class[_ <: akka.actor.Actor])akka.actor.ActorRef`
+`method spawnLinkRemote(clazz: Class[_ <: akka.actor.Actor], hostname: String, port: Int, timeout: Long)akka.actor.ActorRef`
+`method spawnLinkRemote[T <: akka.actor.Actor](hostname: String, port: Int, timeout: Long)(implicit evidence$4: Manifest[T])akka.actor.ActorRef`
+`method spawnLink[T <: akka.actor.Actor](implicit evidence$3: Manifest[T])akka.actor.ActorRef`
+`method spawnRemote(clazz: Class[_ <: akka.actor.Actor], hostname: String, port: Int, timeout: Long)akka.actor.ActorRef`
+`method spawnRemote[T <: akka.actor.Actor](hostname: String, port: Int, timeout: Long)(implicit evidence$2: Manifest[T])akka.actor.ActorRef`
+`method spawn[T <: akka.actor.Actor](implicit evidence$1: Manifest[T])akka.actor.ActorRef`
+`method start()akka.actor.ActorRef`
+`method startLink(actorRef: akka.actor.ActorRef)Unit`
+`method stop()Unit`
+`method supervisor=> Option[akka.actor.ActorRef]`
+`method supervisor_=(sup: Option[akka.actor.ActorRef])Unit`
+`method synchronized[T0](x$1: T0)T0`
+`method toString()String`
+`method unlink(actorRef: akka.actor.ActorRef)Unit`
+`method uuid=> akka.actor.Uuid`
+`method uuid_=(uid: akka.actor.Uuid)Unit`
+`method wait()Unit`
+`method wait(x$1: Long)Unit`
+`method wait(x$1: Long, x$2: Int)Unit`
+`method x=> akka.actor.ActorRef`
+`method →[B](y: B)(akka.actor.ActorRef, B)`
+`value __leftOfArrowakka.actor.ActorRef`
+`value __resultOfEnsuringakka.actor.ActorRef`
+`value selfAny`
+`variable _statusakka.actor.ActorRefInternals.StatusType`
+`variable _uuidakka.actor.Uuid`
+`variable currentMessageakka.dispatch.MessageInvocation`
+`variable faultHandlerakka.config.Supervision.FaultHandlingStrategy`
+`variable hotswapscala.collection.immutable.Stack[PartialFunction[Any,Unit]]`
+`variable idString`
+`variable lifeCycleakka.config.Supervision.LifeCycle`
+`variable receiveTimeoutOption[Long]`
+`variable timeoutLong`
+================================================================================
+
+askTypeCompletion at pi.scala(65,15)
+================================================================================
+[response] aksTypeCompletion at (65,15)
+retrieved 131 members
+`method !!![T](message: Any, timeout: Long)(implicit sender: Option[akka.actor.ActorRef])akka.dispatch.Future[T]`
+`method !!(message: Any, timeout: Long)(implicit sender: Option[akka.actor.ActorRef])Option[Any]`
+`method !(message: Any)(implicit sender: Option[akka.actor.ActorRef])Unit`
+`method !=(x$1: Any)Boolean`
+`method !=(x$1: AnyRef)Boolean`
+`method ##()Int`
+`method +(other: String)String`
+`method ->[B](y: B)(akka.actor.ActorRef, B)`
+`method ==(x$1: Any)Boolean`
+`method ==(x$1: AnyRef)Boolean`
+`method actor=> akka.actor.Actor`
+`method actorClass=> Class[_ <: akka.actor.Actor]`
+`method actorClassName=> String`
+`method actorInstance=> java.util.concurrent.atomic.AtomicReference[akka.actor.Actor]`
+`method asInstanceOf[T0]=> T0`
+`method channel=> akka.actor.Channel[Any]`
+`method clone()Object`
+`method compareTo(other: akka.actor.ActorRef)Int`
+`method dispatcher=> akka.dispatch.MessageDispatcher`
+`method dispatcher_=(md: akka.dispatch.MessageDispatcher)Unit`
+`method ensuring(cond: Boolean)akka.actor.ActorRef`
+`method ensuring(cond: Boolean, msg: => Any)akka.actor.ActorRef`
+`method ensuring(cond: akka.actor.ActorRef => Boolean)akka.actor.ActorRef`
+`method ensuring(cond: akka.actor.ActorRef => Boolean, msg: => Any)akka.actor.ActorRef`
+`method eq(x$1: AnyRef)Boolean`
+`method equals(that: Any)Boolean`
+`method exit()Unit`
+`method finalize()Unit`
+`method formatted(fmtstr: String)String`
+`method forward(message: Any)(implicit sender: Some[akka.actor.ActorRef])Any`
+`method forward(message: AnyRef, sender: akka.actor.ActorRef)Unit`
+`method getActorClass()Class[_ <: akka.actor.Actor]`
+`method getActorClassName()String`
+`method getChannel=> akka.actor.Channel[Any]`
+`method getDispatcher()akka.dispatch.MessageDispatcher`
+`method getFaultHandler()akka.config.Supervision.FaultHandlingStrategy`
+`method getHomeAddress()java.net.InetSocketAddress`
+`method getId()String`
+`method getLifeCycle()akka.config.Supervision.LifeCycle`
+`method getLinkedActors()java.util.Map[akka.actor.Uuid,akka.actor.ActorRef]`
+`method getMailboxSize()Int`
+`method getReceiveTimeout()Option[Long]`
+`method getSender()Option[akka.actor.ActorRef]`
+`method getSenderFuture()Option[akka.dispatch.CompletableFuture[Any]]`
+`method getSupervisor()akka.actor.ActorRef`
+`method getTimeout()Long`
+`method getUuid()akka.actor.Uuid`
+`method handleTrapExit(dead: akka.actor.ActorRef, reason: Throwable)Unit`
+`method hashCode()Int`
+`method homeAddress=> Option[java.net.InetSocketAddress]`
+`method id=> String`
+`method id_=(id: String)Unit`
+`method invoke(messageHandle: akka.dispatch.MessageInvocation)Unit`
+`method isBeingRestarted=> Boolean`
+`method isDefinedAt(message: Any)Boolean`
+`method isInstanceOf[T0]=> Boolean`
+`method isRunning=> Boolean`
+`method isShutdown=> Boolean`
+`method isUnstarted=> Boolean`
+`method link(actorRef: akka.actor.ActorRef)Unit`
+`method linkedActors=> java.util.Map[akka.actor.Uuid,akka.actor.ActorRef]`
+`method mailbox=> AnyRef`
+`method mailboxSize=> Int`
+`method mailbox_=(value: AnyRef)AnyRef`
+`method ne(x$1: AnyRef)Boolean`
+`method notify()Unit`
+`method notifyAll()Unit`
+`method postMessageToMailbox(message: Any, senderOption: Option[akka.actor.ActorRef])Unit`
+`method postMessageToMailboxAndCreateFutureResultWithTimeout[T](message: Any, timeout: Long, senderOption: Option[akka.actor.ActorRef], senderFuture: Option[akka.dispatch.CompletableFuture[T]])akka.dispatch.CompletableFuture[T]`
+`method registerSupervisorAsRemoteActor=> Option[akka.actor.Uuid]`
+`method reply(message: Any)Unit`
+`method replySafe(message: AnyRef)Boolean`
+`method replyUnsafe(message: AnyRef)Unit`
+`method reply_?(message: Any)Boolean`
+`method restart(reason: Throwable, maxNrOfRetries: Option[Int], withinTimeRange: Option[Int])Unit`
+`method restartLinkedActors(reason: Throwable, maxNrOfRetries: Option[Int], withinTimeRange: Option[Int])Unit`
+`method sendOneWay(message: AnyRef)Unit`
+`method sendOneWay(message: AnyRef, sender: akka.actor.ActorRef)Unit`
+`method sendRequestReply(message: AnyRef)AnyRef`
+`method sendRequestReply(message: AnyRef, sender: akka.actor.ActorRef)AnyRef`
+`method sendRequestReply(message: AnyRef, timeout: Long, sender: akka.actor.ActorRef)AnyRef`
+`method sendRequestReplyFuture[T <: AnyRef](message: AnyRef)akka.dispatch.Future[T]`
+`method sendRequestReplyFuture[T <: AnyRef](message: AnyRef, sender: akka.actor.ActorRef)akka.dispatch.Future[T]`
+`method sendRequestReplyFuture[T <: AnyRef](message: AnyRef, timeout: Long, sender: akka.actor.ActorRef)akka.dispatch.Future[T]`
+`method sender=> Option[akka.actor.ActorRef]`
+`method senderFuture()Option[akka.dispatch.CompletableFuture[Any]]`
+`method setDispatcher(dispatcher: akka.dispatch.MessageDispatcher)Unit`
+`method setFaultHandler(handler: akka.config.Supervision.FaultHandlingStrategy)Unit`
+`method setId(x$1: String)Unit`
+`method setLifeCycle(lifeCycle: akka.config.Supervision.LifeCycle)Unit`
+`method setReceiveTimeout(timeout: Long)Unit`
+`method setTimeout(x$1: Long)Unit`
+`method spawn(clazz: Class[_ <: akka.actor.Actor])akka.actor.ActorRef`
+`method spawnLink(clazz: Class[_ <: akka.actor.Actor])akka.actor.ActorRef`
+`method spawnLinkRemote(clazz: Class[_ <: akka.actor.Actor], hostname: String, port: Int, timeout: Long)akka.actor.ActorRef`
+`method spawnLinkRemote[T <: akka.actor.Actor](hostname: String, port: Int, timeout: Long)(implicit evidence$4: Manifest[T])akka.actor.ActorRef`
+`method spawnLink[T <: akka.actor.Actor](implicit evidence$3: Manifest[T])akka.actor.ActorRef`
+`method spawnRemote(clazz: Class[_ <: akka.actor.Actor], hostname: String, port: Int, timeout: Long)akka.actor.ActorRef`
+`method spawnRemote[T <: akka.actor.Actor](hostname: String, port: Int, timeout: Long)(implicit evidence$2: Manifest[T])akka.actor.ActorRef`
+`method spawn[T <: akka.actor.Actor](implicit evidence$1: Manifest[T])akka.actor.ActorRef`
+`method start()akka.actor.ActorRef`
+`method startLink(actorRef: akka.actor.ActorRef)Unit`
+`method stop()Unit`
+`method supervisor=> Option[akka.actor.ActorRef]`
+`method supervisor_=(sup: Option[akka.actor.ActorRef])Unit`
+`method synchronized[T0](x$1: T0)T0`
+`method toString()String`
+`method unlink(actorRef: akka.actor.ActorRef)Unit`
+`method uuid=> akka.actor.Uuid`
+`method uuid_=(uid: akka.actor.Uuid)Unit`
+`method wait()Unit`
+`method wait(x$1: Long)Unit`
+`method wait(x$1: Long, x$2: Int)Unit`
+`method x=> akka.actor.ActorRef`
+`method →[B](y: B)(akka.actor.ActorRef, B)`
+`value __leftOfArrowakka.actor.ActorRef`
+`value __resultOfEnsuringakka.actor.ActorRef`
+`value selfAny`
+`variable _statusakka.actor.ActorRefInternals.StatusType`
+`variable _uuidakka.actor.Uuid`
+`variable currentMessageakka.dispatch.MessageInvocation`
+`variable faultHandlerakka.config.Supervision.FaultHandlingStrategy`
+`variable hotswapscala.collection.immutable.Stack[PartialFunction[Any,Unit]]`
+`variable idString`
+`variable lifeCycleakka.config.Supervision.LifeCycle`
+`variable receiveTimeoutOption[Long]`
+`variable timeoutLong`
+================================================================================
+
+askTypeCompletion at pi.scala(74,46)
+================================================================================
+[response] aksTypeCompletion at (74,46)
+retrieved 131 members
+`method !!![T](message: Any, timeout: Long)(implicit sender: Option[akka.actor.ActorRef])akka.dispatch.Future[T]`
+`method !!(message: Any, timeout: Long)(implicit sender: Option[akka.actor.ActorRef])Option[Any]`
+`method !(message: Any)(implicit sender: Option[akka.actor.ActorRef])Unit`
+`method !=(x$1: Any)Boolean`
+`method !=(x$1: AnyRef)Boolean`
+`method ##()Int`
+`method +(other: String)String`
+`method ->[B](y: B)(akka.actor.ScalaActorRef, B)`
+`method ==(x$1: Any)Boolean`
+`method ==(x$1: AnyRef)Boolean`
+`method actor=> akka.actor.Actor`
+`method actorClass=> Class[_ <: akka.actor.Actor]`
+`method actorClassName=> String`
+`method actorInstance=> java.util.concurrent.atomic.AtomicReference[akka.actor.Actor]`
+`method asInstanceOf[T0]=> T0`
+`method channel=> akka.actor.Channel[Any]`
+`method clone()Object`
+`method compareTo(other: akka.actor.ActorRef)Int`
+`method dispatcher=> akka.dispatch.MessageDispatcher`
+`method dispatcher_=(md: akka.dispatch.MessageDispatcher)Unit`
+`method ensuring(cond: Boolean)akka.actor.ScalaActorRef`
+`method ensuring(cond: Boolean, msg: => Any)akka.actor.ScalaActorRef`
+`method ensuring(cond: akka.actor.ScalaActorRef => Boolean)akka.actor.ScalaActorRef`
+`method ensuring(cond: akka.actor.ScalaActorRef => Boolean, msg: => Any)akka.actor.ScalaActorRef`
+`method eq(x$1: AnyRef)Boolean`
+`method equals(x$1: Any)Boolean`
+`method exit()Unit`
+`method finalize()Unit`
+`method formatted(fmtstr: String)String`
+`method forward(message: Any)(implicit sender: Some[akka.actor.ActorRef])Any`
+`method forward(message: AnyRef, sender: akka.actor.ActorRef)Unit`
+`method getActorClass()Class[_ <: akka.actor.Actor]`
+`method getActorClassName()String`
+`method getChannel=> akka.actor.Channel[Any]`
+`method getDispatcher()akka.dispatch.MessageDispatcher`
+`method getFaultHandler()akka.config.Supervision.FaultHandlingStrategy`
+`method getHomeAddress()java.net.InetSocketAddress`
+`method getId()String`
+`method getLifeCycle()akka.config.Supervision.LifeCycle`
+`method getLinkedActors()java.util.Map[akka.actor.Uuid,akka.actor.ActorRef]`
+`method getMailboxSize()Int`
+`method getReceiveTimeout()Option[Long]`
+`method getSender()Option[akka.actor.ActorRef]`
+`method getSenderFuture()Option[akka.dispatch.CompletableFuture[Any]]`
+`method getSupervisor()akka.actor.ActorRef`
+`method getTimeout()Long`
+`method getUuid()akka.actor.Uuid`
+`method handleTrapExit(dead: akka.actor.ActorRef, reason: Throwable)Unit`
+`method hashCode()Int`
+`method homeAddress=> Option[java.net.InetSocketAddress]`
+`method id=> String`
+`method id_=(id: String)Unit`
+`method invoke(messageHandle: akka.dispatch.MessageInvocation)Unit`
+`method isBeingRestarted=> Boolean`
+`method isDefinedAt(message: Any)Boolean`
+`method isInstanceOf[T0]=> Boolean`
+`method isRunning=> Boolean`
+`method isShutdown=> Boolean`
+`method isUnstarted=> Boolean`
+`method link(actorRef: akka.actor.ActorRef)Unit`
+`method linkedActors=> java.util.Map[akka.actor.Uuid,akka.actor.ActorRef]`
+`method mailbox=> AnyRef`
+`method mailboxSize=> Int`
+`method mailbox_=(value: AnyRef)AnyRef`
+`method ne(x$1: AnyRef)Boolean`
+`method notify()Unit`
+`method notifyAll()Unit`
+`method postMessageToMailbox(message: Any, senderOption: Option[akka.actor.ActorRef])Unit`
+`method postMessageToMailboxAndCreateFutureResultWithTimeout[T](message: Any, timeout: Long, senderOption: Option[akka.actor.ActorRef], senderFuture: Option[akka.dispatch.CompletableFuture[T]])akka.dispatch.CompletableFuture[T]`
+`method registerSupervisorAsRemoteActor=> Option[akka.actor.Uuid]`
+`method reply(message: Any)Unit`
+`method replySafe(message: AnyRef)Boolean`
+`method replyUnsafe(message: AnyRef)Unit`
+`method reply_?(message: Any)Boolean`
+`method restart(reason: Throwable, maxNrOfRetries: Option[Int], withinTimeRange: Option[Int])Unit`
+`method restartLinkedActors(reason: Throwable, maxNrOfRetries: Option[Int], withinTimeRange: Option[Int])Unit`
+`method sendOneWay(message: AnyRef)Unit`
+`method sendOneWay(message: AnyRef, sender: akka.actor.ActorRef)Unit`
+`method sendRequestReply(message: AnyRef)AnyRef`
+`method sendRequestReply(message: AnyRef, sender: akka.actor.ActorRef)AnyRef`
+`method sendRequestReply(message: AnyRef, timeout: Long, sender: akka.actor.ActorRef)AnyRef`
+`method sendRequestReplyFuture[T <: AnyRef](message: AnyRef)akka.dispatch.Future[T]`
+`method sendRequestReplyFuture[T <: AnyRef](message: AnyRef, sender: akka.actor.ActorRef)akka.dispatch.Future[T]`
+`method sendRequestReplyFuture[T <: AnyRef](message: AnyRef, timeout: Long, sender: akka.actor.ActorRef)akka.dispatch.Future[T]`
+`method sender=> Option[akka.actor.ActorRef]`
+`method senderFuture()Option[akka.dispatch.CompletableFuture[Any]]`
+`method setDispatcher(dispatcher: akka.dispatch.MessageDispatcher)Unit`
+`method setFaultHandler(x$1: akka.config.Supervision.FaultHandlingStrategy)Unit`
+`method setId(x$1: String)Unit`
+`method setLifeCycle(x$1: akka.config.Supervision.LifeCycle)Unit`
+`method setReceiveTimeout(timeout: Long)Unit`
+`method setTimeout(x$1: Long)Unit`
+`method spawn(clazz: Class[_ <: akka.actor.Actor])akka.actor.ActorRef`
+`method spawnLink(clazz: Class[_ <: akka.actor.Actor])akka.actor.ActorRef`
+`method spawnLinkRemote(clazz: Class[_ <: akka.actor.Actor], hostname: String, port: Int, timeout: Long)akka.actor.ActorRef`
+`method spawnLinkRemote[T <: akka.actor.Actor](hostname: String, port: Int, timeout: Long)(implicit evidence$4: Manifest[T])akka.actor.ActorRef`
+`method spawnLink[T <: akka.actor.Actor](implicit evidence$3: Manifest[T])akka.actor.ActorRef`
+`method spawnRemote(clazz: Class[_ <: akka.actor.Actor], hostname: String, port: Int, timeout: Long)akka.actor.ActorRef`
+`method spawnRemote[T <: akka.actor.Actor](hostname: String, port: Int, timeout: Long)(implicit evidence$2: Manifest[T])akka.actor.ActorRef`
+`method spawn[T <: akka.actor.Actor](implicit evidence$1: Manifest[T])akka.actor.ActorRef`
+`method start()akka.actor.ActorRef`
+`method startLink(actorRef: akka.actor.ActorRef)Unit`
+`method stop()Unit`
+`method supervisor=> Option[akka.actor.ActorRef]`
+`method supervisor_=(sup: Option[akka.actor.ActorRef])Unit`
+`method synchronized[T0](x$1: T0)T0`
+`method toString()String`
+`method unlink(actorRef: akka.actor.ActorRef)Unit`
+`method uuid=> akka.actor.Uuid`
+`method uuid_=(uid: akka.actor.Uuid)Unit`
+`method wait()Unit`
+`method wait(x$1: Long)Unit`
+`method wait(x$1: Long, x$2: Int)Unit`
+`method x=> akka.actor.ScalaActorRef`
+`method →[B](y: B)(akka.actor.ScalaActorRef, B)`
+`value __leftOfArrowakka.actor.ScalaActorRef`
+`value __resultOfEnsuringakka.actor.ScalaActorRef`
+`value selfAny`
+`variable _statusakka.actor.ActorRefInternals.StatusType`
+`variable _uuidakka.actor.Uuid`
+`variable currentMessageakka.dispatch.MessageInvocation`
+`variable faultHandlerakka.config.Supervision.FaultHandlingStrategy`
+`variable hotswapscala.collection.immutable.Stack[PartialFunction[Any,Unit]]`
+`variable idString`
+`variable lifeCycleakka.config.Supervision.LifeCycle`
+`variable receiveTimeoutOption[Long]`
+`variable timeoutLong`
+================================================================================
+
+askType at pi.scala(34,16)
+================================================================================
+[response] askTypeAt at (34,16)
+def receive: PartialFunction[Any,Unit] = ((x0$3: Any) => x0$3 match {
+ case (start: Int, nrOfElements: Int)Pi.Work((start @ _), (nrOfElements @ _)) => Worker.this.self.reply(Pi.this.Result.apply(Worker.this.calculatePiFor(start, nrOfElements)))
+})
+================================================================================
+
+askHyperlinkPos for `calculate` at (11,11) pi.scala
+================================================================================
+[response] found askHyperlinkPos for `calculate` at (93,7) pi.scala
+================================================================================
+
+askHyperlinkPos for `PiMessage` at (17,41) pi.scala
+================================================================================
+[response] found askHyperlinkPos for `PiMessage` at (16,16) pi.scala
+================================================================================
+
+askHyperlinkPos for `Actor` at (24,28) pi.scala
+================================================================================
+[response] found askHyperlinkPos for `Actor` at (289,7) Actor.scala
+================================================================================
+
+askHyperlinkPos for `reply` at (36,18) pi.scala
+================================================================================
+[response] found askHyperlinkPos for `reply` at (1382,7) ActorRef.scala
+================================================================================
+
+askHyperlinkPos for `nrOfResults` at (73,19) pi.scala
+================================================================================
+[response] found askHyperlinkPos for `nrOfResults` at (48,9) pi.scala
+================================================================================
+
+askHyperlinkPos for `latch` at (86,11) pi.scala
+================================================================================
+[response] found askHyperlinkPos for `latch` at (44,61) pi.scala
+================================================================================
diff --git a/test/disabled/presentation/akka.flags b/test/disabled/presentation/akka.flags
new file mode 100644
index 0000000000..56d026a62d
--- /dev/null
+++ b/test/disabled/presentation/akka.flags
@@ -0,0 +1,18 @@
+# This file contains command line options that are passed to the presentation compiler
+# Lines starting with # are stripped, and you can split arguments on several lines.
+
+# The -bootclasspath option is treated specially by the test framework: if it's not specified
+# in this file, the presentation compiler will pick up the scala-library/compiler that's on the
+# java classpath used to run this test (usually build/pack)
+
+# Any option can be passed this way, like presentation debug
+# -Ypresentation-debug -Ypresentation-verbose
+
+# the classpath is relative to the current working directory. That means it depends where you're
+# running partest from. Run it from the root scala checkout for these files to resolve correctly
+# (by default when running 'ant test', or 'test/partest'). Paths use Unix separators, the test
+# framework translates them to the platform dependent representation.
+# -bootclasspath lib/scala-compiler.jar:lib/scala-library.jar:lib/fjbg.jar
+
+# the following line would test using the quick compiler
+# -bootclasspath build/quick/classes/compiler:build/quick/classes/library:lib/fjbg.jar
diff --git a/test/disabled/presentation/akka/Runner.scala b/test/disabled/presentation/akka/Runner.scala
new file mode 100644
index 0000000000..14a6aa8350
--- /dev/null
+++ b/test/disabled/presentation/akka/Runner.scala
@@ -0,0 +1,3 @@
+import scala.tools.nsc.interactive.tests.InteractiveTest
+
+object Test extends InteractiveTest
diff --git a/test/disabled/presentation/akka/src/akka/AkkaException.scala b/test/disabled/presentation/akka/src/akka/AkkaException.scala
new file mode 100644
index 0000000000..155a7a16b5
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/AkkaException.scala
@@ -0,0 +1,40 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka
+
+import akka.actor.newUuid
+import java.net.{ InetAddress, UnknownHostException }
+
+/**
+ * Akka base Exception. Each Exception gets:
+ * <ul>
+ * <li>a uuid for tracking purposes</li>
+ * <li>toString that includes exception name, message, uuid, and the stacktrace</li>
+ * </ul>
+ *
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+class AkkaException(message: String = "", cause: Throwable = null) extends RuntimeException(message, cause) with Serializable {
+ val uuid = "%s_%s".format(AkkaException.hostname, newUuid)
+
+ override lazy val toString =
+ "%s: %s\n[%s]\n%s".format(getClass.getName, message, uuid, stackTraceToString)
+
+ def stackTraceToString = {
+ val trace = getStackTrace
+ val sb = new StringBuffer
+ for (i ← 0 until trace.length)
+ sb.append("\tat %s\n" format trace(i))
+ sb.toString
+ }
+}
+
+object AkkaException {
+ val hostname = try {
+ InetAddress.getLocalHost.getHostName
+ } catch {
+ case e: UnknownHostException => "unknown"
+ }
+}
diff --git a/test/disabled/presentation/akka/src/akka/actor/Actor.scala b/test/disabled/presentation/akka/src/akka/actor/Actor.scala
new file mode 100644
index 0000000000..b955c4c38b
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/actor/Actor.scala
@@ -0,0 +1,503 @@
+/** Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka.actor
+
+import akka.dispatch._
+import akka.config.Config._
+import akka.util.Helpers.{ narrow, narrowSilently }
+import akka.util.ListenerManagement
+import akka.AkkaException
+
+import scala.beans.BeanProperty
+import akka.util.{ ReflectiveAccess, Duration }
+import akka.remoteinterface.RemoteSupport
+import akka.japi.{ Creator, Procedure }
+import java.lang.reflect.InvocationTargetException
+
+/** Life-cycle messages for the Actors
+ */
+sealed trait LifeCycleMessage extends Serializable
+
+/* Marker trait to show which Messages are automatically handled by Akka */
+sealed trait AutoReceivedMessage { self: LifeCycleMessage => }
+
+case class HotSwap(code: ActorRef => Actor.Receive, discardOld: Boolean = true)
+ extends AutoReceivedMessage with LifeCycleMessage {
+
+ /** Java API
+ */
+ def this(code: akka.japi.Function[ActorRef, Procedure[Any]], discardOld: Boolean) =
+ this((self: ActorRef) => {
+ val behavior = code(self)
+ val result: Actor.Receive = { case msg => behavior(msg) }
+ result
+ }, discardOld)
+
+ /** Java API with default non-stacking behavior
+ */
+ def this(code: akka.japi.Function[ActorRef, Procedure[Any]]) = this(code, true)
+}
+
+case object RevertHotSwap extends AutoReceivedMessage with LifeCycleMessage
+
+case class Restart(reason: Throwable) extends AutoReceivedMessage with LifeCycleMessage
+
+case class Exit(dead: ActorRef, killer: Throwable) extends AutoReceivedMessage with LifeCycleMessage
+
+case class Link(child: ActorRef) extends AutoReceivedMessage with LifeCycleMessage
+
+case class Unlink(child: ActorRef) extends AutoReceivedMessage with LifeCycleMessage
+
+case class UnlinkAndStop(child: ActorRef) extends AutoReceivedMessage with LifeCycleMessage
+
+case object PoisonPill extends AutoReceivedMessage with LifeCycleMessage
+
+case object Kill extends AutoReceivedMessage with LifeCycleMessage
+
+case object ReceiveTimeout extends LifeCycleMessage
+
+case class MaximumNumberOfRestartsWithinTimeRangeReached(
+ @BeanProperty val victim: ActorRef,
+ @BeanProperty val maxNrOfRetries: Option[Int],
+ @BeanProperty val withinTimeRange: Option[Int],
+ @BeanProperty val lastExceptionCausingRestart: Throwable) extends LifeCycleMessage
+
+// Exceptions for Actors
+class ActorStartException private[akka] (message: String, cause: Throwable = null) extends AkkaException(message, cause)
+class IllegalActorStateException private[akka] (message: String, cause: Throwable = null) extends AkkaException(message, cause)
+class ActorKilledException private[akka] (message: String, cause: Throwable = null) extends AkkaException(message, cause)
+class ActorInitializationException private[akka] (message: String, cause: Throwable = null) extends AkkaException(message, cause)
+class ActorTimeoutException private[akka] (message: String, cause: Throwable = null) extends AkkaException(message, cause)
+class InvalidMessageException private[akka] (message: String, cause: Throwable = null) extends AkkaException(message, cause)
+
+/** This message is thrown by default when an Actors behavior doesn't match a message
+ */
+case class UnhandledMessageException(msg: Any, ref: ActorRef) extends Exception {
+ override def getMessage() = "Actor %s does not handle [%s]".format(ref, msg)
+ override def fillInStackTrace() = this //Don't waste cycles generating stack trace
+}
+
+/** Actor factory module with factory methods for creating various kinds of Actors.
+ *
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+object Actor extends ListenerManagement {
+
+ /** Add shutdown cleanups
+ */
+ private[akka] lazy val shutdownHook = {
+ val hook = new Runnable {
+ override def run {
+ // Clear Thread.subclassAudits
+ val tf = classOf[java.lang.Thread].getDeclaredField("subclassAudits")
+ tf.setAccessible(true)
+ val subclassAudits = tf.get(null).asInstanceOf[java.util.Map[_, _]]
+ subclassAudits synchronized { subclassAudits.clear }
+ }
+ }
+ Runtime.getRuntime.addShutdownHook(new Thread(hook))
+ hook
+ }
+
+ val registry = new ActorRegistry
+
+ lazy val remote: RemoteSupport = {
+ ReflectiveAccess
+ .Remote
+ .defaultRemoteSupport
+ .map(_())
+ .getOrElse(throw new UnsupportedOperationException("You need to have akka-remote.jar on classpath"))
+ }
+
+ private[akka] val TIMEOUT = Duration(config.getInt("akka.actor.timeout", 5), TIME_UNIT).toMillis
+ private[akka] val SERIALIZE_MESSAGES = config.getBool("akka.actor.serialize-messages", false)
+
+ /** A Receive is a convenience type that defines actor message behavior currently modeled as
+ * a PartialFunction[Any, Unit].
+ */
+ type Receive = PartialFunction[Any, Unit]
+
+ private[actor] val actorRefInCreation = new ThreadLocal[Option[ActorRef]] {
+ override def initialValue = None
+ }
+
+ /** Creates an ActorRef out of the Actor with type T.
+ * <pre>
+ * import Actor._
+ * val actor = actorOf[MyActor]
+ * actor.start()
+ * actor ! message
+ * actor.stop()
+ * </pre>
+ * You can create and start the actor in one statement like this:
+ * <pre>
+ * val actor = actorOf[MyActor].start()
+ * </pre>
+ */
+ def actorOf[T <: Actor: Manifest]: ActorRef = actorOf(manifest[T].erasure.asInstanceOf[Class[_ <: Actor]])
+
+ /** Creates an ActorRef out of the Actor of the specified Class.
+ * <pre>
+ * import Actor._
+ * val actor = actorOf(classOf[MyActor])
+ * actor.start()
+ * actor ! message
+ * actor.stop()
+ * </pre>
+ * You can create and start the actor in one statement like this:
+ * <pre>
+ * val actor = actorOf(classOf[MyActor]).start()
+ * </pre>
+ */
+ def actorOf(clazz: Class[_ <: Actor]): ActorRef = new LocalActorRef(() => {
+ import ReflectiveAccess.{ createInstance, noParams, noArgs }
+ createInstance[Actor](clazz.asInstanceOf[Class[_]], noParams, noArgs) match {
+ case Right(actor) => actor
+ case Left(exception) =>
+ val cause = exception match {
+ case i: InvocationTargetException => i.getTargetException
+ case _ => exception
+ }
+
+ throw new ActorInitializationException(
+ "Could not instantiate Actor of " + clazz +
+ "\nMake sure Actor is NOT defined inside a class/trait," +
+ "\nif so put it outside the class/trait, f.e. in a companion object," +
+ "\nOR try to change: 'actorOf[MyActor]' to 'actorOf(new MyActor)'.", cause)
+ }
+
+ }, None)
+
+ /** Creates an ActorRef out of the Actor. Allows you to pass in a factory function
+ * that creates the Actor. Please note that this function can be invoked multiple
+ * times if for example the Actor is supervised and needs to be restarted.
+ * <p/>
+ * This function should <b>NOT</b> be used for remote actors.
+ * <pre>
+ * import Actor._
+ * val actor = actorOf(new MyActor)
+ * actor.start()
+ * actor ! message
+ * actor.stop()
+ * </pre>
+ * You can create and start the actor in one statement like this:
+ * <pre>
+ * val actor = actorOf(new MyActor).start()
+ * </pre>
+ */
+ def actorOf(factory: => Actor): ActorRef = new LocalActorRef(() => factory, None)
+
+ /** Creates an ActorRef out of the Actor. Allows you to pass in a factory (Creator<Actor>)
+ * that creates the Actor. Please note that this function can be invoked multiple
+ * times if for example the Actor is supervised and needs to be restarted.
+ * <p/>
+ * This function should <b>NOT</b> be used for remote actors.
+ * JAVA API
+ */
+ def actorOf(creator: Creator[Actor]): ActorRef = new LocalActorRef(() => creator.create, None)
+
+ /** Use to spawn out a block of code in an event-driven actor. Will shut actor down when
+ * the block has been executed.
+ * <p/>
+ * NOTE: If used from within an Actor then has to be qualified with 'Actor.spawn' since
+ * there is a method 'spawn[ActorType]' in the Actor trait already.
+ * Example:
+ * <pre>
+ * import Actor.{spawn}
+ *
+ * spawn {
+ * ... // do stuff
+ * }
+ * </pre>
+ */
+ def spawn(body: => Unit)(implicit dispatcher: MessageDispatcher = Dispatchers.defaultGlobalDispatcher): Unit = {
+ case object Spawn
+ actorOf(new Actor() {
+ self.dispatcher = dispatcher
+ def receive = {
+ case Spawn => try { body } finally { self.stop() }
+ }
+ }).start() ! Spawn
+ }
+
+ /** Implicitly converts the given Option[Any] to a AnyOptionAsTypedOption which offers the method <code>as[T]</code>
+ * to convert an Option[Any] to an Option[T].
+ */
+ implicit def toAnyOptionAsTypedOption(anyOption: Option[Any]) = new AnyOptionAsTypedOption(anyOption)
+
+ /** Implicitly converts the given Future[_] to a AnyOptionAsTypedOption which offers the method <code>as[T]</code>
+ * to convert an Option[Any] to an Option[T].
+ * This means that the following code is equivalent:
+ * (actor !! "foo").as[Int] (Deprecated)
+ * and
+ * (actor !!! "foo").as[Int] (Recommended)
+ */
+ implicit def futureToAnyOptionAsTypedOption(anyFuture: Future[_]) = new AnyOptionAsTypedOption({
+ try { anyFuture.await } catch { case t: FutureTimeoutException => }
+ anyFuture.resultOrException
+ })
+}
+
+/** Actor base trait that should be extended by or mixed to create an Actor with the semantics of the 'Actor Model':
+ * <a href="http://en.wikipedia.org/wiki/Actor_model">http://en.wikipedia.org/wiki/Actor_model</a>
+ * <p/>
+ * An actor has a well-defined (non-cyclic) life-cycle.
+ * <pre>
+ * => NEW (newly created actor) - can't receive messages (yet)
+ * => STARTED (when 'start' is invoked) - can receive messages
+ * => SHUT DOWN (when 'exit' is invoked) - can't do anything
+ * </pre>
+ *
+ * <p/>
+ * The Actor's API is available in the 'self' member variable.
+ *
+ * <p/>
+ * Here you find functions like:
+ * - !, !!, !!! and forward
+ * - link, unlink, startLink, spawnLink etc
+ * - makeRemote etc.
+ * - start, stop
+ * - etc.
+ *
+ * <p/>
+ * Here you also find fields like
+ * - dispatcher = ...
+ * - id = ...
+ * - lifeCycle = ...
+ * - faultHandler = ...
+ * - trapExit = ...
+ * - etc.
+ *
+ * <p/>
+ * This means that to use them you have to prefix them with 'self', like this: <tt>self ! Message</tt>
+ *
+ * However, for convenience you can import these functions and fields like below, which will allow you do
+ * drop the 'self' prefix:
+ * <pre>
+ * class MyActor extends Actor {
+ * import self._
+ * id = ...
+ * dispatcher = ...
+ * spawnLink[OtherActor]
+ * ...
+ * }
+ * </pre>
+ *
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+trait Actor {
+
+ /** Type alias because traits cannot have companion objects.
+ */
+ type Receive = Actor.Receive
+
+ /*
+ * Some[ActorRef] representation of the 'self' ActorRef reference.
+ * <p/>
+ * Mainly for internal use, functions as the implicit sender references when invoking
+ * the 'forward' function.
+ */
+ @transient
+ implicit val someSelf: Some[ActorRef] = {
+ val optRef = Actor.actorRefInCreation.get
+ if (optRef.isEmpty) throw new ActorInitializationException(
+ "ActorRef for instance of actor [" + getClass.getName + "] is not in scope." +
+ "\n\tYou can not create an instance of an actor explicitly using 'new MyActor'." +
+ "\n\tYou have to use one of the factory methods in the 'Actor' object to create a new actor." +
+ "\n\tEither use:" +
+ "\n\t\t'val actor = Actor.actorOf[MyActor]', or" +
+ "\n\t\t'val actor = Actor.actorOf(new MyActor(..))'")
+ Actor.actorRefInCreation.set(None)
+ optRef.asInstanceOf[Some[ActorRef]].get.id = getClass.getName //FIXME: Is this needed?
+ optRef.asInstanceOf[Some[ActorRef]]
+ }
+
+ /*
+ * Option[ActorRef] representation of the 'self' ActorRef reference.
+ * <p/>
+ * Mainly for internal use, functions as the implicit sender references when invoking
+ * one of the message send functions ('!', '!!' and '!!!').
+ */
+ implicit def optionSelf: Option[ActorRef] = someSelf
+
+ /** The 'self' field holds the ActorRef for this actor.
+ * <p/>
+ * Can be used to send messages to itself:
+ * <pre>
+ * self ! message
+ * </pre>
+ * Here you also find most of the Actor API.
+ * <p/>
+ * For example fields like:
+ * <pre>
+ * self.dispatcher = ...
+ * self.trapExit = ...
+ * self.faultHandler = ...
+ * self.lifeCycle = ...
+ * self.sender
+ * </pre>
+ * <p/>
+ * Here you also find methods like:
+ * <pre>
+ * self.reply(..)
+ * self.link(..)
+ * self.unlink(..)
+ * self.start(..)
+ * self.stop(..)
+ * </pre>
+ */
+ @transient
+ val self: ScalaActorRef = someSelf.get
+
+ /** User overridable callback/setting.
+ * <p/>
+ * Partial function implementing the actor logic.
+ * To be implemented by concrete actor class.
+ * <p/>
+ * Example code:
+ * <pre>
+ * def receive = {
+ * case Ping =&gt;
+ * println("got a 'Ping' message")
+ * self.reply("pong")
+ *
+ * case OneWay =&gt;
+ * println("got a 'OneWay' message")
+ *
+ * case unknown =&gt;
+ * println("unknown message: " + unknown)
+ * }
+ * </pre>
+ */
+ protected def receive: Receive
+
+ /** User overridable callback.
+ * <p/>
+ * Is called when an Actor is started by invoking 'actor.start()'.
+ */
+ def preStart() {}
+
+ /** User overridable callback.
+ * <p/>
+ * Is called when 'actor.stop()' is invoked.
+ */
+ def postStop() {}
+
+ /** User overridable callback.
+ * <p/>
+ * Is called on a crashed Actor right BEFORE it is restarted to allow clean up of resources before Actor is terminated.
+ */
+ def preRestart(reason: Throwable) {}
+
+ /** User overridable callback.
+ * <p/>
+ * Is called right AFTER restart on the newly created Actor to allow reinitialization after an Actor crash.
+ */
+ def postRestart(reason: Throwable) {}
+
+ /** User overridable callback.
+ * <p/>
+ * Is called when a message isn't handled by the current behavior of the actor
+ * by default it throws an UnhandledMessageException
+ */
+ def unhandled(msg: Any) {
+ throw new UnhandledMessageException(msg, self)
+ }
+
+ /** Is the actor able to handle the message passed in as arguments?
+ */
+ def isDefinedAt(message: Any): Boolean = {
+ val behaviorStack = self.hotswap
+ message match { //Same logic as apply(msg) but without the unhandled catch-all
+ case l: AutoReceivedMessage => true
+ case msg if behaviorStack.nonEmpty &&
+ behaviorStack.head.isDefinedAt(msg) => true
+ case msg if behaviorStack.isEmpty &&
+ processingBehavior.isDefinedAt(msg) => true
+ case _ => false
+ }
+ }
+
+ /** Changes the Actor's behavior to become the new 'Receive' (PartialFunction[Any, Unit]) handler.
+ * Puts the behavior on top of the hotswap stack.
+ * If "discardOld" is true, an unbecome will be issued prior to pushing the new behavior to the stack
+ */
+ def become(behavior: Receive, discardOld: Boolean = true) {
+ if (discardOld) unbecome()
+ self.hotswap = self.hotswap.push(behavior)
+ }
+
+ /** Reverts the Actor behavior to the previous one in the hotswap stack.
+ */
+ def unbecome(): Unit = {
+ val h = self.hotswap
+ if (h.nonEmpty) self.hotswap = h.pop
+ }
+
+ // =========================================
+ // ==== INTERNAL IMPLEMENTATION DETAILS ====
+ // =========================================
+
+ private[akka] final def apply(msg: Any) = {
+ if (msg.isInstanceOf[AnyRef] && (msg.asInstanceOf[AnyRef] eq null))
+ throw new InvalidMessageException("Message from [" + self.sender + "] to [" + self.toString + "] is null")
+ val behaviorStack = self.hotswap
+ msg match {
+ case l: AutoReceivedMessage => autoReceiveMessage(l)
+ case msg if behaviorStack.nonEmpty &&
+ behaviorStack.head.isDefinedAt(msg) => behaviorStack.head.apply(msg)
+ case msg if behaviorStack.isEmpty &&
+ processingBehavior.isDefinedAt(msg) => processingBehavior.apply(msg)
+ case unknown => unhandled(unknown) //This is the only line that differs from processingbehavior
+ }
+ }
+
+ private final def autoReceiveMessage(msg: AutoReceivedMessage): Unit = msg match {
+ case HotSwap(code, discardOld) => become(code(self), discardOld)
+ case RevertHotSwap => unbecome()
+ case Exit(dead, reason) => self.handleTrapExit(dead, reason)
+ case Link(child) => self.link(child)
+ case Unlink(child) => self.unlink(child)
+ case UnlinkAndStop(child) => self.unlink(child); child.stop()
+ case Restart(reason) => throw reason
+ case Kill => throw new ActorKilledException("Kill")
+ case PoisonPill =>
+ val f = self.senderFuture
+ self.stop()
+ if (f.isDefined) f.get.completeWithException(new ActorKilledException("PoisonPill"))
+ }
+
+ private lazy val processingBehavior = receive //ProcessingBehavior is the original behavior
+}
+
+private[actor] class AnyOptionAsTypedOption(anyOption: Option[Any]) {
+
+ /** Convenience helper to cast the given Option of Any to an Option of the given type. Will throw a ClassCastException
+ * if the actual type is not assignable from the given one.
+ */
+ def as[T]: Option[T] = narrow[T](anyOption)
+
+ /** Convenience helper to cast the given Option of Any to an Option of the given type. Will swallow a possible
+ * ClassCastException and return None in that case.
+ */
+ def asSilently[T: Manifest]: Option[T] = narrowSilently[T](anyOption)
+}
+
+/** Marker interface for proxyable actors (such as typed actor).
+ *
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+trait Proxyable {
+ private[actor] def swapProxiedActor(newInstance: Actor)
+}
+
+/** Represents the different Actor types.
+ *
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+sealed trait ActorType
+object ActorType {
+ case object ScalaActor extends ActorType
+ case object TypedActor extends ActorType
+}
diff --git a/test/disabled/presentation/akka/src/akka/actor/ActorRef.scala b/test/disabled/presentation/akka/src/akka/actor/ActorRef.scala
new file mode 100644
index 0000000000..ff67c9468e
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/actor/ActorRef.scala
@@ -0,0 +1,1433 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka.actor
+
+import akka.event.EventHandler
+import akka.dispatch._
+import akka.config.Supervision._
+import akka.util._
+import ReflectiveAccess._
+
+import java.net.InetSocketAddress
+import java.util.concurrent.atomic.AtomicReference
+import java.util.concurrent.{ ScheduledFuture, ConcurrentHashMap, TimeUnit }
+import java.util.{ Map => JMap }
+
+import scala.beans.BeanProperty
+import scala.collection.immutable.Stack
+import scala.annotation.tailrec
+
+private[akka] object ActorRefInternals {
+
+ /**
+ * LifeCycles for ActorRefs.
+ */
+ private[akka] sealed trait StatusType
+ object UNSTARTED extends StatusType
+ object RUNNING extends StatusType
+ object BEING_RESTARTED extends StatusType
+ object SHUTDOWN extends StatusType
+}
+
+/**
+ * Abstraction for unification of sender and senderFuture for later reply.
+ * Can be stored away and used at a later point in time.
+ */
+abstract class Channel[T] {
+
+ /**
+ * Scala API. <p/>
+ * Sends the specified message to the channel.
+ */
+ def !(msg: T): Unit
+
+ /**
+ * Java API. <p/>
+ * Sends the specified message to the channel.
+ */
+ def sendOneWay(msg: T): Unit = this.!(msg)
+}
+
+/**
+ * ActorRef is an immutable and serializable handle to an Actor.
+ * <p/>
+ * Create an ActorRef for an Actor by using the factory method on the Actor object.
+ * <p/>
+ * Here is an example on how to create an actor with a default constructor.
+ * <pre>
+ * import Actor._
+ *
+ * val actor = actorOf[MyActor]
+ * actor.start()
+ * actor ! message
+ * actor.stop()
+ * </pre>
+ *
+ * You can also create and start actors like this:
+ * <pre>
+ * val actor = actorOf[MyActor].start()
+ * </pre>
+ *
+ * Here is an example on how to create an actor with a non-default constructor.
+ * <pre>
+ * import Actor._
+ *
+ * val actor = actorOf(new MyActor(...))
+ * actor.start()
+ * actor ! message
+ * actor.stop()
+ * </pre>
+ *
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+trait ActorRef extends ActorRefShared with java.lang.Comparable[ActorRef] { scalaRef: ScalaActorRef =>
+ // Only mutable for RemoteServer in order to maintain identity across nodes
+ @volatile
+ protected[akka] var _uuid = newUuid
+ @volatile
+ protected[this] var _status: ActorRefInternals.StatusType = ActorRefInternals.UNSTARTED
+
+ /**
+ * User overridable callback/setting.
+ * <p/>
+ * Identifier for actor, does not have to be a unique one. Default is the 'uuid'.
+ * <p/>
+ * This field is used for logging, AspectRegistry.actorsFor(id), identifier for remote
+ * actor in RemoteServer etc.But also as the identifier for persistence, which means
+ * that you can use a custom name to be able to retrieve the "correct" persisted state
+ * upon restart, remote restart etc.
+ */
+ @BeanProperty
+ @volatile
+ var id: String = _uuid.toString
+
+ /**
+ * User overridable callback/setting.
+ * <p/>
+ * Defines the default timeout for '!!' and '!!!' invocations,
+ * e.g. the timeout for the future returned by the call to '!!' and '!!!'.
+ */
+ @deprecated("Will be replaced by implicit-scoped timeout on all methods that needs it, will default to timeout specified in config", "1.1")
+ @BeanProperty
+ @volatile
+ var timeout: Long = Actor.TIMEOUT
+
+ /**
+ * User overridable callback/setting.
+ * <p/>
+ * Defines the default timeout for an initial receive invocation.
+ * When specified, the receive function should be able to handle a 'ReceiveTimeout' message.
+ */
+ @volatile
+ var receiveTimeout: Option[Long] = None
+
+ /**
+ * Akka Java API. <p/>
+ * Defines the default timeout for an initial receive invocation.
+ * When specified, the receive function should be able to handle a 'ReceiveTimeout' message.
+ */
+ def setReceiveTimeout(timeout: Long) = this.receiveTimeout = Some(timeout)
+ def getReceiveTimeout(): Option[Long] = receiveTimeout
+
+ /**
+ * Akka Java API. <p/>
+ * A faultHandler defines what should be done when a linked actor signals an error.
+ * <p/>
+ * Can be one of:
+ * <pre>
+ * getContext().setFaultHandler(new AllForOneStrategy(new Class[]{Throwable.class},maxNrOfRetries, withinTimeRange));
+ * </pre>
+ * Or:
+ * <pre>
+ * getContext().setFaultHandler(new OneForOneStrategy(new Class[]{Throwable.class},maxNrOfRetries, withinTimeRange));
+ * </pre>
+ */
+ def setFaultHandler(handler: FaultHandlingStrategy)
+ def getFaultHandler(): FaultHandlingStrategy
+
+ /**
+ * Akka Java API. <p/>
+ * A lifeCycle defines whether the actor will be stopped on error (Temporary) or if it can be restarted (Permanent)
+ * <p/>
+ * Can be one of:
+ *
+ * import static akka.config.Supervision.*;
+ * <pre>
+ * getContext().setLifeCycle(permanent());
+ * </pre>
+ * Or:
+ * <pre>
+ * getContext().setLifeCycle(temporary());
+ * </pre>
+ */
+ def setLifeCycle(lifeCycle: LifeCycle): Unit
+ def getLifeCycle(): LifeCycle
+
+ /**
+ * Akka Java API. <p/>
+ * The default dispatcher is the <tt>Dispatchers.globalExecutorBasedEventDrivenDispatcher</tt>.
+ * This means that all actors will share the same event-driven executor based dispatcher.
+ * <p/>
+ * You can override it so it fits the specific use-case that the actor is used for.
+ * See the <tt>akka.dispatch.Dispatchers</tt> class for the different
+ * dispatchers available.
+ * <p/>
+ * The default is also that all actors that are created and spawned from within this actor
+ * is sharing the same dispatcher as its creator.
+ */
+ def setDispatcher(dispatcher: MessageDispatcher) = this.dispatcher = dispatcher
+ def getDispatcher(): MessageDispatcher = dispatcher
+
+ /**
+ * Returns on which node this actor lives if None it lives in the local ActorRegistry
+ */
+ @deprecated("Remoting will become fully transparent in the future", "1.1")
+ def homeAddress: Option[InetSocketAddress]
+
+ /**
+ * Java API. <p/>
+ */
+ @deprecated("Remoting will become fully transparent in the future", "1.1")
+ def getHomeAddress(): InetSocketAddress = homeAddress getOrElse null
+
+ /**
+ * Holds the hot swapped partial function.
+ */
+ @volatile
+ protected[akka] var hotswap = Stack[PartialFunction[Any, Unit]]()
+
+ /**
+ * This is a reference to the message currently being processed by the actor
+ */
+ @volatile
+ protected[akka] var currentMessage: MessageInvocation = null
+
+ /**
+ * Comparison only takes uuid into account.
+ */
+ def compareTo(other: ActorRef) = this.uuid compareTo other.uuid
+
+ /**
+ * Returns the uuid for the actor.
+ */
+ def getUuid() = _uuid
+ def uuid = _uuid
+
+ /**
+ * Akka Java API. <p/>
+ * The reference sender Actor of the last received message.
+ * Is defined if the message was sent from another Actor, else None.
+ */
+ def getSender(): Option[ActorRef] = sender
+
+ /**
+ * Akka Java API. <p/>
+ * The reference sender future of the last received message.
+ * Is defined if the message was sent with sent with '!!' or '!!!', else None.
+ */
+ def getSenderFuture(): Option[CompletableFuture[Any]] = senderFuture
+
+ /**
+ * Is the actor being restarted?
+ */
+ def isBeingRestarted: Boolean = _status == ActorRefInternals.BEING_RESTARTED
+
+ /**
+ * Is the actor running?
+ */
+ def isRunning: Boolean = _status match {
+ case ActorRefInternals.BEING_RESTARTED | ActorRefInternals.RUNNING => true
+ case _ => false
+ }
+
+ /**
+ * Is the actor shut down?
+ */
+ def isShutdown: Boolean = _status == ActorRefInternals.SHUTDOWN
+
+ /**
+ * Is the actor ever started?
+ */
+ def isUnstarted: Boolean = _status == ActorRefInternals.UNSTARTED
+
+ /**
+ * Is the actor able to handle the message passed in as arguments?
+ */
+ @deprecated("Will be removed without replacement, it's just not reliable in the face of `become` and `unbecome`", "1.1")
+ def isDefinedAt(message: Any): Boolean = actor.isDefinedAt(message)
+
+ /**
+ * Only for internal use. UUID is effectively final.
+ */
+ protected[akka] def uuid_=(uid: Uuid) = _uuid = uid
+
+ /**
+ * Akka Java API. <p/>
+ * Sends a one-way asynchronous message. E.g. fire-and-forget semantics.
+ * <p/>
+ * <pre>
+ * actor.sendOneWay(message);
+ * </pre>
+ * <p/>
+ */
+ def sendOneWay(message: AnyRef): Unit = sendOneWay(message, null)
+
+ /**
+ * Akka Java API. <p/>
+ * Sends a one-way asynchronous message. E.g. fire-and-forget semantics.
+ * <p/>
+ * Allows you to pass along the sender of the message.
+ * <p/>
+ * <pre>
+ * actor.sendOneWay(message, context);
+ * </pre>
+ * <p/>
+ */
+ def sendOneWay(message: AnyRef, sender: ActorRef): Unit = this.!(message)(Option(sender))
+
+ /**
+ * Akka Java API. <p/>
+ * @see sendRequestReply(message: AnyRef, timeout: Long, sender: ActorRef)
+ * Uses the default timeout of the Actor (setTimeout()) and omits the sender reference
+ */
+ def sendRequestReply(message: AnyRef): AnyRef = sendRequestReply(message, timeout, null)
+
+ /**
+ * Akka Java API. <p/>
+ * @see sendRequestReply(message: AnyRef, timeout: Long, sender: ActorRef)
+ * Uses the default timeout of the Actor (setTimeout())
+ */
+ def sendRequestReply(message: AnyRef, sender: ActorRef): AnyRef = sendRequestReply(message, timeout, sender)
+
+ /**
+ * Akka Java API. <p/>
+ * Sends a message asynchronously and waits on a future for a reply message under the hood.
+ * <p/>
+ * It waits on the reply either until it receives it or until the timeout expires
+ * (which will throw an ActorTimeoutException). E.g. send-and-receive-eventually semantics.
+ * <p/>
+ * <b>NOTE:</b>
+ * Use this method with care. In most cases it is better to use 'sendOneWay' together with 'getContext().getSender()' to
+ * implement request/response message exchanges.
+ * <p/>
+ * If you are sending messages using <code>sendRequestReply</code> then you <b>have to</b> use <code>getContext().reply(..)</code>
+ * to send a reply message to the original sender. If not then the sender will block until the timeout expires.
+ */
+ def sendRequestReply(message: AnyRef, timeout: Long, sender: ActorRef): AnyRef = {
+ !!(message, timeout)(Option(sender)).getOrElse(throw new ActorTimeoutException(
+ "Message [" + message +
+ "]\n\tsent to [" + actorClassName +
+ "]\n\tfrom [" + (if (sender ne null) sender.actorClassName else "nowhere") +
+ "]\n\twith timeout [" + timeout +
+ "]\n\ttimed out."))
+ .asInstanceOf[AnyRef]
+ }
+
+ /**
+ * Akka Java API. <p/>
+ * @see sendRequestReplyFuture(message: AnyRef, sender: ActorRef): Future[_]
+ * Uses the Actors default timeout (setTimeout()) and omits the sender
+ */
+ def sendRequestReplyFuture[T <: AnyRef](message: AnyRef): Future[T] = sendRequestReplyFuture(message, timeout, null).asInstanceOf[Future[T]]
+
+ /**
+ * Akka Java API. <p/>
+ * @see sendRequestReplyFuture(message: AnyRef, sender: ActorRef): Future[_]
+ * Uses the Actors default timeout (setTimeout())
+ */
+ def sendRequestReplyFuture[T <: AnyRef](message: AnyRef, sender: ActorRef): Future[T] = sendRequestReplyFuture(message, timeout, sender).asInstanceOf[Future[T]]
+
+ /**
+ * Akka Java API. <p/>
+ * Sends a message asynchronously returns a future holding the eventual reply message.
+ * <p/>
+ * <b>NOTE:</b>
+ * Use this method with care. In most cases it is better to use 'sendOneWay' together with the 'getContext().getSender()' to
+ * implement request/response message exchanges.
+ * <p/>
+ * If you are sending messages using <code>sendRequestReplyFuture</code> then you <b>have to</b> use <code>getContext().reply(..)</code>
+ * to send a reply message to the original sender. If not then the sender will block until the timeout expires.
+ */
+ def sendRequestReplyFuture[T <: AnyRef](message: AnyRef, timeout: Long, sender: ActorRef): Future[T] = !!!(message, timeout)(Option(sender)).asInstanceOf[Future[T]]
+
+ /**
+ * Akka Java API. <p/>
+ * Forwards the message specified to this actor and preserves the original sender of the message
+ */
+ def forward(message: AnyRef, sender: ActorRef): Unit =
+ if (sender eq null) throw new IllegalArgumentException("The 'sender' argument to 'forward' can't be null")
+ else forward(message)(Some(sender))
+
+ /**
+ * Akka Java API. <p/>
+ * Use <code>getContext().replyUnsafe(..)</code> to reply with a message to the original sender of the message currently
+ * being processed.
+ * <p/>
+ * Throws an IllegalStateException if unable to determine what to reply to.
+ */
+ def replyUnsafe(message: AnyRef) = reply(message)
+
+ /**
+ * Akka Java API. <p/>
+ * Use <code>getContext().replySafe(..)</code> to reply with a message to the original sender of the message currently
+ * being processed.
+ * <p/>
+ * Returns true if reply was sent, and false if unable to determine what to reply to.
+ */
+ def replySafe(message: AnyRef): Boolean = reply_?(message)
+
+ /**
+ * Returns the class for the Actor instance that is managed by the ActorRef.
+ */
+ @deprecated("Will be removed without replacement, doesn't make any sense to have in the face of `become` and `unbecome`", "1.1")
+ def actorClass: Class[_ <: Actor]
+
+ /**
+ * Akka Java API. <p/>
+ * Returns the class for the Actor instance that is managed by the ActorRef.
+ */
+ @deprecated("Will be removed without replacement, doesn't make any sense to have in the face of `become` and `unbecome`", "1.1")
+ def getActorClass(): Class[_ <: Actor] = actorClass
+
+ /**
+ * Returns the class name for the Actor instance that is managed by the ActorRef.
+ */
+ @deprecated("Will be removed without replacement, doesn't make any sense to have in the face of `become` and `unbecome`", "1.1")
+ def actorClassName: String
+
+ /**
+ * Akka Java API. <p/>
+ * Returns the class name for the Actor instance that is managed by the ActorRef.
+ */
+ @deprecated("Will be removed without replacement, doesn't make any sense to have in the face of `become` and `unbecome`", "1.1")
+ def getActorClassName(): String = actorClassName
+
+ /**
+ * Sets the dispatcher for this actor. Needs to be invoked before the actor is started.
+ */
+ def dispatcher_=(md: MessageDispatcher): Unit
+
+ /**
+ * Get the dispatcher for this actor.
+ */
+ def dispatcher: MessageDispatcher
+
+ /**
+ * Starts up the actor and its message queue.
+ */
+ def start(): ActorRef
+
+ /**
+ * Shuts down the actor its dispatcher and message queue.
+ * Alias for 'stop'.
+ */
+ def exit() = stop()
+
+ /**
+ * Shuts down the actor its dispatcher and message queue.
+ */
+ def stop(): Unit
+
+ /**
+ * Links an other actor to this actor. Links are unidirectional and means that a the linking actor will
+ * receive a notification if the linked actor has crashed.
+ * <p/>
+ * If the 'trapExit' member field of the 'faultHandler' has been set to at contain at least one exception class then it will
+ * 'trap' these exceptions and automatically restart the linked actors according to the restart strategy
+ * defined by the 'faultHandler'.
+ */
+ def link(actorRef: ActorRef): Unit
+
+ /**
+ * Unlink the actor.
+ */
+ def unlink(actorRef: ActorRef): Unit
+
+ /**
+ * Atomically start and link an actor.
+ */
+ def startLink(actorRef: ActorRef): Unit
+
+ /**
+ * Atomically create (from actor class) and start an actor.
+ * <p/>
+ * To be invoked from within the actor itself.
+ */
+ @deprecated("Will be removed after 1.1, use Actor.actorOf instead", "1.1")
+ def spawn(clazz: Class[_ <: Actor]): ActorRef
+
+ /**
+ * Atomically create (from actor class), make it remote and start an actor.
+ * <p/>
+ * To be invoked from within the actor itself.
+ */
+ @deprecated("Will be removed after 1.1, client managed actors will be removed", "1.1")
+ def spawnRemote(clazz: Class[_ <: Actor], hostname: String, port: Int, timeout: Long): ActorRef
+
+ /**
+ * Atomically create (from actor class), link and start an actor.
+ * <p/>
+ * To be invoked from within the actor itself.
+ */
+ @deprecated("Will be removed after 1.1, use Actor.remote.actorOf instead and then link on success", "1.1")
+ def spawnLink(clazz: Class[_ <: Actor]): ActorRef
+
+ /**
+ * Atomically create (from actor class), make it remote, link and start an actor.
+ * <p/>
+ * To be invoked from within the actor itself.
+ */
+ @deprecated("Will be removed after 1.1, client managed actors will be removed", "1.1")
+ def spawnLinkRemote(clazz: Class[_ <: Actor], hostname: String, port: Int, timeout: Long): ActorRef
+
+ /**
+ * Returns the mailbox size.
+ */
+ def mailboxSize = dispatcher.mailboxSize(this)
+
+ /**
+ * Akka Java API. <p/>
+ * Returns the mailbox size.
+ */
+ def getMailboxSize(): Int = mailboxSize
+
+ /**
+ * Returns the supervisor, if there is one.
+ */
+ def supervisor: Option[ActorRef]
+
+ /**
+ * Akka Java API. <p/>
+ * Returns the supervisor, if there is one.
+ */
+ def getSupervisor(): ActorRef = supervisor getOrElse null
+
+ /**
+ * Returns an unmodifiable Java Map containing the linked actors,
+ * please note that the backing map is thread-safe but not immutable
+ */
+ def linkedActors: JMap[Uuid, ActorRef]
+
+ /**
+ * Java API. <p/>
+ * Returns an unmodifiable Java Map containing the linked actors,
+ * please note that the backing map is thread-safe but not immutable
+ */
+ def getLinkedActors(): JMap[Uuid, ActorRef] = linkedActors
+
+ /**
+ * Abstraction for unification of sender and senderFuture for later reply
+ */
+ def channel: Channel[Any] = {
+ if (senderFuture.isDefined) {
+ new Channel[Any] {
+ val future = senderFuture.get
+ def !(msg: Any) = future completeWithResult msg
+ }
+ } else if (sender.isDefined) {
+ val someSelf = Some(this)
+ new Channel[Any] {
+ val client = sender.get
+ def !(msg: Any) = client.!(msg)(someSelf)
+ }
+ } else throw new IllegalActorStateException("No channel available")
+ }
+
+ /**
+ * Java API. <p/>
+ * Abstraction for unification of sender and senderFuture for later reply
+ */
+ def getChannel: Channel[Any] = channel
+
+ protected[akka] def invoke(messageHandle: MessageInvocation): Unit
+
+ protected[akka] def postMessageToMailbox(message: Any, senderOption: Option[ActorRef]): Unit
+
+ protected[akka] def postMessageToMailboxAndCreateFutureResultWithTimeout[T](
+ message: Any,
+ timeout: Long,
+ senderOption: Option[ActorRef],
+ senderFuture: Option[CompletableFuture[T]]): CompletableFuture[T]
+
+ protected[akka] def actorInstance: AtomicReference[Actor]
+
+ protected[akka] def actor: Actor = actorInstance.get
+
+ protected[akka] def supervisor_=(sup: Option[ActorRef]): Unit
+
+ protected[akka] def mailbox: AnyRef
+ protected[akka] def mailbox_=(value: AnyRef): AnyRef
+
+ protected[akka] def handleTrapExit(dead: ActorRef, reason: Throwable): Unit
+
+ protected[akka] def restart(reason: Throwable, maxNrOfRetries: Option[Int], withinTimeRange: Option[Int]): Unit
+
+ protected[akka] def restartLinkedActors(reason: Throwable, maxNrOfRetries: Option[Int], withinTimeRange: Option[Int]): Unit
+
+ protected[akka] def registerSupervisorAsRemoteActor: Option[Uuid]
+
+ override def hashCode: Int = HashCode.hash(HashCode.SEED, uuid)
+
+ override def equals(that: Any): Boolean = {
+ that.isInstanceOf[ActorRef] &&
+ that.asInstanceOf[ActorRef].uuid == uuid
+ }
+
+ override def toString = "Actor[" + id + ":" + uuid + "]"
+}
+
+/**
+ * Local (serializable) ActorRef that is used when referencing the Actor on its "home" node.
+ *
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+class LocalActorRef private[akka] (
+ private[this] val actorFactory: () => Actor,
+ val homeAddress: Option[InetSocketAddress],
+ val clientManaged: Boolean = false)
+ extends ActorRef with ScalaActorRef {
+ protected[akka] val guard = new ReentrantGuard
+
+ @volatile
+ protected[akka] var _futureTimeout: Option[ScheduledFuture[AnyRef]] = None
+ @volatile
+ private[akka] lazy val _linkedActors = new ConcurrentHashMap[Uuid, ActorRef]
+ @volatile
+ private[akka] var _supervisor: Option[ActorRef] = None
+ @volatile
+ private var maxNrOfRetriesCount: Int = 0
+ @volatile
+ private var restartsWithinTimeRangeTimestamp: Long = 0L
+ @volatile
+ private var _mailbox: AnyRef = _
+ @volatile
+ private[akka] var _dispatcher: MessageDispatcher = Dispatchers.defaultGlobalDispatcher
+
+ protected[akka] val actorInstance = guard.withGuard { new AtomicReference[Actor](newActor) }
+
+ //If it was started inside "newActor", initialize it
+ if (isRunning) initializeActorInstance
+
+ // used only for deserialization
+ private[akka] def this(
+ __uuid: Uuid,
+ __id: String,
+ __timeout: Long,
+ __receiveTimeout: Option[Long],
+ __lifeCycle: LifeCycle,
+ __supervisor: Option[ActorRef],
+ __hotswap: Stack[PartialFunction[Any, Unit]],
+ __factory: () => Actor,
+ __homeAddress: Option[InetSocketAddress]) = {
+ this(__factory, __homeAddress)
+ _uuid = __uuid
+ id = __id
+ timeout = __timeout
+ receiveTimeout = __receiveTimeout
+ lifeCycle = __lifeCycle
+ _supervisor = __supervisor
+ hotswap = __hotswap
+ setActorSelfFields(actor, this)
+ start
+ }
+
+ /**
+ * Returns whether this actor ref is client-managed remote or not
+ */
+ private[akka] final def isClientManaged_? = clientManaged && homeAddress.isDefined && isRemotingEnabled
+
+ // ========= PUBLIC FUNCTIONS =========
+
+ /**
+ * Returns the class for the Actor instance that is managed by the ActorRef.
+ */
+ @deprecated("Will be removed without replacement, doesn't make any sense to have in the face of `become` and `unbecome`", "1.1")
+ def actorClass: Class[_ <: Actor] = actor.getClass.asInstanceOf[Class[_ <: Actor]]
+
+ /**
+ * Returns the class name for the Actor instance that is managed by the ActorRef.
+ */
+ @deprecated("Will be removed without replacement, doesn't make any sense to have in the face of `become` and `unbecome`", "1.1")
+ def actorClassName: String = actorClass.getName
+
+ /**
+ * Sets the dispatcher for this actor. Needs to be invoked before the actor is started.
+ */
+ def dispatcher_=(md: MessageDispatcher): Unit = guard.withGuard {
+ if (!isBeingRestarted) {
+ if (!isRunning) _dispatcher = md
+ else throw new ActorInitializationException(
+ "Can not swap dispatcher for " + toString + " after it has been started")
+ }
+ }
+
+ /**
+ * Get the dispatcher for this actor.
+ */
+ def dispatcher: MessageDispatcher = _dispatcher
+
+ /**
+ * Starts up the actor and its message queue.
+ */
+ def start(): ActorRef = guard.withGuard {
+ if (isShutdown) throw new ActorStartException(
+ "Can't restart an actor that has been shut down with 'stop' or 'exit'")
+ if (!isRunning) {
+ dispatcher.attach(this)
+
+ _status = ActorRefInternals.RUNNING
+
+ // If we are not currently creating this ActorRef instance
+ if ((actorInstance ne null) && (actorInstance.get ne null))
+ initializeActorInstance
+
+ if (isClientManaged_?)
+ Actor.remote.registerClientManagedActor(homeAddress.get.getAddress.getHostAddress, homeAddress.get.getPort, uuid)
+
+ checkReceiveTimeout //Schedule the initial Receive timeout
+ }
+ this
+ }
+
+ /**
+ * Shuts down the actor its dispatcher and message queue.
+ */
+ def stop() = guard.withGuard {
+ if (isRunning) {
+ receiveTimeout = None
+ cancelReceiveTimeout
+ dispatcher.detach(this)
+ _status = ActorRefInternals.SHUTDOWN
+ try {
+ actor.postStop
+ } finally {
+ currentMessage = null
+ Actor.registry.unregister(this)
+ if (isRemotingEnabled) {
+ if (isClientManaged_?)
+ Actor.remote.unregisterClientManagedActor(homeAddress.get.getAddress.getHostAddress, homeAddress.get.getPort, uuid)
+ Actor.remote.unregister(this)
+ }
+ setActorSelfFields(actorInstance.get, null)
+ }
+ } //else if (isBeingRestarted) throw new ActorKilledException("Actor [" + toString + "] is being restarted.")
+ }
+
+ /**
+ * Links an other actor to this actor. Links are unidirectional and means that a the linking actor will
+ * receive a notification if the linked actor has crashed.
+ * <p/>
+ * If the 'trapExit' member field of the 'faultHandler' has been set to at contain at least one exception class then it will
+ * 'trap' these exceptions and automatically restart the linked actors according to the restart strategy
+ * defined by the 'faultHandler'.
+ * <p/>
+ * To be invoked from within the actor itself.
+ */
+ def link(actorRef: ActorRef): Unit = guard.withGuard {
+ val actorRefSupervisor = actorRef.supervisor
+ val hasSupervisorAlready = actorRefSupervisor.isDefined
+ if (hasSupervisorAlready && actorRefSupervisor.get.uuid == uuid) return // we already supervise this guy
+ else if (hasSupervisorAlready) throw new IllegalActorStateException(
+ "Actor can only have one supervisor [" + actorRef + "], e.g. link(actor) fails")
+ else {
+ _linkedActors.put(actorRef.uuid, actorRef)
+ actorRef.supervisor = Some(this)
+ }
+ }
+
+ /**
+ * Unlink the actor.
+ * <p/>
+ * To be invoked from within the actor itself.
+ */
+ def unlink(actorRef: ActorRef) = guard.withGuard {
+ if (_linkedActors.remove(actorRef.uuid) eq null)
+ throw new IllegalActorStateException("Actor [" + actorRef + "] is not a linked actor, can't unlink")
+
+ actorRef.supervisor = None
+ }
+
+ /**
+ * Atomically start and link an actor.
+ * <p/>
+ * To be invoked from within the actor itself.
+ */
+ def startLink(actorRef: ActorRef): Unit = guard.withGuard {
+ link(actorRef)
+ actorRef.start()
+ }
+
+ /**
+ * Atomically create (from actor class) and start an actor.
+ * <p/>
+ * To be invoked from within the actor itself.
+ */
+ def spawn(clazz: Class[_ <: Actor]): ActorRef =
+ Actor.actorOf(clazz).start()
+
+ /**
+ * Atomically create (from actor class), start and make an actor remote.
+ * <p/>
+ * To be invoked from within the actor itself.
+ */
+ def spawnRemote(clazz: Class[_ <: Actor], hostname: String, port: Int, timeout: Long = Actor.TIMEOUT): ActorRef = {
+ ensureRemotingEnabled
+ val ref = Actor.remote.actorOf(clazz, hostname, port)
+ ref.timeout = timeout
+ ref.start()
+ }
+
+ /**
+ * Atomically create (from actor class), start and link an actor.
+ * <p/>
+ * To be invoked from within the actor itself.
+ */
+ def spawnLink(clazz: Class[_ <: Actor]): ActorRef = {
+ val actor = spawn(clazz)
+ link(actor)
+ actor.start()
+ actor
+ }
+
+ /**
+ * Atomically create (from actor class), start, link and make an actor remote.
+ * <p/>
+ * To be invoked from within the actor itself.
+ */
+ def spawnLinkRemote(clazz: Class[_ <: Actor], hostname: String, port: Int, timeout: Long = Actor.TIMEOUT): ActorRef = {
+ ensureRemotingEnabled
+ val actor = Actor.remote.actorOf(clazz, hostname, port)
+ actor.timeout = timeout
+ link(actor)
+ actor.start()
+ actor
+ }
+
+ /**
+ * Returns the mailbox.
+ */
+ def mailbox: AnyRef = _mailbox
+
+ protected[akka] def mailbox_=(value: AnyRef): AnyRef = { _mailbox = value; value }
+
+ /**
+ * Returns the supervisor, if there is one.
+ */
+ def supervisor: Option[ActorRef] = _supervisor
+
+ // ========= AKKA PROTECTED FUNCTIONS =========
+
+ protected[akka] def supervisor_=(sup: Option[ActorRef]): Unit = _supervisor = sup
+
+ protected[akka] def postMessageToMailbox(message: Any, senderOption: Option[ActorRef]): Unit =
+ if (isClientManaged_?) {
+ Actor.remote.send[Any](
+ message, senderOption, None, homeAddress.get, timeout, true, this, None, ActorType.ScalaActor, None)
+ } else
+ dispatcher dispatchMessage new MessageInvocation(this, message, senderOption, None)
+
+ protected[akka] def postMessageToMailboxAndCreateFutureResultWithTimeout[T](
+ message: Any,
+ timeout: Long,
+ senderOption: Option[ActorRef],
+ senderFuture: Option[CompletableFuture[T]]): CompletableFuture[T] = {
+ if (isClientManaged_?) {
+ val future = Actor.remote.send[T](
+ message, senderOption, senderFuture, homeAddress.get, timeout, false, this, None, ActorType.ScalaActor, None)
+ if (future.isDefined) future.get
+ else throw new IllegalActorStateException("Expected a future from remote call to actor " + toString)
+ } else {
+ val future = if (senderFuture.isDefined) senderFuture else Some(new DefaultCompletableFuture[T](timeout))
+ dispatcher dispatchMessage new MessageInvocation(
+ this, message, senderOption, future.asInstanceOf[Some[CompletableFuture[Any]]])
+ future.get
+ }
+ }
+
+ /**
+ * Callback for the dispatcher. This is the single entry point to the user Actor implementation.
+ */
+ protected[akka] def invoke(messageHandle: MessageInvocation): Unit = {
+ guard.lock.lock
+ try {
+ if (!isShutdown) {
+ currentMessage = messageHandle
+ try {
+ try {
+ cancelReceiveTimeout // FIXME: leave this here?
+ actor(messageHandle.message)
+ currentMessage = null // reset current message after successful invocation
+ } catch {
+ case e: InterruptedException =>
+ currentMessage = null // received message while actor is shutting down, ignore
+ case e =>
+ handleExceptionInDispatch(e, messageHandle.message)
+ }
+ finally {
+ checkReceiveTimeout // Reschedule receive timeout
+ }
+ } catch {
+ case e =>
+ EventHandler.error(e, this, messageHandle.message.toString)
+ throw e
+ }
+ }
+ } finally { guard.lock.unlock }
+ }
+
+ protected[akka] def handleTrapExit(dead: ActorRef, reason: Throwable) {
+ faultHandler match {
+ case AllForOneStrategy(trapExit, maxRetries, within) if trapExit.exists(_.isAssignableFrom(reason.getClass)) =>
+ restartLinkedActors(reason, maxRetries, within)
+
+ case OneForOneStrategy(trapExit, maxRetries, within) if trapExit.exists(_.isAssignableFrom(reason.getClass)) =>
+ dead.restart(reason, maxRetries, within)
+
+ case _ =>
+ if (_supervisor.isDefined) notifySupervisorWithMessage(Exit(this, reason))
+ else dead.stop()
+ }
+ }
+
+ private def requestRestartPermission(maxNrOfRetries: Option[Int], withinTimeRange: Option[Int]): Boolean = {
+ val denied = if (maxNrOfRetries.isEmpty && withinTimeRange.isEmpty) { //Immortal
+ false
+ } else if (withinTimeRange.isEmpty) { // restrict number of restarts
+ maxNrOfRetriesCount += 1 //Increment number of retries
+ maxNrOfRetriesCount > maxNrOfRetries.get
+ } else { // cannot restart more than N within M timerange
+ maxNrOfRetriesCount += 1 //Increment number of retries
+ val windowStart = restartsWithinTimeRangeTimestamp
+ val now = System.currentTimeMillis
+ val retries = maxNrOfRetriesCount
+ //We are within the time window if it isn't the first restart, or if the window hasn't closed
+ val insideWindow = if (windowStart == 0) false
+ else (now - windowStart) <= withinTimeRange.get
+
+ //The actor is dead if it dies X times within the window of restart
+ val unrestartable = insideWindow && retries > maxNrOfRetries.getOrElse(1)
+
+ if (windowStart == 0 || !insideWindow) //(Re-)set the start of the window
+ restartsWithinTimeRangeTimestamp = now
+
+ if (windowStart != 0 && !insideWindow) //Reset number of restarts if window has expired
+ maxNrOfRetriesCount = 1
+
+ unrestartable
+ }
+
+ denied == false //If we weren't denied, we have a go
+ }
+
+ protected[akka] def restart(reason: Throwable, maxNrOfRetries: Option[Int], withinTimeRange: Option[Int]) {
+ def performRestart() {
+ val failedActor = actorInstance.get
+
+ failedActor match {
+ case p: Proxyable =>
+ failedActor.preRestart(reason)
+ failedActor.postRestart(reason)
+ case _ =>
+ failedActor.preRestart(reason)
+ val freshActor = newActor
+ setActorSelfFields(failedActor, null) // Only null out the references if we could instantiate the new actor
+ actorInstance.set(freshActor) // Assign it here so if preStart fails, we can null out the sef-refs next call
+ freshActor.preStart
+ freshActor.postRestart(reason)
+ }
+ }
+
+ def tooManyRestarts() {
+ _supervisor.foreach { sup =>
+ // can supervisor handle the notification?
+ val notification = MaximumNumberOfRestartsWithinTimeRangeReached(this, maxNrOfRetries, withinTimeRange, reason)
+ if (sup.isDefinedAt(notification)) notifySupervisorWithMessage(notification)
+ }
+ stop
+ }
+
+ @tailrec
+ def attemptRestart() {
+ val success = if (requestRestartPermission(maxNrOfRetries, withinTimeRange)) {
+ guard.withGuard[Boolean] {
+ _status = ActorRefInternals.BEING_RESTARTED
+
+ lifeCycle match {
+ case Temporary =>
+ shutDownTemporaryActor(this)
+ true
+
+ case _ => // either permanent or none where default is permanent
+ val success = try {
+ performRestart()
+ true
+ } catch {
+ case e =>
+ EventHandler.error(e, this, "Exception in restart of Actor [%s]".format(toString))
+ false // an error or exception here should trigger a retry
+ }
+ finally {
+ currentMessage = null
+ }
+ if (success) {
+ _status = ActorRefInternals.RUNNING
+ dispatcher.resume(this)
+ restartLinkedActors(reason, maxNrOfRetries, withinTimeRange)
+ }
+ success
+ }
+ }
+ } else {
+ tooManyRestarts()
+ true // done
+ }
+
+ if (success) () // alles gut
+ else attemptRestart()
+ }
+
+ attemptRestart() // recur
+ }
+
+ protected[akka] def restartLinkedActors(reason: Throwable, maxNrOfRetries: Option[Int], withinTimeRange: Option[Int]) = {
+ val i = _linkedActors.values.iterator
+ while (i.hasNext) {
+ val actorRef = i.next
+ actorRef.lifeCycle match {
+ // either permanent or none where default is permanent
+ case Temporary => shutDownTemporaryActor(actorRef)
+ case _ => actorRef.restart(reason, maxNrOfRetries, withinTimeRange)
+ }
+ }
+ }
+
+ protected[akka] def registerSupervisorAsRemoteActor: Option[Uuid] = guard.withGuard {
+ ensureRemotingEnabled
+ if (_supervisor.isDefined) {
+ if (homeAddress.isDefined) Actor.remote.registerSupervisorForActor(this)
+ Some(_supervisor.get.uuid)
+ } else None
+ }
+
+ def linkedActors: JMap[Uuid, ActorRef] = java.util.Collections.unmodifiableMap(_linkedActors)
+
+ // ========= PRIVATE FUNCTIONS =========
+
+ private[this] def newActor: Actor = {
+ try {
+ Actor.actorRefInCreation.set(Some(this))
+ val a = actorFactory()
+ if (a eq null) throw new ActorInitializationException("Actor instance passed to ActorRef can not be 'null'")
+ a
+ } finally {
+ Actor.actorRefInCreation.set(None)
+ }
+ }
+
+ private def shutDownTemporaryActor(temporaryActor: ActorRef) {
+ temporaryActor.stop()
+ _linkedActors.remove(temporaryActor.uuid) // remove the temporary actor
+ // if last temporary actor is gone, then unlink me from supervisor
+ if (_linkedActors.isEmpty) notifySupervisorWithMessage(UnlinkAndStop(this))
+ true
+ }
+
+ private def handleExceptionInDispatch(reason: Throwable, message: Any) = {
+ EventHandler.error(reason, this, message.toString)
+
+ //Prevent any further messages to be processed until the actor has been restarted
+ dispatcher.suspend(this)
+
+ senderFuture.foreach(_.completeWithException(reason))
+
+ if (supervisor.isDefined) notifySupervisorWithMessage(Exit(this, reason))
+ else {
+ lifeCycle match {
+ case Temporary => shutDownTemporaryActor(this)
+ case _ => dispatcher.resume(this) //Resume processing for this actor
+ }
+ }
+ }
+
+ private def notifySupervisorWithMessage(notification: LifeCycleMessage) = {
+ // FIXME to fix supervisor restart of remote actor for oneway calls, inject a supervisor proxy that can send notification back to client
+ _supervisor.foreach { sup =>
+ if (sup.isShutdown) { // if supervisor is shut down, game over for all linked actors
+ //Scoped stop all linked actors, to avoid leaking the 'i' val
+ {
+ val i = _linkedActors.values.iterator
+ while (i.hasNext) {
+ i.next.stop()
+ i.remove
+ }
+ }
+ //Stop the actor itself
+ stop
+ } else sup ! notification // else notify supervisor
+ }
+ }
+
+ private def setActorSelfFields(actor: Actor, value: ActorRef) {
+
+ @tailrec
+ def lookupAndSetSelfFields(clazz: Class[_], actor: Actor, value: ActorRef): Boolean = {
+ val success = try {
+ val selfField = clazz.getDeclaredField("self")
+ val someSelfField = clazz.getDeclaredField("someSelf")
+ selfField.setAccessible(true)
+ someSelfField.setAccessible(true)
+ selfField.set(actor, value)
+ someSelfField.set(actor, if (value ne null) Some(value) else null)
+ true
+ } catch {
+ case e: NoSuchFieldException => false
+ }
+
+ if (success) true
+ else {
+ val parent = clazz.getSuperclass
+ if (parent eq null)
+ throw new IllegalActorStateException(toString + " is not an Actor since it have not mixed in the 'Actor' trait")
+ lookupAndSetSelfFields(parent, actor, value)
+ }
+ }
+
+ lookupAndSetSelfFields(actor.getClass, actor, value)
+ }
+
+ private def initializeActorInstance = {
+ actor.preStart // run actor preStart
+ Actor.registry.register(this)
+ }
+
+ protected[akka] def checkReceiveTimeout = {
+ cancelReceiveTimeout
+ if (receiveTimeout.isDefined && dispatcher.mailboxSize(this) <= 0) { //Only reschedule if desired and there are currently no more messages to be processed
+ _futureTimeout = Some(Scheduler.scheduleOnce(this, ReceiveTimeout, receiveTimeout.get, TimeUnit.MILLISECONDS))
+ }
+ }
+
+ protected[akka] def cancelReceiveTimeout = {
+ if (_futureTimeout.isDefined) {
+ _futureTimeout.get.cancel(true)
+ _futureTimeout = None
+ }
+ }
+}
+
+/**
+ * System messages for RemoteActorRef.
+ *
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+object RemoteActorSystemMessage {
+ val Stop = "RemoteActorRef:stop".intern
+}
+
+/**
+ * Remote ActorRef that is used when referencing the Actor on a different node than its "home" node.
+ * This reference is network-aware (remembers its origin) and immutable.
+ *
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+private[akka] case class RemoteActorRef private[akka] (
+ classOrServiceName: String,
+ val actorClassName: String,
+ val hostname: String,
+ val port: Int,
+ _timeout: Long,
+ loader: Option[ClassLoader],
+ val actorType: ActorType = ActorType.ScalaActor)
+ extends ActorRef with ScalaActorRef {
+
+ ensureRemotingEnabled
+
+ val homeAddress = Some(new InetSocketAddress(hostname, port))
+
+ //protected def clientManaged = classOrServiceName.isEmpty //If no class or service name, it's client managed
+ id = classOrServiceName
+ //id = classOrServiceName.getOrElse("uuid:" + uuid) //If we're a server-managed we want to have classOrServiceName as id, or else, we're a client-managed and we want to have our uuid as id
+
+ timeout = _timeout
+
+ start
+
+ def postMessageToMailbox(message: Any, senderOption: Option[ActorRef]): Unit =
+ Actor.remote.send[Any](message, senderOption, None, homeAddress.get, timeout, true, this, None, actorType, loader)
+
+ def postMessageToMailboxAndCreateFutureResultWithTimeout[T](
+ message: Any,
+ timeout: Long,
+ senderOption: Option[ActorRef],
+ senderFuture: Option[CompletableFuture[T]]): CompletableFuture[T] = {
+ val future = Actor.remote.send[T](
+ message, senderOption, senderFuture,
+ homeAddress.get, timeout,
+ false, this, None,
+ actorType, loader)
+ if (future.isDefined) future.get
+ else throw new IllegalActorStateException("Expected a future from remote call to actor " + toString)
+ }
+
+ def start: ActorRef = synchronized {
+ _status = ActorRefInternals.RUNNING
+ this
+ }
+
+ def stop: Unit = synchronized {
+ if (_status == ActorRefInternals.RUNNING) {
+ _status = ActorRefInternals.SHUTDOWN
+ postMessageToMailbox(RemoteActorSystemMessage.Stop, None)
+ }
+ }
+
+ protected[akka] def registerSupervisorAsRemoteActor: Option[Uuid] = None
+
+ // ==== NOT SUPPORTED ====
+ @deprecated("Will be removed without replacement, doesn't make any sense to have in the face of `become` and `unbecome`", "1.1")
+ def actorClass: Class[_ <: Actor] = unsupported
+ def dispatcher_=(md: MessageDispatcher): Unit = unsupported
+ def dispatcher: MessageDispatcher = unsupported
+ def link(actorRef: ActorRef): Unit = unsupported
+ def unlink(actorRef: ActorRef): Unit = unsupported
+ def startLink(actorRef: ActorRef): Unit = unsupported
+ def spawn(clazz: Class[_ <: Actor]): ActorRef = unsupported
+ def spawnRemote(clazz: Class[_ <: Actor], hostname: String, port: Int, timeout: Long): ActorRef = unsupported
+ def spawnLink(clazz: Class[_ <: Actor]): ActorRef = unsupported
+ def spawnLinkRemote(clazz: Class[_ <: Actor], hostname: String, port: Int, timeout: Long): ActorRef = unsupported
+ def supervisor: Option[ActorRef] = unsupported
+ def linkedActors: JMap[Uuid, ActorRef] = unsupported
+ protected[akka] def mailbox: AnyRef = unsupported
+ protected[akka] def mailbox_=(value: AnyRef): AnyRef = unsupported
+ protected[akka] def handleTrapExit(dead: ActorRef, reason: Throwable): Unit = unsupported
+ protected[akka] def restart(reason: Throwable, maxNrOfRetries: Option[Int], withinTimeRange: Option[Int]): Unit = unsupported
+ protected[akka] def restartLinkedActors(reason: Throwable, maxNrOfRetries: Option[Int], withinTimeRange: Option[Int]): Unit = unsupported
+ protected[akka] def invoke(messageHandle: MessageInvocation): Unit = unsupported
+ protected[akka] def supervisor_=(sup: Option[ActorRef]): Unit = unsupported
+ protected[akka] def actorInstance: AtomicReference[Actor] = unsupported
+ private def unsupported = throw new UnsupportedOperationException("Not supported for RemoteActorRef")
+}
+
+/**
+ * This trait represents the common (external) methods for all ActorRefs
+ * Needed because implicit conversions aren't applied when instance imports are used
+ *
+ * i.e.
+ * var self: ScalaActorRef = ...
+ * import self._
+ * //can't call ActorRef methods here unless they are declared in a common
+ * //superclass, which ActorRefShared is.
+ */
+trait ActorRefShared {
+ /**
+ * Returns the uuid for the actor.
+ */
+ def uuid: Uuid
+}
+
+/**
+ * This trait represents the Scala Actor API
+ * There are implicit conversions in ../actor/Implicits.scala
+ * from ActorRef -> ScalaActorRef and back
+ */
+trait ScalaActorRef extends ActorRefShared { ref: ActorRef =>
+
+ /**
+ * Identifier for actor, does not have to be a unique one. Default is the 'uuid'.
+ * <p/>
+ * This field is used for logging, AspectRegistry.actorsFor(id), identifier for remote
+ * actor in RemoteServer etc.But also as the identifier for persistence, which means
+ * that you can use a custom name to be able to retrieve the "correct" persisted state
+ * upon restart, remote restart etc.
+ */
+ def id: String
+
+ def id_=(id: String): Unit
+
+ /**
+ * User overridable callback/setting.
+ * <p/>
+ * Defines the life-cycle for a supervised actor.
+ */
+ @volatile
+ @BeanProperty
+ var lifeCycle: LifeCycle = UndefinedLifeCycle
+
+ /**
+ * User overridable callback/setting.
+ * <p/>
+ * Don't forget to supply a List of exception types to intercept (trapExit)
+ * <p/>
+ * Can be one of:
+ * <pre>
+ * faultHandler = AllForOneStrategy(trapExit = List(classOf[Exception]), maxNrOfRetries, withinTimeRange)
+ * </pre>
+ * Or:
+ * <pre>
+ * faultHandler = OneForOneStrategy(trapExit = List(classOf[Exception]), maxNrOfRetries, withinTimeRange)
+ * </pre>
+ */
+ @volatile
+ @BeanProperty
+ var faultHandler: FaultHandlingStrategy = NoFaultHandlingStrategy
+
+ /**
+ * The reference sender Actor of the last received message.
+ * Is defined if the message was sent from another Actor, else None.
+ */
+ def sender: Option[ActorRef] = {
+ val msg = currentMessage
+ if (msg eq null) None
+ else msg.sender
+ }
+
+ /**
+ * The reference sender future of the last received message.
+ * Is defined if the message was sent with sent with '!!' or '!!!', else None.
+ */
+ def senderFuture(): Option[CompletableFuture[Any]] = {
+ val msg = currentMessage
+ if (msg eq null) None
+ else msg.senderFuture
+ }
+
+ /**
+ * Sends a one-way asynchronous message. E.g. fire-and-forget semantics.
+ * <p/>
+ *
+ * If invoked from within an actor then the actor reference is implicitly passed on as the implicit 'sender' argument.
+ * <p/>
+ *
+ * This actor 'sender' reference is then available in the receiving actor in the 'sender' member variable,
+ * if invoked from within an Actor. If not then no sender is available.
+ * <pre>
+ * actor ! message
+ * </pre>
+ * <p/>
+ */
+ def !(message: Any)(implicit sender: Option[ActorRef] = None): Unit = {
+ if (isRunning) postMessageToMailbox(message, sender)
+ else throw new ActorInitializationException(
+ "Actor has not been started, you need to invoke 'actor.start()' before using it")
+ }
+
+ /**
+ * Sends a message asynchronously and waits on a future for a reply message.
+ * <p/>
+ * It waits on the reply either until it receives it (in the form of <code>Some(replyMessage)</code>)
+ * or until the timeout expires (which will return None). E.g. send-and-receive-eventually semantics.
+ * <p/>
+ * <b>NOTE:</b>
+ * Use this method with care. In most cases it is better to use '!' together with the 'sender' member field to
+ * implement request/response message exchanges.
+ * If you are sending messages using <code>!!</code> then you <b>have to</b> use <code>self.reply(..)</code>
+ * to send a reply message to the original sender. If not then the sender will block until the timeout expires.
+ */
+ def !!(message: Any, timeout: Long = this.timeout)(implicit sender: Option[ActorRef] = None): Option[Any] = {
+ if (isRunning) {
+ val future = postMessageToMailboxAndCreateFutureResultWithTimeout[Any](message, timeout, sender, None)
+ val isMessageJoinPoint = if (isTypedActorEnabled) TypedActorModule.resolveFutureIfMessageIsJoinPoint(message, future)
+ else false
+ try {
+ future.await
+ } catch {
+ case e: FutureTimeoutException =>
+ if (isMessageJoinPoint) {
+ EventHandler.error(e, this, e.getMessage)
+ throw e
+ } else None
+ }
+ future.resultOrException
+ } else throw new ActorInitializationException(
+ "Actor has not been started, you need to invoke 'actor.start()' before using it")
+ }
+
+ /**
+ * Sends a message asynchronously returns a future holding the eventual reply message.
+ * <p/>
+ * <b>NOTE:</b>
+ * Use this method with care. In most cases it is better to use '!' together with the 'sender' member field to
+ * implement request/response message exchanges.
+ * If you are sending messages using <code>!!!</code> then you <b>have to</b> use <code>self.reply(..)</code>
+ * to send a reply message to the original sender. If not then the sender will block until the timeout expires.
+ */
+ def !!![T](message: Any, timeout: Long = this.timeout)(implicit sender: Option[ActorRef] = None): Future[T] = {
+ if (isRunning) postMessageToMailboxAndCreateFutureResultWithTimeout[T](message, timeout, sender, None)
+ else throw new ActorInitializationException(
+ "Actor has not been started, you need to invoke 'actor.start()' before using it")
+ }
+
+ /**
+ * Forwards the message and passes the original sender actor as the sender.
+ * <p/>
+ * Works with '!', '!!' and '!!!'.
+ */
+ def forward(message: Any)(implicit sender: Some[ActorRef]) = {
+ if (isRunning) {
+ if (sender.get.senderFuture.isDefined)
+ postMessageToMailboxAndCreateFutureResultWithTimeout(message, timeout, sender.get.sender, sender.get.senderFuture)
+ else
+ postMessageToMailbox(message, sender.get.sender)
+ } else throw new ActorInitializationException("Actor has not been started, you need to invoke 'actor.start()' before using it")
+ }
+
+ /**
+ * Use <code>self.reply(..)</code> to reply with a message to the original sender of the message currently
+ * being processed.
+ * <p/>
+ * Throws an IllegalStateException if unable to determine what to reply to.
+ */
+ def reply(message: Any) = if (!reply_?(message)) throw new IllegalActorStateException(
+ "\n\tNo sender in scope, can't reply. " +
+ "\n\tYou have probably: " +
+ "\n\t\t1. Sent a message to an Actor from an instance that is NOT an Actor." +
+ "\n\t\t2. Invoked a method on an TypedActor from an instance NOT an TypedActor." +
+ "\n\tElse you might want to use 'reply_?' which returns Boolean(true) if succes and Boolean(false) if no sender in scope")
+
+ /**
+ * Use <code>reply_?(..)</code> to reply with a message to the original sender of the message currently
+ * being processed.
+ * <p/>
+ * Returns true if reply was sent, and false if unable to determine what to reply to.
+ */
+ def reply_?(message: Any): Boolean = {
+ if (senderFuture.isDefined) {
+ senderFuture.get completeWithResult message
+ true
+ } else if (sender.isDefined) {
+ //TODO: optimize away this allocation, perhaps by having implicit self: Option[ActorRef] in signature
+ sender.get.!(message)(Some(this))
+ true
+ } else false
+ }
+
+ /**
+ * Atomically create (from actor class) and start an actor.
+ */
+ def spawn[T <: Actor: Manifest]: ActorRef =
+ spawn(manifest[T].erasure.asInstanceOf[Class[_ <: Actor]])
+
+ /**
+ * Atomically create (from actor class), start and make an actor remote.
+ */
+ def spawnRemote[T <: Actor: Manifest](hostname: String, port: Int, timeout: Long): ActorRef = {
+ ensureRemotingEnabled
+ spawnRemote(manifest[T].erasure.asInstanceOf[Class[_ <: Actor]], hostname, port, timeout)
+ }
+
+ /**
+ * Atomically create (from actor class), start and link an actor.
+ */
+ def spawnLink[T <: Actor: Manifest]: ActorRef =
+ spawnLink(manifest[T].erasure.asInstanceOf[Class[_ <: Actor]])
+
+ /**
+ * Atomically create (from actor class), start, link and make an actor remote.
+ */
+ def spawnLinkRemote[T <: Actor: Manifest](hostname: String, port: Int, timeout: Long): ActorRef = {
+ ensureRemotingEnabled
+ spawnLinkRemote(manifest[T].erasure.asInstanceOf[Class[_ <: Actor]], hostname, port, timeout)
+ }
+}
diff --git a/test/disabled/presentation/akka/src/akka/actor/ActorRegistry.scala b/test/disabled/presentation/akka/src/akka/actor/ActorRegistry.scala
new file mode 100644
index 0000000000..df335dc8b4
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/actor/ActorRegistry.scala
@@ -0,0 +1,389 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka.actor
+
+import scala.collection.mutable.{ ListBuffer, Map }
+import scala.reflect.Manifest
+
+import java.util.concurrent.{ ConcurrentSkipListSet, ConcurrentHashMap }
+import java.util.{ Set => JSet }
+
+import annotation.tailrec
+import akka.util.ReflectiveAccess._
+import akka.util.{ ReflectiveAccess, ReadWriteGuard, ListenerManagement }
+
+/**
+ * Base trait for ActorRegistry events, allows listen to when an actor is added and removed from the ActorRegistry.
+ *
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+sealed trait ActorRegistryEvent
+case class ActorRegistered(actor: ActorRef) extends ActorRegistryEvent
+case class ActorUnregistered(actor: ActorRef) extends ActorRegistryEvent
+
+/**
+ * Registry holding all Actor instances in the whole system.
+ * Mapped by:
+ * <ul>
+ * <li>the Actor's UUID</li>
+ * <li>the Actor's id field (which can be set by user-code)</li>
+ * <li>the Actor's class</li>
+ * <li>all Actors that are subtypes of a specific type</li>
+ * <ul>
+ *
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+
+final class ActorRegistry private[actor] () extends ListenerManagement {
+
+ private val actorsByUUID = new ConcurrentHashMap[Uuid, ActorRef]
+ private val actorsById = new Index[String, ActorRef]
+ private val guard = new ReadWriteGuard
+
+ /**
+ * Returns all actors in the system.
+ */
+ def actors: Array[ActorRef] = filter(_ => true)
+
+ /**
+ * Returns the number of actors in the system.
+ */
+ def size: Int = actorsByUUID.size
+
+ /**
+ * Invokes a function for all actors.
+ */
+ def foreach(f: (ActorRef) => Unit) = {
+ val elements = actorsByUUID.elements
+ while (elements.hasMoreElements) f(elements.nextElement)
+ }
+
+ /**
+ * Invokes the function on all known actors until it returns Some
+ * Returns None if the function never returns Some
+ */
+ def find[T](f: PartialFunction[ActorRef, T]): Option[T] = {
+ val elements = actorsByUUID.elements
+ while (elements.hasMoreElements) {
+ val element = elements.nextElement
+ if (f isDefinedAt element) return Some(f(element))
+ }
+ None
+ }
+
+ /**
+ * Finds all actors that are subtypes of the class passed in as the Manifest argument and supporting passed message.
+ */
+ def actorsFor[T <: Actor](message: Any)(implicit manifest: Manifest[T]): Array[ActorRef] =
+ filter(a => manifest.erasure.isAssignableFrom(a.actor.getClass) && a.isDefinedAt(message))
+
+ /**
+ * Finds all actors that satisfy a predicate.
+ */
+ def filter(p: ActorRef => Boolean): Array[ActorRef] = {
+ val all = new ListBuffer[ActorRef]
+ val elements = actorsByUUID.elements
+ while (elements.hasMoreElements) {
+ val actorId = elements.nextElement
+ if (p(actorId)) all += actorId
+ }
+ all.toArray
+ }
+
+ /**
+ * Finds all actors that are subtypes of the class passed in as the Manifest argument.
+ */
+ def actorsFor[T <: Actor](implicit manifest: Manifest[T]): Array[ActorRef] =
+ actorsFor[T](manifest.erasure.asInstanceOf[Class[T]])
+
+ /**
+ * Finds any actor that matches T. Very expensive, traverses ALL alive actors.
+ */
+ def actorFor[T <: Actor](implicit manifest: Manifest[T]): Option[ActorRef] =
+ find({ case a: ActorRef if manifest.erasure.isAssignableFrom(a.actor.getClass) => a })
+
+ /**
+ * Finds all actors of type or sub-type specified by the class passed in as the Class argument.
+ */
+ def actorsFor[T <: Actor](clazz: Class[T]): Array[ActorRef] =
+ filter(a => clazz.isAssignableFrom(a.actor.getClass))
+
+ /**
+ * Finds all actors that has a specific id.
+ */
+ def actorsFor(id: String): Array[ActorRef] = actorsById values id
+
+ /**
+ * Finds the actor that has a specific UUID.
+ */
+ def actorFor(uuid: Uuid): Option[ActorRef] = Option(actorsByUUID get uuid)
+
+ /**
+ * Returns all typed actors in the system.
+ */
+ def typedActors: Array[AnyRef] = filterTypedActors(_ => true)
+
+ /**
+ * Invokes a function for all typed actors.
+ */
+ def foreachTypedActor(f: (AnyRef) => Unit) = {
+ TypedActorModule.ensureEnabled
+ val elements = actorsByUUID.elements
+ while (elements.hasMoreElements) {
+ val proxy = typedActorFor(elements.nextElement)
+ if (proxy.isDefined) f(proxy.get)
+ }
+ }
+
+ /**
+ * Invokes the function on all known typed actors until it returns Some
+ * Returns None if the function never returns Some
+ */
+ def findTypedActor[T](f: PartialFunction[AnyRef, T]): Option[T] = {
+ TypedActorModule.ensureEnabled
+ val elements = actorsByUUID.elements
+ while (elements.hasMoreElements) {
+ val proxy = typedActorFor(elements.nextElement)
+ if (proxy.isDefined && (f isDefinedAt proxy)) return Some(f(proxy))
+ }
+ None
+ }
+
+ /**
+ * Finds all typed actors that satisfy a predicate.
+ */
+ def filterTypedActors(p: AnyRef => Boolean): Array[AnyRef] = {
+ TypedActorModule.ensureEnabled
+ val all = new ListBuffer[AnyRef]
+ val elements = actorsByUUID.elements
+ while (elements.hasMoreElements) {
+ val proxy = typedActorFor(elements.nextElement)
+ if (proxy.isDefined && p(proxy.get)) all += proxy.get
+ }
+ all.toArray
+ }
+
+ /**
+ * Finds all typed actors that are subtypes of the class passed in as the Manifest argument.
+ */
+ def typedActorsFor[T <: AnyRef](implicit manifest: Manifest[T]): Array[AnyRef] = {
+ TypedActorModule.ensureEnabled
+ typedActorsFor[T](manifest.erasure.asInstanceOf[Class[T]])
+ }
+
+ /**
+ * Finds any typed actor that matches T.
+ */
+ def typedActorFor[T <: AnyRef](implicit manifest: Manifest[T]): Option[AnyRef] = {
+ TypedActorModule.ensureEnabled
+ def predicate(proxy: AnyRef): Boolean = {
+ val actorRef = TypedActorModule.typedActorObjectInstance.get.actorFor(proxy)
+ actorRef.isDefined && manifest.erasure.isAssignableFrom(actorRef.get.actor.getClass)
+ }
+ findTypedActor({ case a: Some[AnyRef] if predicate(a.get) => a })
+ }
+
+ /**
+ * Finds all typed actors of type or sub-type specified by the class passed in as the Class argument.
+ */
+ def typedActorsFor[T <: AnyRef](clazz: Class[T]): Array[AnyRef] = {
+ TypedActorModule.ensureEnabled
+ def predicate(proxy: AnyRef): Boolean = {
+ val actorRef = TypedActorModule.typedActorObjectInstance.get.actorFor(proxy)
+ actorRef.isDefined && clazz.isAssignableFrom(actorRef.get.actor.getClass)
+ }
+ filterTypedActors(predicate)
+ }
+
+ /**
+ * Finds all typed actors that have a specific id.
+ */
+ def typedActorsFor(id: String): Array[AnyRef] = {
+ TypedActorModule.ensureEnabled
+ val actorRefs = actorsById values id
+ actorRefs.flatMap(typedActorFor(_))
+ }
+
+ /**
+ * Finds the typed actor that has a specific UUID.
+ */
+ def typedActorFor(uuid: Uuid): Option[AnyRef] = {
+ TypedActorModule.ensureEnabled
+ val actorRef = actorsByUUID get uuid
+ if (actorRef eq null) None
+ else typedActorFor(actorRef)
+ }
+
+ /**
+ * Get the typed actor proxy for a given typed actor ref.
+ */
+ private def typedActorFor(actorRef: ActorRef): Option[AnyRef] = {
+ TypedActorModule.typedActorObjectInstance.get.proxyFor(actorRef)
+ }
+
+ /**
+ * Registers an actor in the ActorRegistry.
+ */
+ private[akka] def register(actor: ActorRef) {
+ val id = actor.id
+ val uuid = actor.uuid
+
+ actorsById.put(id, actor)
+ actorsByUUID.put(uuid, actor)
+
+ // notify listeners
+ notifyListeners(ActorRegistered(actor))
+ }
+
+ /**
+ * Unregisters an actor in the ActorRegistry.
+ */
+ private[akka] def unregister(actor: ActorRef) {
+ val id = actor.id
+ val uuid = actor.uuid
+
+ actorsByUUID remove uuid
+ actorsById.remove(id, actor)
+
+ // notify listeners
+ notifyListeners(ActorUnregistered(actor))
+ }
+
+ /**
+ * Shuts down and unregisters all actors in the system.
+ */
+ def shutdownAll() {
+ if (TypedActorModule.isEnabled) {
+ val elements = actorsByUUID.elements
+ while (elements.hasMoreElements) {
+ val actorRef = elements.nextElement
+ val proxy = typedActorFor(actorRef)
+ if (proxy.isDefined) TypedActorModule.typedActorObjectInstance.get.stop(proxy.get)
+ else actorRef.stop()
+ }
+ } else foreach(_.stop())
+ if (Remote.isEnabled) {
+ Actor.remote.clear //TODO: REVISIT: Should this be here?
+ }
+ actorsByUUID.clear
+ actorsById.clear
+ }
+}
+
+/**
+ * An implementation of a ConcurrentMultiMap
+ * Adds/remove is serialized over the specified key
+ * Reads are fully concurrent <-- el-cheapo
+ *
+ * @author Viktor Klang
+ */
+class Index[K <: AnyRef, V <: AnyRef: Manifest] {
+ private val Naught = Array[V]() //Nil for Arrays
+ private val container = new ConcurrentHashMap[K, JSet[V]]
+ private val emptySet = new ConcurrentSkipListSet[V]
+
+ /**
+ * Associates the value of type V with the key of type K
+ * @return true if the value didn't exist for the key previously, and false otherwise
+ */
+ def put(key: K, value: V): Boolean = {
+ //Tailrecursive spin-locking put
+ @tailrec
+ def spinPut(k: K, v: V): Boolean = {
+ var retry = false
+ var added = false
+ val set = container get k
+
+ if (set ne null) {
+ set.synchronized {
+ if (set.isEmpty) retry = true //IF the set is empty then it has been removed, so signal retry
+ else { //Else add the value to the set and signal that retry is not needed
+ added = set add v
+ retry = false
+ }
+ }
+ } else {
+ val newSet = new ConcurrentSkipListSet[V]
+ newSet add v
+
+ // Parry for two simultaneous putIfAbsent(id,newSet)
+ val oldSet = container.putIfAbsent(k, newSet)
+ if (oldSet ne null) {
+ oldSet.synchronized {
+ if (oldSet.isEmpty) retry = true //IF the set is empty then it has been removed, so signal retry
+ else { //Else try to add the value to the set and signal that retry is not needed
+ added = oldSet add v
+ retry = false
+ }
+ }
+ } else added = true
+ }
+
+ if (retry) spinPut(k, v)
+ else added
+ }
+
+ spinPut(key, value)
+ }
+
+ /**
+ * @return a _new_ array of all existing values for the given key at the time of the call
+ */
+ def values(key: K): Array[V] = {
+ val set: JSet[V] = container get key
+ val result = if (set ne null) set toArray Naught else Naught
+ result.asInstanceOf[Array[V]]
+ }
+
+ /**
+ * @return Some(value) for the first matching value where the supplied function returns true for the given key,
+ * if no matches it returns None
+ */
+ def findValue(key: K)(f: (V) => Boolean): Option[V] = {
+ import scala.collection.JavaConversions._
+ val set = container get key
+ if (set ne null) set.iterator.find(f)
+ else None
+ }
+
+ /**
+ * Applies the supplied function to all keys and their values
+ */
+ def foreach(fun: (K, V) => Unit) {
+ import scala.collection.JavaConversions._
+ container.entrySet foreach { (e) =>
+ e.getValue.foreach(fun(e.getKey, _))
+ }
+ }
+
+ /**
+ * Disassociates the value of type V from the key of type K
+ * @return true if the value was disassociated from the key and false if it wasn't previously associated with the key
+ */
+ def remove(key: K, value: V): Boolean = {
+ val set = container get key
+
+ if (set ne null) {
+ set.synchronized {
+ if (set.remove(value)) { //If we can remove the value
+ if (set.isEmpty) //and the set becomes empty
+ container.remove(key, emptySet) //We try to remove the key if it's mapped to an empty set
+
+ true //Remove succeeded
+ } else false //Remove failed
+ }
+ } else false //Remove failed
+ }
+
+ /**
+ * @return true if the underlying containers is empty, may report false negatives when the last remove is underway
+ */
+ def isEmpty: Boolean = container.isEmpty
+
+ /**
+ * Removes all keys and all values
+ */
+ def clear = foreach { case (k, v) => remove(k, v) }
+}
diff --git a/test/disabled/presentation/akka/src/akka/actor/Actors.java b/test/disabled/presentation/akka/src/akka/actor/Actors.java
new file mode 100644
index 0000000000..a5ec9f37dc
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/actor/Actors.java
@@ -0,0 +1,108 @@
+package akka.actor;
+
+import akka.japi.Creator;
+import akka.remoteinterface.RemoteSupport;
+
+/**
+ * JAVA API for
+ * - creating actors,
+ * - creating remote actors,
+ * - locating actors
+ */
+public class Actors {
+ /**
+ *
+ * @return The actor registry
+ */
+ public static ActorRegistry registry() {
+ return Actor$.MODULE$.registry();
+ }
+
+ /**
+ *
+ * @return
+ * @throws UnsupportedOperationException If remoting isn't configured
+ * @throws ModuleNotAvailableException If the class for the remote support cannot be loaded
+ */
+ public static RemoteSupport remote() {
+ return Actor$.MODULE$.remote();
+ }
+
+ /**
+ * NOTE: Use this convenience method with care, do NOT make it possible to get a reference to the
+ * UntypedActor instance directly, but only through its 'ActorRef' wrapper reference.
+ * <p/>
+ * Creates an ActorRef out of the Actor. Allows you to pass in the instance for the UntypedActor.
+ * Only use this method when you need to pass in constructor arguments into the 'UntypedActor'.
+ * <p/>
+ * You use it by implementing the UntypedActorFactory interface.
+ * Example in Java:
+ * <pre>
+ * ActorRef actor = Actors.actorOf(new UntypedActorFactory() {
+ * public UntypedActor create() {
+ * return new MyUntypedActor("service:name", 5);
+ * }
+ * });
+ * actor.start();
+ * actor.sendOneWay(message, context);
+ * actor.stop();
+ * </pre>
+ */
+ public static ActorRef actorOf(final Creator<Actor> factory) {
+ return Actor$.MODULE$.actorOf(factory);
+ }
+
+ /**
+ * Creates an ActorRef out of the Actor type represented by the class provided.
+ * Example in Java:
+ * <pre>
+ * ActorRef actor = Actors.actorOf(MyUntypedActor.class);
+ * actor.start();
+ * actor.sendOneWay(message, context);
+ * actor.stop();
+ * </pre>
+ * You can create and start the actor in one statement like this:
+ * <pre>
+ * val actor = Actors.actorOf(MyActor.class).start();
+ * </pre>
+ */
+ public static ActorRef actorOf(final Class<? extends Actor> type) {
+ return Actor$.MODULE$.actorOf(type);
+ }
+
+ /**
+ * The message that is sent when an Actor gets a receive timeout.
+ * <pre>
+ * if( message == receiveTimeout() ) {
+ * //Timed out
+ * }
+ * </pre>
+ * @return the single instance of ReceiveTimeout
+ */
+ public final static ReceiveTimeout$ receiveTimeout() {
+ return ReceiveTimeout$.MODULE$;
+ }
+
+ /**
+ * The message that when sent to an Actor kills it by throwing an exception.
+ * <pre>
+ * actor.sendOneWay(kill());
+ * </pre>
+ * @return the single instance of Kill
+ */
+ public final static Kill$ kill() {
+ return Kill$.MODULE$;
+ }
+
+
+ /**
+ * The message that when sent to an Actor shuts it down by calling 'stop'.
+ * <pre>
+ * actor.sendOneWay(poisonPill());
+ * </pre>
+ * @return the single instance of PoisonPill
+ */
+ public final static PoisonPill$ poisonPill() {
+ return PoisonPill$.MODULE$;
+ }
+}
diff --git a/test/disabled/presentation/akka/src/akka/actor/BootableActorLoaderService.scala b/test/disabled/presentation/akka/src/akka/actor/BootableActorLoaderService.scala
new file mode 100644
index 0000000000..a54fca9ac7
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/actor/BootableActorLoaderService.scala
@@ -0,0 +1,60 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka.actor
+
+import java.io.File
+import java.net.{ URL, URLClassLoader }
+import java.util.jar.JarFile
+
+import akka.util.{ Bootable }
+import akka.config.Config._
+
+/**
+ * Handles all modules in the deploy directory (load and unload)
+ */
+trait BootableActorLoaderService extends Bootable {
+
+ val BOOT_CLASSES = config.getList("akka.boot")
+ lazy val applicationLoader: Option[ClassLoader] = createApplicationClassLoader
+
+ protected def createApplicationClassLoader: Option[ClassLoader] = Some({
+ if (HOME.isDefined) {
+ val DEPLOY = HOME.get + "/deploy"
+ val DEPLOY_DIR = new File(DEPLOY)
+ if (!DEPLOY_DIR.exists) {
+ System.exit(-1)
+ }
+ val filesToDeploy = DEPLOY_DIR.listFiles.toArray.toList
+ .asInstanceOf[List[File]].filter(_.getName.endsWith(".jar"))
+ var dependencyJars: List[URL] = Nil
+ filesToDeploy.map { file =>
+ val jarFile = new JarFile(file)
+ val en = jarFile.entries
+ while (en.hasMoreElements) {
+ val name = en.nextElement.getName
+ if (name.endsWith(".jar")) dependencyJars ::= new File(
+ String.format("jar:file:%s!/%s", jarFile.getName, name)).toURI.toURL
+ }
+ }
+ val toDeploy = filesToDeploy.map(_.toURI.toURL)
+ val allJars = toDeploy ::: dependencyJars
+
+ new URLClassLoader(allJars.toArray, Thread.currentThread.getContextClassLoader)
+ } else Thread.currentThread.getContextClassLoader
+ })
+
+ abstract override def onLoad = {
+ super.onLoad
+
+ for (loader ← applicationLoader; clazz ← BOOT_CLASSES) {
+ loader.loadClass(clazz).newInstance
+ }
+ }
+
+ abstract override def onUnload = {
+ super.onUnload
+ Actor.registry.shutdownAll()
+ }
+}
diff --git a/test/disabled/presentation/akka/src/akka/actor/FSM.scala b/test/disabled/presentation/akka/src/akka/actor/FSM.scala
new file mode 100644
index 0000000000..d9cd9a9ca2
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/actor/FSM.scala
@@ -0,0 +1,527 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+package akka.actor
+
+import akka.util._
+import akka.event.EventHandler
+
+import scala.collection.mutable
+import java.util.concurrent.ScheduledFuture
+
+object FSM {
+
+ object NullFunction extends PartialFunction[Any, Nothing] {
+ def isDefinedAt(o: Any) = false
+ def apply(o: Any) = sys.error("undefined")
+ }
+
+ case class CurrentState[S](fsmRef: ActorRef, state: S)
+ case class Transition[S](fsmRef: ActorRef, from: S, to: S)
+ case class SubscribeTransitionCallBack(actorRef: ActorRef)
+ case class UnsubscribeTransitionCallBack(actorRef: ActorRef)
+
+ sealed trait Reason
+ case object Normal extends Reason
+ case object Shutdown extends Reason
+ case class Failure(cause: Any) extends Reason
+
+ case object StateTimeout
+ case class TimeoutMarker(generation: Long)
+
+ case class Timer(name: String, msg: AnyRef, repeat: Boolean, generation: Int) {
+ private var ref: Option[ScheduledFuture[AnyRef]] = _
+
+ def schedule(actor: ActorRef, timeout: Duration) {
+ if (repeat) {
+ ref = Some(Scheduler.schedule(actor, this, timeout.length, timeout.length, timeout.unit))
+ } else {
+ ref = Some(Scheduler.scheduleOnce(actor, this, timeout.length, timeout.unit))
+ }
+ }
+
+ def cancel {
+ if (ref.isDefined) {
+ ref.get.cancel(true)
+ ref = None
+ }
+ }
+ }
+
+ /*
+ * This extractor is just convenience for matching a (S, S) pair, including a
+ * reminder what the new state is.
+ */
+ object -> {
+ def unapply[S](in: (S, S)) = Some(in)
+ }
+
+ /*
+ * With these implicits in scope, you can write "5 seconds" anywhere a
+ * Duration or Option[Duration] is expected. This is conveniently true
+ * for derived classes.
+ */
+ implicit def d2od(d: Duration): Option[Duration] = Some(d)
+}
+
+/**
+ * Finite State Machine actor trait. Use as follows:
+ *
+ * <pre>
+ * object A {
+ * trait State
+ * case class One extends State
+ * case class Two extends State
+ *
+ * case class Data(i : Int)
+ * }
+ *
+ * class A extends Actor with FSM[A.State, A.Data] {
+ * import A._
+ *
+ * startWith(One, Data(42))
+ * when(One) {
+ * case Event(SomeMsg, Data(x)) => ...
+ * case Ev(SomeMsg) => ... // convenience when data not needed
+ * }
+ * when(Two, stateTimeout = 5 seconds) { ... }
+ * initialize
+ * }
+ * </pre>
+ *
+ * Within the partial function the following values are returned for effecting
+ * state transitions:
+ *
+ * - <code>stay</code> for staying in the same state
+ * - <code>stay using Data(...)</code> for staying in the same state, but with
+ * different data
+ * - <code>stay forMax 5.millis</code> for staying with a state timeout; can be
+ * combined with <code>using</code>
+ * - <code>goto(...)</code> for changing into a different state; also supports
+ * <code>using</code> and <code>forMax</code>
+ * - <code>stop</code> for terminating this FSM actor
+ *
+ * Each of the above also supports the method <code>replying(AnyRef)</code> for
+ * sending a reply before changing state.
+ *
+ * While changing state, custom handlers may be invoked which are registered
+ * using <code>onTransition</code>. This is meant to enable concentrating
+ * different concerns in different places; you may choose to use
+ * <code>when</code> for describing the properties of a state, including of
+ * course initiating transitions, but you can describe the transitions using
+ * <code>onTransition</code> to avoid having to duplicate that code among
+ * multiple paths which lead to a transition:
+ *
+ * <pre>
+ * onTransition {
+ * case Active -&gt; _ =&gt; cancelTimer("activeTimer")
+ * }
+ * </pre>
+ *
+ * Multiple such blocks are supported and all of them will be called, not only
+ * the first matching one.
+ *
+ * Another feature is that other actors may subscribe for transition events by
+ * sending a <code>SubscribeTransitionCallback</code> message to this actor;
+ * use <code>UnsubscribeTransitionCallback</code> before stopping the other
+ * actor.
+ *
+ * State timeouts set an upper bound to the time which may pass before another
+ * message is received in the current state. If no external message is
+ * available, then upon expiry of the timeout a StateTimeout message is sent.
+ * Note that this message will only be received in the state for which the
+ * timeout was set and that any message received will cancel the timeout
+ * (possibly to be started again by the next transition).
+ *
+ * Another feature is the ability to install and cancel single-shot as well as
+ * repeated timers which arrange for the sending of a user-specified message:
+ *
+ * <pre>
+ * setTimer("tock", TockMsg, 1 second, true) // repeating
+ * setTimer("lifetime", TerminateMsg, 1 hour, false) // single-shot
+ * cancelTimer("tock")
+ * timerActive_? ("tock")
+ * </pre>
+ */
+trait FSM[S, D] extends ListenerManagement {
+ this: Actor =>
+
+ import FSM._
+
+ type StateFunction = scala.PartialFunction[Event[D], State]
+ type Timeout = Option[Duration]
+ type TransitionHandler = PartialFunction[(S, S), Unit]
+
+ /**
+ * ****************************************
+ * DSL
+ * ****************************************
+ */
+
+ /**
+ * Insert a new StateFunction at the end of the processing chain for the
+ * given state. If the stateTimeout parameter is set, entering this state
+ * without a differing explicit timeout setting will trigger a StateTimeout
+ * event; the same is true when using #stay.
+ *
+ * @param stateName designator for the state
+ * @param stateTimeout default state timeout for this state
+ * @param stateFunction partial function describing response to input
+ */
+ protected final def when(stateName: S, stateTimeout: Timeout = None)(stateFunction: StateFunction) = {
+ register(stateName, stateFunction, stateTimeout)
+ }
+
+ /**
+ * Set initial state. Call this method from the constructor before the #initialize method.
+ *
+ * @param stateName initial state designator
+ * @param stateData initial state data
+ * @param timeout state timeout for the initial state, overriding the default timeout for that state
+ */
+ protected final def startWith(stateName: S,
+ stateData: D,
+ timeout: Timeout = None) = {
+ currentState = State(stateName, stateData, timeout)
+ }
+
+ /**
+ * Produce transition to other state. Return this from a state function in
+ * order to effect the transition.
+ *
+ * @param nextStateName state designator for the next state
+ * @return state transition descriptor
+ */
+ protected final def goto(nextStateName: S): State = {
+ State(nextStateName, currentState.stateData)
+ }
+
+ /**
+ * Produce "empty" transition descriptor. Return this from a state function
+ * when no state change is to be effected.
+ *
+ * @return descriptor for staying in current state
+ */
+ protected final def stay(): State = {
+ // cannot directly use currentState because of the timeout field
+ goto(currentState.stateName)
+ }
+
+ /**
+ * Produce change descriptor to stop this FSM actor with reason "Normal".
+ */
+ protected final def stop(): State = {
+ stop(Normal)
+ }
+
+ /**
+ * Produce change descriptor to stop this FSM actor including specified reason.
+ */
+ protected final def stop(reason: Reason): State = {
+ stop(reason, currentState.stateData)
+ }
+
+ /**
+ * Produce change descriptor to stop this FSM actor including specified reason.
+ */
+ protected final def stop(reason: Reason, stateData: D): State = {
+ stay using stateData withStopReason (reason)
+ }
+
+ /**
+ * Schedule named timer to deliver message after given delay, possibly repeating.
+ * @param name identifier to be used with cancelTimer()
+ * @param msg message to be delivered
+ * @param timeout delay of first message delivery and between subsequent messages
+ * @param repeat send once if false, scheduleAtFixedRate if true
+ * @return current state descriptor
+ */
+ protected final def setTimer(name: String, msg: AnyRef, timeout: Duration, repeat: Boolean): State = {
+ if (timers contains name) {
+ timers(name).cancel
+ }
+ val timer = Timer(name, msg, repeat, timerGen.next)
+ timer.schedule(self, timeout)
+ timers(name) = timer
+ stay
+ }
+
+ /**
+ * Cancel named timer, ensuring that the message is not subsequently delivered (no race).
+ * @param name of the timer to cancel
+ */
+ protected final def cancelTimer(name: String) = {
+ if (timers contains name) {
+ timers(name).cancel
+ timers -= name
+ }
+ }
+
+ /**
+ * Inquire whether the named timer is still active. Returns true unless the
+ * timer does not exist, has previously been canceled or if it was a
+ * single-shot timer whose message was already received.
+ */
+ protected final def timerActive_?(name: String) = timers contains name
+
+ /**
+ * Set state timeout explicitly. This method can safely be used from within a
+ * state handler.
+ */
+ protected final def setStateTimeout(state: S, timeout: Timeout) {
+ stateTimeouts(state) = timeout
+ }
+
+ /**
+ * Set handler which is called upon each state transition, i.e. not when
+ * staying in the same state. This may use the pair extractor defined in the
+ * FSM companion object like so:
+ *
+ * <pre>
+ * onTransition {
+ * case Old -&gt; New =&gt; doSomething
+ * }
+ * </pre>
+ *
+ * It is also possible to supply a 2-ary function object:
+ *
+ * <pre>
+ * onTransition(handler _)
+ *
+ * private def handler(from: S, to: S) { ... }
+ * </pre>
+ *
+ * The underscore is unfortunately necessary to enable the nicer syntax shown
+ * above (it uses the implicit conversion total2pf under the hood).
+ *
+ * <b>Multiple handlers may be installed, and every one of them will be
+ * called, not only the first one matching.</b>
+ */
+ protected final def onTransition(transitionHandler: TransitionHandler) {
+ transitionEvent :+= transitionHandler
+ }
+
+ /**
+ * Convenience wrapper for using a total function instead of a partial
+ * function literal. To be used with onTransition.
+ */
+ implicit protected final def total2pf(transitionHandler: (S, S) => Unit) =
+ new PartialFunction[(S, S), Unit] {
+ def isDefinedAt(in: (S, S)) = true
+ def apply(in: (S, S)) { transitionHandler(in._1, in._2) }
+ }
+
+ /**
+ * Set handler which is called upon termination of this FSM actor.
+ */
+ protected final def onTermination(terminationHandler: PartialFunction[StopEvent[S, D], Unit]) = {
+ terminateEvent = terminationHandler
+ }
+
+ /**
+ * Set handler which is called upon reception of unhandled messages.
+ */
+ protected final def whenUnhandled(stateFunction: StateFunction) = {
+ handleEvent = stateFunction orElse handleEventDefault
+ }
+
+ /**
+ * Verify existence of initial state and setup timers. This should be the
+ * last call within the constructor.
+ */
+ def initialize {
+ makeTransition(currentState)
+ }
+
+ /**
+ * ****************************************************************
+ * PRIVATE IMPLEMENTATION DETAILS
+ * ****************************************************************
+ */
+
+ /*
+ * FSM State data and current timeout handling
+ */
+ private var currentState: State = _
+ private var timeoutFuture: Option[ScheduledFuture[AnyRef]] = None
+ private var generation: Long = 0L
+
+ /*
+ * Timer handling
+ */
+ private val timers = mutable.Map[String, Timer]()
+ private val timerGen = Iterator from 0
+
+ /*
+ * State definitions
+ */
+ private val stateFunctions = mutable.Map[S, StateFunction]()
+ private val stateTimeouts = mutable.Map[S, Timeout]()
+
+ private def register(name: S, function: StateFunction, timeout: Timeout) {
+ if (stateFunctions contains name) {
+ stateFunctions(name) = stateFunctions(name) orElse function
+ stateTimeouts(name) = timeout orElse stateTimeouts(name)
+ } else {
+ stateFunctions(name) = function
+ stateTimeouts(name) = timeout
+ }
+ }
+
+ /*
+ * unhandled event handler
+ */
+ private val handleEventDefault: StateFunction = {
+ case Event(value, stateData) =>
+ stay
+ }
+ private var handleEvent: StateFunction = handleEventDefault
+
+ /*
+ * termination handling
+ */
+ private var terminateEvent: PartialFunction[StopEvent[S, D], Unit] = {
+ case StopEvent(Failure(cause), _, _) =>
+ case StopEvent(reason, _, _) =>
+ }
+
+ /*
+ * transition handling
+ */
+ private var transitionEvent: List[TransitionHandler] = Nil
+ private def handleTransition(prev: S, next: S) {
+ val tuple = (prev, next)
+ for (te ← transitionEvent) { if (te.isDefinedAt(tuple)) te(tuple) }
+ }
+
+ // ListenerManagement shall not start() or stop() listener actors
+ override protected val manageLifeCycleOfListeners = false
+
+ /**
+ * *******************************************
+ * Main actor receive() method
+ * *******************************************
+ */
+ override final protected def receive: Receive = {
+ case TimeoutMarker(gen) =>
+ if (generation == gen) {
+ processEvent(StateTimeout)
+ }
+ case t@Timer(name, msg, repeat, generation) =>
+ if ((timers contains name) && (timers(name).generation == generation)) {
+ processEvent(msg)
+ if (!repeat) {
+ timers -= name
+ }
+ }
+ case SubscribeTransitionCallBack(actorRef) =>
+ addListener(actorRef)
+ // send current state back as reference point
+ try {
+ actorRef ! CurrentState(self, currentState.stateName)
+ } catch {
+ case e: ActorInitializationException =>
+ EventHandler.warning(this, "trying to register not running listener")
+ }
+ case UnsubscribeTransitionCallBack(actorRef) =>
+ removeListener(actorRef)
+ case value => {
+ if (timeoutFuture.isDefined) {
+ timeoutFuture.get.cancel(true)
+ timeoutFuture = None
+ }
+ generation += 1
+ processEvent(value)
+ }
+ }
+
+ private def processEvent(value: Any) = {
+ val event = Event(value, currentState.stateData)
+ val stateFunc = stateFunctions(currentState.stateName)
+ val nextState = if (stateFunc isDefinedAt event) {
+ stateFunc(event)
+ } else {
+ // handleEventDefault ensures that this is always defined
+ handleEvent(event)
+ }
+ nextState.stopReason match {
+ case Some(reason) => terminate(reason)
+ case None => makeTransition(nextState)
+ }
+ }
+
+ private def makeTransition(nextState: State) = {
+ if (!stateFunctions.contains(nextState.stateName)) {
+ terminate(Failure("Next state %s does not exist".format(nextState.stateName)))
+ } else {
+ if (currentState.stateName != nextState.stateName) {
+ handleTransition(currentState.stateName, nextState.stateName)
+ notifyListeners(Transition(self, currentState.stateName, nextState.stateName))
+ }
+ applyState(nextState)
+ }
+ }
+
+ private def applyState(nextState: State) = {
+ currentState = nextState
+ val timeout = if (currentState.timeout.isDefined) currentState.timeout else stateTimeouts(currentState.stateName)
+ if (timeout.isDefined) {
+ val t = timeout.get
+ if (t.finite_? && t.length >= 0) {
+ timeoutFuture = Some(Scheduler.scheduleOnce(self, TimeoutMarker(generation), t.length, t.unit))
+ }
+ }
+ }
+
+ private def terminate(reason: Reason) = {
+ terminateEvent.apply(StopEvent(reason, currentState.stateName, currentState.stateData))
+ self.stop()
+ }
+
+ case class Event[D](event: Any, stateData: D)
+ object Ev {
+ def unapply[D](e: Event[D]): Option[Any] = Some(e.event)
+ }
+
+ case class State(stateName: S, stateData: D, timeout: Timeout = None) {
+
+ /**
+ * Modify state transition descriptor to include a state timeout for the
+ * next state. This timeout overrides any default timeout set for the next
+ * state.
+ */
+ def forMax(timeout: Duration): State = {
+ copy(timeout = Some(timeout))
+ }
+
+ /**
+ * Send reply to sender of the current message, if available.
+ *
+ * @return this state transition descriptor
+ */
+ def replying(replyValue: Any): State = {
+ self.sender match {
+ case Some(sender) => sender ! replyValue
+ case None =>
+ }
+ this
+ }
+
+ /**
+ * Modify state transition descriptor with new state data. The data will be
+ * set when transitioning to the new state.
+ */
+ def using(nextStateDate: D): State = {
+ copy(stateData = nextStateDate)
+ }
+
+ private[akka] var stopReason: Option[Reason] = None
+
+ private[akka] def withStopReason(reason: Reason): State = {
+ stopReason = Some(reason)
+ this
+ }
+ }
+
+ case class StopEvent[S, D](reason: Reason, currentState: S, stateData: D)
+}
diff --git a/test/disabled/presentation/akka/src/akka/actor/Scheduler.scala b/test/disabled/presentation/akka/src/akka/actor/Scheduler.scala
new file mode 100644
index 0000000000..128584f3c5
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/actor/Scheduler.scala
@@ -0,0 +1,133 @@
+/*
+ * Copyright 2007 WorldWide Conferencing, LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Rework of David Pollak's ActorPing class in the Lift Project
+ * which is licensed under the Apache 2 License.
+ */
+package akka.actor
+
+import scala.collection.JavaConversions
+
+import java.util.concurrent._
+
+import akka.event.EventHandler
+import akka.AkkaException
+
+object Scheduler {
+ import Actor._
+
+ case class SchedulerException(msg: String, e: Throwable) extends RuntimeException(msg, e)
+
+ @volatile
+ private var service = Executors.newSingleThreadScheduledExecutor(SchedulerThreadFactory)
+
+ /**
+ * Schedules to send the specified message to the receiver after initialDelay and then repeated after delay
+ */
+ def schedule(receiver: ActorRef, message: AnyRef, initialDelay: Long, delay: Long, timeUnit: TimeUnit): ScheduledFuture[AnyRef] = {
+ try {
+ service.scheduleAtFixedRate(
+ new Runnable { def run = receiver ! message },
+ initialDelay, delay, timeUnit).asInstanceOf[ScheduledFuture[AnyRef]]
+ } catch {
+ case e: Exception =>
+ val error = SchedulerException(message + " could not be scheduled on " + receiver, e)
+ EventHandler.error(error, this, "%s @ %s".format(receiver, message))
+ throw error
+ }
+ }
+
+ /**
+ * Schedules to run specified function to the receiver after initialDelay and then repeated after delay,
+ * avoid blocking operations since this is executed in the schedulers thread
+ */
+ def schedule(f: () => Unit, initialDelay: Long, delay: Long, timeUnit: TimeUnit): ScheduledFuture[AnyRef] =
+ schedule(new Runnable { def run = f() }, initialDelay, delay, timeUnit)
+
+ /**
+ * Schedules to run specified runnable to the receiver after initialDelay and then repeated after delay,
+ * avoid blocking operations since this is executed in the schedulers thread
+ */
+ def schedule(runnable: Runnable, initialDelay: Long, delay: Long, timeUnit: TimeUnit): ScheduledFuture[AnyRef] = {
+ try {
+ service.scheduleAtFixedRate(runnable, initialDelay, delay, timeUnit).asInstanceOf[ScheduledFuture[AnyRef]]
+ } catch {
+ case e: Exception =>
+ val error = SchedulerException("Failed to schedule a Runnable", e)
+ EventHandler.error(error, this, error.getMessage)
+ throw error
+ }
+ }
+
+ /**
+ * Schedules to send the specified message to the receiver after delay
+ */
+ def scheduleOnce(receiver: ActorRef, message: AnyRef, delay: Long, timeUnit: TimeUnit): ScheduledFuture[AnyRef] = {
+ try {
+ service.schedule(
+ new Runnable { def run = receiver ! message },
+ delay, timeUnit).asInstanceOf[ScheduledFuture[AnyRef]]
+ } catch {
+ case e: Exception =>
+ val error = SchedulerException(message + " could not be scheduleOnce'd on " + receiver, e)
+ EventHandler.error(e, this, receiver + " @ " + message)
+ throw error
+ }
+ }
+
+ /**
+ * Schedules a function to be run after delay,
+ * avoid blocking operations since the runnable is executed in the schedulers thread
+ */
+ def scheduleOnce(f: () => Unit, delay: Long, timeUnit: TimeUnit): ScheduledFuture[AnyRef] =
+ scheduleOnce(new Runnable { def run = f() }, delay, timeUnit)
+
+ /**
+ * Schedules a runnable to be run after delay,
+ * avoid blocking operations since the runnable is executed in the schedulers thread
+ */
+ def scheduleOnce(runnable: Runnable, delay: Long, timeUnit: TimeUnit): ScheduledFuture[AnyRef] = {
+ try {
+ service.schedule(runnable, delay, timeUnit).asInstanceOf[ScheduledFuture[AnyRef]]
+ } catch {
+ case e: Exception =>
+ val error = SchedulerException("Failed to scheduleOnce a Runnable", e)
+ EventHandler.error(e, this, error.getMessage)
+ throw error
+ }
+ }
+
+ def shutdown() {
+ synchronized {
+ service.shutdown()
+ }
+ }
+
+ def restart() {
+ synchronized {
+ shutdown()
+ service = Executors.newSingleThreadScheduledExecutor(SchedulerThreadFactory)
+ }
+ }
+}
+
+private object SchedulerThreadFactory extends ThreadFactory {
+ private var count = 0
+ val threadFactory = Executors.defaultThreadFactory()
+
+ def newThread(r: Runnable): Thread = {
+ val thread = threadFactory.newThread(r)
+ thread.setName("akka:scheduler-" + count)
+ thread.setDaemon(true)
+ thread
+ }
+}
diff --git a/test/disabled/presentation/akka/src/akka/actor/Supervisor.scala b/test/disabled/presentation/akka/src/akka/actor/Supervisor.scala
new file mode 100644
index 0000000000..4a1309faef
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/actor/Supervisor.scala
@@ -0,0 +1,176 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka.actor
+
+import akka.AkkaException
+import akka.util._
+import ReflectiveAccess._
+import Actor._
+
+import java.util.concurrent.{ CopyOnWriteArrayList, ConcurrentHashMap }
+import java.net.InetSocketAddress
+import akka.config.Supervision._
+
+class SupervisorException private[akka] (message: String, cause: Throwable = null) extends AkkaException(message, cause)
+
+/**
+ * Factory object for creating supervisors declarative. It creates instances of the 'Supervisor' class.
+ * These are not actors, if you need a supervisor that is an Actor then you have to use the 'SupervisorActor'
+ * factory object.
+ * <p/>
+ *
+ * Here is a sample on how to use it:
+ * <pre>
+ * val supervisor = Supervisor(
+ * SupervisorConfig(
+ * RestartStrategy(OneForOne, 3, 10, List(classOf[Exception]),
+ * Supervise(
+ * myFirstActor,
+ * Permanent) ::
+ * Supervise(
+ * mySecondActor,
+ * Permanent) ::
+ * Nil))
+ * </pre>
+ *
+ * You dynamically link and unlink child children using the 'link' and 'unlink' methods.
+ * <pre>
+ * supervisor.link(child)
+ * supervisor.unlink(child)
+ * </pre>
+ *
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+object Supervisor {
+ def apply(config: SupervisorConfig): Supervisor = SupervisorFactory(config).newInstance.start
+}
+
+/**
+ * Use this factory instead of the Supervisor factory object if you want to control
+ * instantiation and starting of the Supervisor, if not then it is easier and better
+ * to use the Supervisor factory object.
+ * <p>
+ * Example usage:
+ * <pre>
+ * val factory = SupervisorFactory(
+ * SupervisorConfig(
+ * RestartStrategy(OneForOne, 3, 10, List(classOf[Exception]),
+ * Supervise(
+ * myFirstActor,
+ * Permanent) ::
+ * Supervise(
+ * mySecondActor,
+ * Permanent) ::
+ * Nil))
+ * </pre>
+ *
+ * Then create a new Supervisor tree with the concrete Services we have defined.
+ *
+ * <pre>
+ * val supervisor = factory.newInstance
+ * supervisor.start // start up all managed servers
+ * </pre>
+ *
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+case class SupervisorFactory(val config: SupervisorConfig) {
+
+ def newInstance: Supervisor = newInstanceFor(config)
+
+ def newInstanceFor(config: SupervisorConfig): Supervisor = {
+ val supervisor = new Supervisor(config.restartStrategy, config.maxRestartsHandler)
+ supervisor.configure(config)
+ supervisor.start
+ supervisor
+ }
+}
+
+/**
+ * <b>NOTE:</b>
+ * <p/>
+ * The supervisor class is only used for the configuration system when configuring supervisor
+ * hierarchies declaratively. Should not be used as part of the regular programming API. Instead
+ * wire the children together using 'link', 'spawnLink' etc. and set the 'trapExit' flag in the
+ * children that should trap error signals and trigger restart.
+ * <p/>
+ * See the ScalaDoc for the SupervisorFactory for an example on how to declaratively wire up children.
+ *
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+sealed class Supervisor(handler: FaultHandlingStrategy, maxRestartsHandler: (ActorRef, MaximumNumberOfRestartsWithinTimeRangeReached) => Unit) {
+ import Supervisor._
+
+ private val _childActors = new ConcurrentHashMap[String, List[ActorRef]]
+ private val _childSupervisors = new CopyOnWriteArrayList[Supervisor]
+
+ private[akka] val supervisor = actorOf(new SupervisorActor(handler, maxRestartsHandler)).start()
+
+ def uuid = supervisor.uuid
+
+ def start: Supervisor = {
+ this
+ }
+
+ def shutdown(): Unit = supervisor.stop()
+
+ def link(child: ActorRef) = supervisor.link(child)
+
+ def unlink(child: ActorRef) = supervisor.unlink(child)
+
+ def children: List[ActorRef] =
+ _childActors.values.toArray.toList.asInstanceOf[List[List[ActorRef]]].flatten
+
+ def childSupervisors: List[Supervisor] =
+ _childActors.values.toArray.toList.asInstanceOf[List[Supervisor]]
+
+ def configure(config: SupervisorConfig): Unit = config match {
+ case SupervisorConfig(_, servers, _) =>
+
+ servers.map(server =>
+ server match {
+ case Supervise(actorRef, lifeCycle, registerAsRemoteService) =>
+ actorRef.start()
+ val className = actorRef.actor.getClass.getName
+ val currentActors = {
+ val list = _childActors.get(className)
+ if (list eq null) List[ActorRef]()
+ else list
+ }
+ _childActors.put(className, actorRef :: currentActors)
+ actorRef.lifeCycle = lifeCycle
+ supervisor.link(actorRef)
+ if (registerAsRemoteService)
+ Actor.remote.register(actorRef)
+ case supervisorConfig@SupervisorConfig(_, _, _) => // recursive supervisor configuration
+ val childSupervisor = Supervisor(supervisorConfig)
+ supervisor.link(childSupervisor.supervisor)
+ _childSupervisors.add(childSupervisor)
+ })
+ }
+}
+
+/**
+ * For internal use only.
+ *
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+final class SupervisorActor private[akka] (handler: FaultHandlingStrategy, maxRestartsHandler: (ActorRef, MaximumNumberOfRestartsWithinTimeRangeReached) => Unit) extends Actor {
+ self.faultHandler = handler
+
+ override def postStop(): Unit = {
+ val i = self.linkedActors.values.iterator
+ while (i.hasNext) {
+ val ref = i.next
+ ref.stop()
+ self.unlink(ref)
+ }
+ }
+
+ def receive = {
+ case max@MaximumNumberOfRestartsWithinTimeRangeReached(_, _, _, _) => maxRestartsHandler(self, max)
+ case unknown => throw new SupervisorException(
+ "SupervisorActor can not respond to messages.\n\tUnknown message [" + unknown + "]")
+ }
+}
diff --git a/test/disabled/presentation/akka/src/akka/actor/UntypedActor.scala b/test/disabled/presentation/akka/src/akka/actor/UntypedActor.scala
new file mode 100644
index 0000000000..cbc43f22f8
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/actor/UntypedActor.scala
@@ -0,0 +1,134 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka.actor
+
+import akka.japi.{ Creator, Procedure }
+
+/**
+ * Subclass this abstract class to create a MDB-style untyped actor.
+ * <p/>
+ * This class is meant to be used from Java.
+ * <p/>
+ * Here is an example on how to create and use an UntypedActor:
+ * <pre>
+ * public class SampleUntypedActor extends UntypedActor {
+ * public void onReceive(Object message) throws Exception {
+ * if (message instanceof String) {
+ * String msg = (String)message;
+ *
+ * if (msg.equals("UseReply")) {
+ * // Reply to original sender of message using the 'replyUnsafe' method
+ * getContext().replyUnsafe(msg + ":" + getContext().getUuid());
+ *
+ * } else if (msg.equals("UseSender") && getContext().getSender().isDefined()) {
+ * // Reply to original sender of message using the sender reference
+ * // also passing along my own reference (the context)
+ * getContext().getSender().get().sendOneWay(msg, context);
+ *
+ * } else if (msg.equals("UseSenderFuture") && getContext().getSenderFuture().isDefined()) {
+ * // Reply to original sender of message using the sender future reference
+ * getContext().getSenderFuture().get().completeWithResult(msg);
+ *
+ * } else if (msg.equals("SendToSelf")) {
+ * // Send message to the actor itself recursively
+ * getContext().sendOneWay(msg)
+ *
+ * } else if (msg.equals("ForwardMessage")) {
+ * // Retrieve an actor from the ActorRegistry by ID and get an ActorRef back
+ * ActorRef actorRef = Actor.registry.actorsFor("some-actor-id").head();
+ *
+ * } else throw new IllegalArgumentException("Unknown message: " + message);
+ * } else throw new IllegalArgumentException("Unknown message: " + message);
+ * }
+ *
+ * public static void main(String[] args) {
+ * ActorRef actor = Actors.actorOf(SampleUntypedActor.class);
+ * actor.start();
+ * actor.sendOneWay("SendToSelf");
+ * actor.stop();
+ * }
+ * }
+ * </pre>
+ *
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+abstract class UntypedActor extends Actor {
+
+ /**
+ * To be implemented by concrete UntypedActor. Defines the message handler.
+ */
+ @throws(classOf[Exception])
+ def onReceive(message: Any): Unit
+
+ /**
+ * Returns the 'self' reference with the API.
+ */
+ def getContext(): ActorRef = self
+
+ /**
+ * Returns the 'self' reference with the API.
+ */
+ def context(): ActorRef = self
+
+ /**
+ * Java API for become
+ */
+ def become(behavior: Procedure[Any]): Unit = become(behavior, false)
+
+ /*
+ * Java API for become with optional discardOld
+ */
+ def become(behavior: Procedure[Any], discardOld: Boolean): Unit =
+ super.become({ case msg => behavior.apply(msg) }, discardOld)
+
+ /**
+ * User overridable callback.
+ * <p/>
+ * Is called when an Actor is started by invoking 'actor.start()'.
+ */
+ override def preStart() {}
+
+ /**
+ * User overridable callback.
+ * <p/>
+ * Is called when 'actor.stop()' is invoked.
+ */
+ override def postStop() {}
+
+ /**
+ * User overridable callback.
+ * <p/>
+ * Is called on a crashed Actor right BEFORE it is restarted to allow clean up of resources before Actor is terminated.
+ */
+ override def preRestart(reason: Throwable) {}
+
+ /**
+ * User overridable callback.
+ * <p/>
+ * Is called right AFTER restart on the newly created Actor to allow reinitialization after an Actor crash.
+ */
+ override def postRestart(reason: Throwable) {}
+
+ /**
+ * User overridable callback.
+ * <p/>
+ * Is called when a message isn't handled by the current behavior of the actor
+ * by default it throws an UnhandledMessageException
+ */
+ override def unhandled(msg: Any) {
+ throw new UnhandledMessageException(msg, self)
+ }
+
+ final protected def receive = {
+ case msg => onReceive(msg)
+ }
+}
+
+/**
+ * Factory closure for an UntypedActor, to be used with 'Actors.actorOf(factory)'.
+ *
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+trait UntypedActorFactory extends Creator[Actor]
diff --git a/test/disabled/presentation/akka/src/akka/actor/package.scala b/test/disabled/presentation/akka/src/akka/actor/package.scala
new file mode 100644
index 0000000000..fbeeed49cb
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/actor/package.scala
@@ -0,0 +1,23 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka
+
+import actor.{ ScalaActorRef, ActorRef }
+
+package object actor {
+ implicit def actorRef2Scala(ref: ActorRef): ScalaActorRef =
+ ref.asInstanceOf[ScalaActorRef]
+
+ implicit def scala2ActorRef(ref: ScalaActorRef): ActorRef =
+ ref.asInstanceOf[ActorRef]
+
+ type Uuid = com.eaio.uuid.UUID
+
+ def newUuid(): Uuid = new Uuid()
+
+ def uuidFrom(time: Long, clockSeqAndNode: Long): Uuid = new Uuid(time, clockSeqAndNode)
+
+ def uuidFrom(uuid: String): Uuid = new Uuid(uuid)
+}
diff --git a/test/disabled/presentation/akka/src/akka/config/Config.scala b/test/disabled/presentation/akka/src/akka/config/Config.scala
new file mode 100644
index 0000000000..6578c66f77
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/config/Config.scala
@@ -0,0 +1,93 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka.config
+
+import akka.AkkaException
+
+class ConfigurationException(message: String, cause: Throwable = null) extends AkkaException(message, cause)
+class ModuleNotAvailableException(message: String, cause: Throwable = null) extends AkkaException(message, cause)
+
+/**
+ * Loads up the configuration (from the akka.conf file).
+ *
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+object Config {
+ val VERSION = "1.1.3"
+
+ val HOME = {
+ val envHome = System.getenv("AKKA_HOME") match {
+ case null | "" | "." => None
+ case value => Some(value)
+ }
+
+ val systemHome = System.getProperty("akka.home") match {
+ case null | "" => None
+ case value => Some(value)
+ }
+
+ envHome orElse systemHome
+ }
+
+ val config: Configuration = try {
+ val confName = {
+ val envConf = System.getenv("AKKA_MODE") match {
+ case null | "" => None
+ case value => Some(value)
+ }
+
+ val systemConf = System.getProperty("akka.mode") match {
+ case null | "" => None
+ case value => Some(value)
+ }
+
+ (envConf orElse systemConf).map("akka." + _ + ".conf").getOrElse("akka.conf")
+ }
+
+ val newInstance =
+ if (System.getProperty("akka.config", "") != "") {
+ val configFile = System.getProperty("akka.config", "")
+ println("Loading config from -Dakka.config=" + configFile)
+ Configuration.fromFile(configFile)
+ } else if (getClass.getClassLoader.getResource(confName) ne null) {
+ println("Loading config [" + confName + "] from the application classpath.")
+ Configuration.fromResource(confName, getClass.getClassLoader)
+ } else if (HOME.isDefined) {
+ val configFile = HOME.get + "/config/" + confName
+ println("AKKA_HOME is defined as [" + HOME.get + "], loading config from [" + configFile + "].")
+ Configuration.fromFile(configFile)
+ } else {
+ println(
+ "\nCan't load '" + confName + "'." +
+ "\nOne of the three ways of locating the '" + confName + "' file needs to be defined:" +
+ "\n\t1. Define the '-Dakka.config=...' system property option." +
+ "\n\t2. Put the '" + confName + "' file on the classpath." +
+ "\n\t3. Define 'AKKA_HOME' environment variable pointing to the root of the Akka distribution." +
+ "\nI have no way of finding the '" + confName + "' configuration file." +
+ "\nUsing default values everywhere.")
+ Configuration.fromString("akka {}") // default empty config
+ }
+
+ val configVersion = newInstance.getString("akka.version", VERSION)
+ if (configVersion != VERSION)
+ throw new ConfigurationException(
+ "Akka JAR version [" + VERSION + "] is different than the provided config version [" + configVersion + "]")
+
+ newInstance
+ } catch {
+ case e =>
+ System.err.println("Couldn't parse config, fatal error.")
+ e.printStackTrace(System.err)
+ System.exit(-1)
+ throw e
+ }
+
+ val CONFIG_VERSION = config.getString("akka.version", VERSION)
+
+ val TIME_UNIT = config.getString("akka.time-unit", "seconds")
+
+ val startTime = System.currentTimeMillis
+ def uptime = (System.currentTimeMillis - startTime) / 1000
+}
diff --git a/test/disabled/presentation/akka/src/akka/config/ConfigParser.scala b/test/disabled/presentation/akka/src/akka/config/ConfigParser.scala
new file mode 100644
index 0000000000..73fac5e31b
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/config/ConfigParser.scala
@@ -0,0 +1,74 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ *
+ * Based on Configgy by Robey Pointer.
+ * Copyright 2009 Robey Pointer <robeypointer@gmail.com>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ */
+
+package akka.config
+
+import scala.collection.mutable
+import scala.util.parsing.combinator._
+
+class ConfigParser(var prefix: String = "", map: mutable.Map[String, Any] = mutable.Map.empty[String, Any], importer: Importer) extends RegexParsers {
+ val sections = mutable.Stack[String]()
+
+ def createPrefix = {
+ prefix = if (sections.isEmpty) "" else sections.toList.reverse.mkString("", ".", ".")
+ }
+
+ override val whiteSpace = """(\s+|#[^\n]*\n)+""".r
+
+ // tokens
+
+ val numberToken: Parser[String] = """-?\d+(\.\d+)?""".r
+ val stringToken: Parser[String] = ("\"" + """([^\\\"]|\\[^ux]|\\\n|\\u[0-9a-fA-F]{4}|\\x[0-9a-fA-F]{2})*""" + "\"").r
+ val booleanToken: Parser[String] = "(true|on|false|off)".r
+ val identToken: Parser[String] = """([\da-zA-Z_][-\w]*)(\.[a-zA-Z_][-\w]*)*""".r
+ val assignToken: Parser[String] = "=".r
+ val sectionToken: Parser[String] = """[a-zA-Z][-\w]*""".r
+
+ // values
+
+ def value: Parser[Any] = number | string | list | boolean
+ def number = numberToken
+ def string = stringToken ^^ { s => s.substring(1, s.length - 1) }
+ def list = "[" ~> repsep(string | numberToken, opt(",")) <~ (opt(",") ~ "]")
+ def boolean = booleanToken
+
+ // parser
+
+ def root = rep(includeFile | assignment | sectionOpen | sectionClose)
+
+ def includeFile = "include" ~> string ^^ {
+ case filename: String =>
+ new ConfigParser(prefix, map, importer) parse importer.importFile(filename)
+ }
+
+ def assignment = identToken ~ assignToken ~ value ^^ {
+ case k ~ a ~ v => map(prefix + k) = v
+ }
+
+ def sectionOpen = sectionToken <~ "{" ^^ { name =>
+ sections push name
+ createPrefix
+ }
+
+ def sectionClose = "}" ^^ { _ =>
+ if (sections.isEmpty) {
+ failure("dangling close tag")
+ } else {
+ sections.pop
+ createPrefix
+ }
+ }
+
+ def parse(in: String): Map[String, Any] = {
+ parseAll(root, in) match {
+ case Success(result, _) => map.toMap
+ case x@Failure(msg, _) => throw new ConfigurationException(x.toString)
+ case x@Error(msg, _) => throw new ConfigurationException(x.toString)
+ }
+ }
+}
diff --git a/test/disabled/presentation/akka/src/akka/config/Configuration.scala b/test/disabled/presentation/akka/src/akka/config/Configuration.scala
new file mode 100644
index 0000000000..81c32fce90
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/config/Configuration.scala
@@ -0,0 +1,166 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ *
+ * Based on Configgy by Robey Pointer.
+ * Copyright 2009 Robey Pointer <robeypointer@gmail.com>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ */
+
+package akka.config
+
+import java.io.File
+
+object Configuration {
+ val DefaultPath = new File(".").getCanonicalPath
+ val DefaultImporter = new FilesystemImporter(DefaultPath)
+
+ def load(data: String, importer: Importer = DefaultImporter): Configuration = {
+ val parser = new ConfigParser(importer = importer)
+ new Configuration(parser parse data)
+ }
+
+ def fromFile(filename: String, importer: Importer): Configuration = {
+ load(importer.importFile(filename), importer)
+ }
+
+ def fromFile(path: String, filename: String): Configuration = {
+ val importer = new FilesystemImporter(path)
+ fromFile(filename, importer)
+ }
+
+ def fromFile(filename: String): Configuration = {
+ val n = filename.lastIndexOf('/')
+ if (n < 0) {
+ fromFile(DefaultPath, filename)
+ } else {
+ fromFile(filename.substring(0, n), filename.substring(n + 1))
+ }
+ }
+
+ def fromResource(filename: String): Configuration = {
+ fromResource(filename, ClassLoader.getSystemClassLoader)
+ }
+
+ def fromResource(filename: String, classLoader: ClassLoader): Configuration = {
+ val importer = new ResourceImporter(classLoader)
+ fromFile(filename, importer)
+ }
+
+ def fromMap(map: Map[String, Any]) = {
+ new Configuration(map)
+ }
+
+ def fromString(data: String): Configuration = {
+ load(data)
+ }
+}
+
+class Configuration(val map: Map[String, Any]) {
+ private val trueValues = Set("true", "on")
+ private val falseValues = Set("false", "off")
+
+ def contains(key: String): Boolean = map contains key
+
+ def keys: Iterable[String] = map.keys
+
+ def getAny(key: String): Option[Any] = {
+ try {
+ Some(map(key))
+ } catch {
+ case _ => None
+ }
+ }
+
+ def getAny(key: String, defaultValue: Any): Any = getAny(key).getOrElse(defaultValue)
+
+ def getSeqAny(key: String): Seq[Any] = {
+ try {
+ map(key).asInstanceOf[Seq[Any]]
+ } catch {
+ case _ => Seq.empty[Any]
+ }
+ }
+
+ def getString(key: String): Option[String] = map.get(key).map(_.toString)
+
+ def getString(key: String, defaultValue: String): String = getString(key).getOrElse(defaultValue)
+
+ def getList(key: String): Seq[String] = {
+ try {
+ map(key).asInstanceOf[Seq[String]]
+ } catch {
+ case _ => Seq.empty[String]
+ }
+ }
+
+ def getInt(key: String): Option[Int] = {
+ try {
+ Some(map(key).toString.toInt)
+ } catch {
+ case _ => None
+ }
+ }
+
+ def getInt(key: String, defaultValue: Int): Int = getInt(key).getOrElse(defaultValue)
+
+ def getLong(key: String): Option[Long] = {
+ try {
+ Some(map(key).toString.toLong)
+ } catch {
+ case _ => None
+ }
+ }
+
+ def getLong(key: String, defaultValue: Long): Long = getLong(key).getOrElse(defaultValue)
+
+ def getFloat(key: String): Option[Float] = {
+ try {
+ Some(map(key).toString.toFloat)
+ } catch {
+ case _ => None
+ }
+ }
+
+ def getFloat(key: String, defaultValue: Float): Float = getFloat(key).getOrElse(defaultValue)
+
+ def getDouble(key: String): Option[Double] = {
+ try {
+ Some(map(key).toString.toDouble)
+ } catch {
+ case _ => None
+ }
+ }
+
+ def getDouble(key: String, defaultValue: Double): Double = getDouble(key).getOrElse(defaultValue)
+
+ def getBoolean(key: String): Option[Boolean] = {
+ getString(key) flatMap { s =>
+ val isTrue = trueValues.contains(s)
+ if (!isTrue && !falseValues.contains(s)) None
+ else Some(isTrue)
+ }
+ }
+
+ def getBoolean(key: String, defaultValue: Boolean): Boolean = getBool(key).getOrElse(defaultValue)
+
+ def getBool(key: String): Option[Boolean] = getBoolean(key)
+
+ def getBool(key: String, defaultValue: Boolean): Boolean = getBoolean(key, defaultValue)
+
+ def apply(key: String): String = getString(key) match {
+ case None => throw new ConfigurationException("undefined config: " + key)
+ case Some(v) => v
+ }
+
+ def apply(key: String, defaultValue: String) = getString(key, defaultValue)
+ def apply(key: String, defaultValue: Int) = getInt(key, defaultValue)
+ def apply(key: String, defaultValue: Long) = getLong(key, defaultValue)
+ def apply(key: String, defaultValue: Boolean) = getBool(key, defaultValue)
+
+ def getSection(name: String): Option[Configuration] = {
+ val l = name.length + 1
+ val m = map.collect { case (k, v) if k.startsWith(name) => (k.substring(l), v) }
+ if (m.isEmpty) None
+ else Some(new Configuration(m))
+ }
+}
diff --git a/test/disabled/presentation/akka/src/akka/config/Configurator.scala b/test/disabled/presentation/akka/src/akka/config/Configurator.scala
new file mode 100644
index 0000000000..2818339b0f
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/config/Configurator.scala
@@ -0,0 +1,21 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka.config
+
+import akka.config.Supervision.{ SuperviseTypedActor, FaultHandlingStrategy }
+
+private[akka] trait TypedActorConfiguratorBase {
+ def getExternalDependency[T](clazz: Class[T]): T
+
+ def configure(restartStrategy: FaultHandlingStrategy, components: List[SuperviseTypedActor]): TypedActorConfiguratorBase
+
+ def inject: TypedActorConfiguratorBase
+
+ def supervise: TypedActorConfiguratorBase
+
+ def reset
+
+ def stop
+}
diff --git a/test/disabled/presentation/akka/src/akka/config/Importer.scala b/test/disabled/presentation/akka/src/akka/config/Importer.scala
new file mode 100644
index 0000000000..eebda1d4fe
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/config/Importer.scala
@@ -0,0 +1,64 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ *
+ * Based on Configgy by Robey Pointer.
+ * Copyright 2009 Robey Pointer <robeypointer@gmail.com>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ */
+
+package akka.config
+
+import java.io.{ BufferedReader, File, FileInputStream, InputStream, InputStreamReader }
+
+/**
+ * An interface for finding config files and reading them into strings for
+ * parsing. This is used to handle `include` directives in config files.
+ */
+trait Importer {
+
+ def importFile(filename: String): String
+
+ private val BUFFER_SIZE = 8192
+
+ protected def streamToString(in: InputStream): String = {
+ try {
+ val reader = new BufferedReader(new InputStreamReader(in, "UTF-8"))
+ val buffer = new Array[Char](BUFFER_SIZE)
+ val sb = new StringBuilder
+ var n = 0
+ while (n >= 0) {
+ n = reader.read(buffer, 0, buffer.length)
+ if (n >= 0) {
+ sb.appendAll(buffer, 0, n)
+ }
+ }
+ in.close()
+ sb.toString
+ } catch {
+ case x => throw new ConfigurationException(x.toString)
+ }
+ }
+}
+
+/**
+ * An Importer that looks for imported config files in the filesystem.
+ * This is the default importer.
+ */
+class FilesystemImporter(val baseDir: String) extends Importer {
+ def importFile(filename: String): String = {
+ val f = new File(filename)
+ val file = if (f.isAbsolute) f else new File(baseDir, filename)
+ streamToString(new FileInputStream(file))
+ }
+}
+
+/**
+ * An Importer that looks for imported config files in the java resources
+ * of the system class loader (usually the jar used to launch this app).
+ */
+class ResourceImporter(classLoader: ClassLoader) extends Importer {
+ def importFile(filename: String): String = {
+ val stream = classLoader.getResourceAsStream(filename)
+ streamToString(stream)
+ }
+}
diff --git a/test/disabled/presentation/akka/src/akka/config/SupervisionConfig.scala b/test/disabled/presentation/akka/src/akka/config/SupervisionConfig.scala
new file mode 100644
index 0000000000..40f61f615f
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/config/SupervisionConfig.scala
@@ -0,0 +1,134 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka.config
+
+import akka.dispatch.MessageDispatcher
+import akka.actor.{ MaximumNumberOfRestartsWithinTimeRangeReached, ActorRef }
+import akka.japi.{ Procedure2, Procedure }
+
+case class RemoteAddress(val hostname: String, val port: Int)
+
+/**
+ * Configuration classes - not to be used as messages.
+ *
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+object Supervision {
+ sealed abstract class ConfigElement
+
+ abstract class Server extends ConfigElement
+ sealed abstract class LifeCycle extends ConfigElement
+ sealed abstract class FaultHandlingStrategy(val trapExit: List[Class[_ <: Throwable]]) extends ConfigElement
+
+ case class SupervisorConfig(restartStrategy: FaultHandlingStrategy, worker: List[Server], maxRestartsHandler: (ActorRef, MaximumNumberOfRestartsWithinTimeRangeReached) => Unit = { (aRef, max) => () }) extends Server {
+ //Java API
+ def this(restartStrategy: FaultHandlingStrategy, worker: Array[Server]) = this(restartStrategy, worker.toList)
+ def this(restartStrategy: FaultHandlingStrategy, worker: Array[Server], restartHandler: Procedure2[ActorRef, MaximumNumberOfRestartsWithinTimeRangeReached]) = this(restartStrategy, worker.toList, { (aRef, max) => restartHandler.apply(aRef, max) })
+ }
+
+ class Supervise(val actorRef: ActorRef, val lifeCycle: LifeCycle, val registerAsRemoteService: Boolean = false) extends Server {
+ //Java API
+ def this(actorRef: ActorRef, lifeCycle: LifeCycle) =
+ this(actorRef, lifeCycle, false)
+ }
+
+ object Supervise {
+ def apply(actorRef: ActorRef, lifeCycle: LifeCycle, registerAsRemoteService: Boolean = false) = new Supervise(actorRef, lifeCycle, registerAsRemoteService)
+ def apply(actorRef: ActorRef, lifeCycle: LifeCycle) = new Supervise(actorRef, lifeCycle, false)
+ def unapply(supervise: Supervise) = Some((supervise.actorRef, supervise.lifeCycle, supervise.registerAsRemoteService))
+ }
+
+ object AllForOneStrategy {
+ def apply(trapExit: List[Class[_ <: Throwable]], maxNrOfRetries: Int, withinTimeRange: Int): AllForOneStrategy =
+ new AllForOneStrategy(trapExit,
+ if (maxNrOfRetries < 0) None else Some(maxNrOfRetries), if (withinTimeRange < 0) None else Some(withinTimeRange))
+ }
+
+ case class AllForOneStrategy(override val trapExit: List[Class[_ <: Throwable]],
+ maxNrOfRetries: Option[Int] = None,
+ withinTimeRange: Option[Int] = None) extends FaultHandlingStrategy(trapExit) {
+ def this(trapExit: List[Class[_ <: Throwable]], maxNrOfRetries: Int, withinTimeRange: Int) =
+ this(trapExit,
+ if (maxNrOfRetries < 0) None else Some(maxNrOfRetries), if (withinTimeRange < 0) None else Some(withinTimeRange))
+
+ def this(trapExit: Array[Class[_ <: Throwable]], maxNrOfRetries: Int, withinTimeRange: Int) =
+ this(trapExit.toList,
+ if (maxNrOfRetries < 0) None else Some(maxNrOfRetries), if (withinTimeRange < 0) None else Some(withinTimeRange))
+
+ def this(trapExit: java.util.List[Class[_ <: Throwable]], maxNrOfRetries: Int, withinTimeRange: Int) =
+ this(trapExit.toArray.toList.asInstanceOf[List[Class[_ <: Throwable]]],
+ if (maxNrOfRetries < 0) None else Some(maxNrOfRetries), if (withinTimeRange < 0) None else Some(withinTimeRange))
+ }
+
+ object OneForOneStrategy {
+ def apply(trapExit: List[Class[_ <: Throwable]], maxNrOfRetries: Int, withinTimeRange: Int): OneForOneStrategy =
+ new OneForOneStrategy(trapExit,
+ if (maxNrOfRetries < 0) None else Some(maxNrOfRetries), if (withinTimeRange < 0) None else Some(withinTimeRange))
+ }
+
+ case class OneForOneStrategy(override val trapExit: List[Class[_ <: Throwable]],
+ maxNrOfRetries: Option[Int] = None,
+ withinTimeRange: Option[Int] = None) extends FaultHandlingStrategy(trapExit) {
+ def this(trapExit: List[Class[_ <: Throwable]], maxNrOfRetries: Int, withinTimeRange: Int) =
+ this(trapExit,
+ if (maxNrOfRetries < 0) None else Some(maxNrOfRetries), if (withinTimeRange < 0) None else Some(withinTimeRange))
+
+ def this(trapExit: Array[Class[_ <: Throwable]], maxNrOfRetries: Int, withinTimeRange: Int) =
+ this(trapExit.toList,
+ if (maxNrOfRetries < 0) None else Some(maxNrOfRetries), if (withinTimeRange < 0) None else Some(withinTimeRange))
+
+ def this(trapExit: java.util.List[Class[_ <: Throwable]], maxNrOfRetries: Int, withinTimeRange: Int) =
+ this(trapExit.toArray.toList.asInstanceOf[List[Class[_ <: Throwable]]],
+ if (maxNrOfRetries < 0) None else Some(maxNrOfRetries), if (withinTimeRange < 0) None else Some(withinTimeRange))
+ }
+
+ case object NoFaultHandlingStrategy extends FaultHandlingStrategy(Nil)
+
+ //Scala API
+ case object Permanent extends LifeCycle
+ case object Temporary extends LifeCycle
+ case object UndefinedLifeCycle extends LifeCycle
+
+ //Java API (& Scala if you fancy)
+ def permanent(): LifeCycle = Permanent
+ def temporary(): LifeCycle = Temporary
+ def undefinedLifeCycle(): LifeCycle = UndefinedLifeCycle
+
+ //Java API
+ def noFaultHandlingStrategy = NoFaultHandlingStrategy
+
+ case class SuperviseTypedActor(_intf: Class[_],
+ val target: Class[_],
+ val lifeCycle: LifeCycle,
+ val timeout: Long,
+ _dispatcher: MessageDispatcher, // optional
+ _remoteAddress: RemoteAddress // optional
+ ) extends Server {
+ val intf: Option[Class[_]] = Option(_intf)
+ val dispatcher: Option[MessageDispatcher] = Option(_dispatcher)
+ val remoteAddress: Option[RemoteAddress] = Option(_remoteAddress)
+
+ def this(target: Class[_], lifeCycle: LifeCycle, timeout: Long) =
+ this(null: Class[_], target, lifeCycle, timeout, null: MessageDispatcher, null: RemoteAddress)
+
+ def this(intf: Class[_], target: Class[_], lifeCycle: LifeCycle, timeout: Long) =
+ this(intf, target, lifeCycle, timeout, null: MessageDispatcher, null: RemoteAddress)
+
+ def this(intf: Class[_], target: Class[_], lifeCycle: LifeCycle, timeout: Long, dispatcher: MessageDispatcher) =
+ this(intf, target, lifeCycle, timeout, dispatcher, null: RemoteAddress)
+
+ def this(target: Class[_], lifeCycle: LifeCycle, timeout: Long, dispatcher: MessageDispatcher) =
+ this(null: Class[_], target, lifeCycle, timeout, dispatcher, null: RemoteAddress)
+
+ def this(intf: Class[_], target: Class[_], lifeCycle: LifeCycle, timeout: Long, remoteAddress: RemoteAddress) =
+ this(intf, target, lifeCycle, timeout, null: MessageDispatcher, remoteAddress)
+
+ def this(target: Class[_], lifeCycle: LifeCycle, timeout: Long, remoteAddress: RemoteAddress) =
+ this(null: Class[_], target, lifeCycle, timeout, null: MessageDispatcher, remoteAddress)
+
+ def this(target: Class[_], lifeCycle: LifeCycle, timeout: Long, dispatcher: MessageDispatcher, remoteAddress: RemoteAddress) =
+ this(null: Class[_], target, lifeCycle, timeout, dispatcher, remoteAddress)
+ }
+}
diff --git a/test/disabled/presentation/akka/src/akka/dataflow/DataFlow.scala b/test/disabled/presentation/akka/src/akka/dataflow/DataFlow.scala
new file mode 100644
index 0000000000..bca7936116
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/dataflow/DataFlow.scala
@@ -0,0 +1,165 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka.dataflow
+
+import java.util.concurrent.atomic.AtomicReference
+import java.util.concurrent.{ ConcurrentLinkedQueue, LinkedBlockingQueue }
+
+import akka.event.EventHandler
+import akka.actor.{ Actor, ActorRef }
+import akka.actor.Actor._
+import akka.dispatch.CompletableFuture
+import akka.AkkaException
+import akka.japi.{ Function, Effect }
+
+/**
+ * Implements Oz-style dataflow (single assignment) variables.
+ *
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+object DataFlow {
+ object Start
+ object Exit
+
+ class DataFlowVariableException(message: String, cause: Throwable = null) extends AkkaException(message, cause)
+
+ /**
+ * Executes the supplied thunk in another thread.
+ */
+ def thread(body: => Unit): Unit = spawn(body)
+
+ /**
+ * JavaAPI.
+ * Executes the supplied Effect in another thread.
+ */
+ def thread(body: Effect): Unit = spawn(body.apply)
+
+ /**
+ * Executes the supplied function in another thread.
+ */
+ def thread[A <: AnyRef, R <: AnyRef](body: A => R) =
+ actorOf(new ReactiveEventBasedThread(body)).start()
+
+ /**
+ * JavaAPI.
+ * Executes the supplied Function in another thread.
+ */
+ def thread[A <: AnyRef, R <: AnyRef](body: Function[A, R]) =
+ actorOf(new ReactiveEventBasedThread(body.apply)).start()
+
+ private class ReactiveEventBasedThread[A <: AnyRef, T <: AnyRef](body: A => T)
+ extends Actor {
+ def receive = {
+ case Exit => self.stop()
+ case message => self.reply(body(message.asInstanceOf[A]))
+ }
+ }
+
+ private object DataFlowVariable {
+ private sealed abstract class DataFlowVariableMessage
+ private case class Set[T <: Any](value: T) extends DataFlowVariableMessage
+ private object Get extends DataFlowVariableMessage
+ }
+
+ /**
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+ @deprecated("Superceeded by Future and CompletableFuture as of 1.1", "1.1")
+ sealed class DataFlowVariable[T <: Any](timeoutMs: Long) {
+ import DataFlowVariable._
+
+ def this() = this(1000 * 60)
+
+ private val value = new AtomicReference[Option[T]](None)
+ private val blockedReaders = new ConcurrentLinkedQueue[ActorRef]
+
+ private class In[T <: Any](dataFlow: DataFlowVariable[T]) extends Actor {
+ self.timeout = timeoutMs
+ def receive = {
+ case s@Set(v) =>
+ if (dataFlow.value.compareAndSet(None, Some(v.asInstanceOf[T]))) {
+ while (dataFlow.blockedReaders.peek ne null)
+ dataFlow.blockedReaders.poll ! s
+ } else throw new DataFlowVariableException(
+ "Attempt to change data flow variable (from [" + dataFlow.value.get + "] to [" + v + "])")
+ case Exit => self.stop()
+ }
+ }
+
+ private class Out[T <: Any](dataFlow: DataFlowVariable[T]) extends Actor {
+ self.timeout = timeoutMs
+ private var readerFuture: Option[CompletableFuture[Any]] = None
+ def receive = {
+ case Get => dataFlow.value.get match {
+ case Some(value) => self reply value
+ case None => readerFuture = self.senderFuture
+ }
+ case Set(v: T) => readerFuture.map(_ completeWithResult v)
+ case Exit => self.stop()
+ }
+ }
+
+ private[this] val in = actorOf(new In(this)).start()
+
+ /**
+ * Sets the value of this variable (if unset) with the value of the supplied variable.
+ */
+ def <<(ref: DataFlowVariable[T]) {
+ if (this.value.get.isEmpty) in ! Set(ref())
+ else throw new DataFlowVariableException(
+ "Attempt to change data flow variable (from [" + this.value.get + "] to [" + ref() + "])")
+ }
+
+ /**
+ * JavaAPI.
+ * Sets the value of this variable (if unset) with the value of the supplied variable.
+ */
+ def set(ref: DataFlowVariable[T]) { this << ref }
+
+ /**
+ * Sets the value of this variable (if unset).
+ */
+ def <<(value: T) {
+ if (this.value.get.isEmpty) in ! Set(value)
+ else throw new DataFlowVariableException(
+ "Attempt to change data flow variable (from [" + this.value.get + "] to [" + value + "])")
+ }
+
+ /**
+ * JavaAPI.
+ * Sets the value of this variable (if unset) with the value of the supplied variable.
+ */
+ def set(value: T) { this << value }
+
+ /**
+ * Retrieves the value of variable, throws a DataFlowVariableException if it times out.
+ */
+ def get(): T = this()
+
+ /**
+ * Retrieves the value of variable, throws a DataFlowVariableException if it times out.
+ */
+ def apply(): T = {
+ value.get getOrElse {
+ val out = actorOf(new Out(this)).start()
+
+ val result = try {
+ blockedReaders offer out
+ (out !! Get).as[T]
+ } catch {
+ case e: Exception =>
+ EventHandler.error(e, this, e.getMessage)
+ out ! Exit
+ throw e
+ }
+
+ result.getOrElse(throw new DataFlowVariableException(
+ "Timed out (after " + timeoutMs + " milliseconds) while waiting for result"))
+ }
+ }
+
+ def shutdown() { in ! Exit }
+ }
+}
diff --git a/test/disabled/presentation/akka/src/akka/dispatch/Dispatchers.scala b/test/disabled/presentation/akka/src/akka/dispatch/Dispatchers.scala
new file mode 100644
index 0000000000..7dd1bf6218
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/dispatch/Dispatchers.scala
@@ -0,0 +1,227 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka.dispatch
+
+import akka.actor.{ Actor, ActorRef }
+import akka.actor.newUuid
+import akka.config.Config._
+import akka.util.{ Duration, ReflectiveAccess }
+
+import akka.config.Configuration
+
+import java.util.concurrent.TimeUnit
+
+/**
+ * Scala API. Dispatcher factory.
+ * <p/>
+ * Example usage:
+ * <pre/>
+ * val dispatcher = Dispatchers.newExecutorBasedEventDrivenDispatcher("name")
+ * dispatcher
+ * .withNewThreadPoolWithLinkedBlockingQueueWithCapacity(100)
+ * .setCorePoolSize(16)
+ * .setMaxPoolSize(128)
+ * .setKeepAliveTimeInMillis(60000)
+ * .setRejectionPolicy(new CallerRunsPolicy)
+ * .build
+ * </pre>
+ * <p/>
+ * Java API. Dispatcher factory.
+ * <p/>
+ * Example usage:
+ * <pre/>
+ * MessageDispatcher dispatcher = Dispatchers.newExecutorBasedEventDrivenDispatcher("name");
+ * dispatcher
+ * .withNewThreadPoolWithLinkedBlockingQueueWithCapacity(100)
+ * .setCorePoolSize(16)
+ * .setMaxPoolSize(128)
+ * .setKeepAliveTimeInMillis(60000)
+ * .setRejectionPolicy(new CallerRunsPolicy())
+ * .build();
+ * </pre>
+ * <p/>
+ *
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+object Dispatchers {
+ val THROUGHPUT = config.getInt("akka.actor.throughput", 5)
+ val DEFAULT_SHUTDOWN_TIMEOUT = config.getLong("akka.actor.dispatcher-shutdown-timeout").
+ map(time => Duration(time, TIME_UNIT)).
+ getOrElse(Duration(1000, TimeUnit.MILLISECONDS))
+ val MAILBOX_CAPACITY = config.getInt("akka.actor.default-dispatcher.mailbox-capacity", -1)
+ val MAILBOX_PUSH_TIME_OUT = Duration(config.getInt("akka.actor.default-dispatcher.mailbox-push-timeout-time", 10), TIME_UNIT)
+ val THROUGHPUT_DEADLINE_TIME = Duration(config.getInt("akka.actor.throughput-deadline-time", -1), TIME_UNIT)
+ val THROUGHPUT_DEADLINE_TIME_MILLIS = THROUGHPUT_DEADLINE_TIME.toMillis.toInt
+ val MAILBOX_TYPE: MailboxType = if (MAILBOX_CAPACITY < 1) UnboundedMailbox() else BoundedMailbox()
+
+ lazy val defaultGlobalDispatcher = {
+ config.getSection("akka.actor.default-dispatcher").flatMap(from).getOrElse(globalExecutorBasedEventDrivenDispatcher)
+ }
+
+ object globalExecutorBasedEventDrivenDispatcher extends ExecutorBasedEventDrivenDispatcher("global", THROUGHPUT, THROUGHPUT_DEADLINE_TIME_MILLIS, MAILBOX_TYPE)
+
+ /**
+ * Creates an thread based dispatcher serving a single actor through the same single thread.
+ * Uses the default timeout
+ * <p/>
+ * E.g. each actor consumes its own thread.
+ */
+ def newThreadBasedDispatcher(actor: ActorRef) = new ThreadBasedDispatcher(actor)
+
+ /**
+ * Creates an thread based dispatcher serving a single actor through the same single thread.
+ * Uses the default timeout
+ * If capacity is negative, it's Integer.MAX_VALUE
+ * <p/>
+ * E.g. each actor consumes its own thread.
+ */
+ def newThreadBasedDispatcher(actor: ActorRef, mailboxCapacity: Int) = new ThreadBasedDispatcher(actor, mailboxCapacity)
+
+ /**
+ * Creates an thread based dispatcher serving a single actor through the same single thread.
+ * If capacity is negative, it's Integer.MAX_VALUE
+ * <p/>
+ * E.g. each actor consumes its own thread.
+ */
+ def newThreadBasedDispatcher(actor: ActorRef, mailboxCapacity: Int, pushTimeOut: Duration) =
+ new ThreadBasedDispatcher(actor, mailboxCapacity, pushTimeOut)
+
+ /**
+ * Creates a executor-based event-driven dispatcher serving multiple (millions) of actors through a thread pool.
+ * <p/>
+ * Has a fluent builder interface for configuring its semantics.
+ */
+ def newExecutorBasedEventDrivenDispatcher(name: String) =
+ ThreadPoolConfigDispatcherBuilder(config => new ExecutorBasedEventDrivenDispatcher(name, config), ThreadPoolConfig())
+
+ /**
+ * Creates a executor-based event-driven dispatcher serving multiple (millions) of actors through a thread pool.
+ * <p/>
+ * Has a fluent builder interface for configuring its semantics.
+ */
+ def newExecutorBasedEventDrivenDispatcher(name: String, throughput: Int, mailboxType: MailboxType) =
+ ThreadPoolConfigDispatcherBuilder(config =>
+ new ExecutorBasedEventDrivenDispatcher(name, throughput, THROUGHPUT_DEADLINE_TIME_MILLIS, mailboxType, config), ThreadPoolConfig())
+
+ /**
+ * Creates a executor-based event-driven dispatcher serving multiple (millions) of actors through a thread pool.
+ * <p/>
+ * Has a fluent builder interface for configuring its semantics.
+ */
+ def newExecutorBasedEventDrivenDispatcher(name: String, throughput: Int, throughputDeadlineMs: Int, mailboxType: MailboxType) =
+ ThreadPoolConfigDispatcherBuilder(config =>
+ new ExecutorBasedEventDrivenDispatcher(name, throughput, throughputDeadlineMs, mailboxType, config), ThreadPoolConfig())
+
+ /**
+ * Creates a executor-based event-driven dispatcher, with work-stealing, serving multiple (millions) of actors through a thread pool.
+ * <p/>
+ * Has a fluent builder interface for configuring its semantics.
+ */
+ def newExecutorBasedEventDrivenWorkStealingDispatcher(name: String) =
+ ThreadPoolConfigDispatcherBuilder(config => new ExecutorBasedEventDrivenWorkStealingDispatcher(name, config), ThreadPoolConfig())
+
+ /**
+ * Creates a executor-based event-driven dispatcher, with work-stealing, serving multiple (millions) of actors through a thread pool.
+ * <p/>
+ * Has a fluent builder interface for configuring its semantics.
+ */
+ def newExecutorBasedEventDrivenWorkStealingDispatcher(name: String, throughput: Int) =
+ ThreadPoolConfigDispatcherBuilder(config =>
+ new ExecutorBasedEventDrivenWorkStealingDispatcher(name, throughput, THROUGHPUT_DEADLINE_TIME_MILLIS, MAILBOX_TYPE, config), ThreadPoolConfig())
+
+ /**
+ * Creates a executor-based event-driven dispatcher, with work-stealing, serving multiple (millions) of actors through a thread pool.
+ * <p/>
+ * Has a fluent builder interface for configuring its semantics.
+ */
+ def newExecutorBasedEventDrivenWorkStealingDispatcher(name: String, throughput: Int, mailboxType: MailboxType) =
+ ThreadPoolConfigDispatcherBuilder(config =>
+ new ExecutorBasedEventDrivenWorkStealingDispatcher(name, throughput, THROUGHPUT_DEADLINE_TIME_MILLIS, mailboxType, config), ThreadPoolConfig())
+
+ /**
+ * Creates a executor-based event-driven dispatcher, with work-stealing, serving multiple (millions) of actors through a thread pool.
+ * <p/>
+ * Has a fluent builder interface for configuring its semantics.
+ */
+ def newExecutorBasedEventDrivenWorkStealingDispatcher(name: String, throughput: Int, throughputDeadlineMs: Int, mailboxType: MailboxType) =
+ ThreadPoolConfigDispatcherBuilder(config =>
+ new ExecutorBasedEventDrivenWorkStealingDispatcher(name, throughput, throughputDeadlineMs, mailboxType, config), ThreadPoolConfig())
+ /**
+ * Utility function that tries to load the specified dispatcher config from the akka.conf
+ * or else use the supplied default dispatcher
+ */
+ def fromConfig(key: String, default: => MessageDispatcher = defaultGlobalDispatcher): MessageDispatcher =
+ config getSection key flatMap from getOrElse default
+
+ /*
+ * Creates of obtains a dispatcher from a ConfigMap according to the format below
+ *
+ * default-dispatcher {
+ * type = "GlobalExecutorBasedEventDriven" # Must be one of the following, all "Global*" are non-configurable
+ * # (ExecutorBasedEventDrivenWorkStealing), ExecutorBasedEventDriven,
+ * # GlobalExecutorBasedEventDriven
+ * # A FQCN to a class inheriting MessageDispatcherConfigurator with a no-arg visible constructor
+ * keep-alive-time = 60 # Keep alive time for threads
+ * core-pool-size-factor = 1.0 # No of core threads ... ceil(available processors * factor)
+ * max-pool-size-factor = 4.0 # Max no of threads ... ceil(available processors * factor)
+ * executor-bounds = -1 # Makes the Executor bounded, -1 is unbounded
+ * allow-core-timeout = on # Allow core threads to time out
+ * rejection-policy = "caller-runs" # abort, caller-runs, discard-oldest, discard
+ * throughput = 5 # Throughput for ExecutorBasedEventDrivenDispatcher
+ * }
+ * ex: from(config.getConfigMap(identifier).get)
+ *
+ * Gotcha: Only configures the dispatcher if possible
+ * Returns: None if "type" isn't specified in the config
+ * Throws: IllegalArgumentException if the value of "type" is not valid
+ * IllegalArgumentException if it cannot
+ */
+ def from(cfg: Configuration): Option[MessageDispatcher] = {
+ cfg.getString("type") map {
+ case "ExecutorBasedEventDriven" => new ExecutorBasedEventDrivenDispatcherConfigurator()
+ case "ExecutorBasedEventDrivenWorkStealing" => new ExecutorBasedEventDrivenWorkStealingDispatcherConfigurator()
+ case "GlobalExecutorBasedEventDriven" => GlobalExecutorBasedEventDrivenDispatcherConfigurator
+ case fqn =>
+ ReflectiveAccess.getClassFor[MessageDispatcherConfigurator](fqn) match {
+ case r: Right[_, Class[MessageDispatcherConfigurator]] =>
+ ReflectiveAccess.createInstance[MessageDispatcherConfigurator](r.b, Array[Class[_]](), Array[AnyRef]()) match {
+ case r: Right[Exception, MessageDispatcherConfigurator] => r.b
+ case l: Left[Exception, MessageDispatcherConfigurator] =>
+ throw new IllegalArgumentException("Cannot instantiate MessageDispatcherConfigurator type [%s], make sure it has a default no-args constructor" format fqn, l.a)
+ }
+ case l: Left[Exception, _] =>
+ throw new IllegalArgumentException("Unknown MessageDispatcherConfigurator type [%s]" format fqn, l.a)
+ }
+ } map {
+ _ configure cfg
+ }
+ }
+}
+
+object GlobalExecutorBasedEventDrivenDispatcherConfigurator extends MessageDispatcherConfigurator {
+ def configure(config: Configuration): MessageDispatcher = Dispatchers.globalExecutorBasedEventDrivenDispatcher
+}
+
+class ExecutorBasedEventDrivenDispatcherConfigurator extends MessageDispatcherConfigurator {
+ def configure(config: Configuration): MessageDispatcher = {
+ configureThreadPool(config, threadPoolConfig => new ExecutorBasedEventDrivenDispatcher(
+ config.getString("name", newUuid.toString),
+ config.getInt("throughput", Dispatchers.THROUGHPUT),
+ config.getInt("throughput-deadline-time", Dispatchers.THROUGHPUT_DEADLINE_TIME_MILLIS),
+ mailboxType(config),
+ threadPoolConfig)).build
+ }
+}
+
+class ExecutorBasedEventDrivenWorkStealingDispatcherConfigurator extends MessageDispatcherConfigurator {
+ def configure(config: Configuration): MessageDispatcher = {
+ configureThreadPool(config, threadPoolConfig => new ExecutorBasedEventDrivenWorkStealingDispatcher(
+ config.getString("name", newUuid.toString),
+ config.getInt("throughput", Dispatchers.THROUGHPUT),
+ config.getInt("throughput-deadline-time", Dispatchers.THROUGHPUT_DEADLINE_TIME_MILLIS),
+ mailboxType(config),
+ threadPoolConfig)).build
+ }
+} \ No newline at end of file
diff --git a/test/disabled/presentation/akka/src/akka/dispatch/ExecutorBasedEventDrivenDispatcher.scala b/test/disabled/presentation/akka/src/akka/dispatch/ExecutorBasedEventDrivenDispatcher.scala
new file mode 100644
index 0000000000..bc3f29ac68
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/dispatch/ExecutorBasedEventDrivenDispatcher.scala
@@ -0,0 +1,305 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka.dispatch
+
+import akka.event.EventHandler
+import akka.actor.{ ActorRef, IllegalActorStateException }
+import akka.util.{ ReflectiveAccess, Switch }
+
+import java.util.Queue
+import java.util.concurrent.atomic.AtomicReference
+import java.util.concurrent.{ TimeUnit, ExecutorService, RejectedExecutionException, ConcurrentLinkedQueue, LinkedBlockingQueue }
+
+/**
+ * Default settings are:
+ * <pre/>
+ * - withNewThreadPoolWithLinkedBlockingQueueWithUnboundedCapacity
+ * - NR_START_THREADS = 16
+ * - NR_MAX_THREADS = 128
+ * - KEEP_ALIVE_TIME = 60000L // one minute
+ * </pre>
+ * <p/>
+ *
+ * The dispatcher has a fluent builder interface to build up a thread pool to suite your use-case.
+ * There is a default thread pool defined but make use of the builder if you need it. Here are some examples.
+ * <p/>
+ *
+ * Scala API.
+ * <p/>
+ * Example usage:
+ * <pre/>
+ * val dispatcher = new ExecutorBasedEventDrivenDispatcher("name")
+ * dispatcher
+ * .withNewThreadPoolWithBoundedBlockingQueue(100)
+ * .setCorePoolSize(16)
+ * .setMaxPoolSize(128)
+ * .setKeepAliveTimeInMillis(60000)
+ * .setRejectionPolicy(new CallerRunsPolicy)
+ * .buildThreadPool
+ * </pre>
+ * <p/>
+ *
+ * Java API.
+ * <p/>
+ * Example usage:
+ * <pre/>
+ * ExecutorBasedEventDrivenDispatcher dispatcher = new ExecutorBasedEventDrivenDispatcher("name");
+ * dispatcher
+ * .withNewThreadPoolWithBoundedBlockingQueue(100)
+ * .setCorePoolSize(16)
+ * .setMaxPoolSize(128)
+ * .setKeepAliveTimeInMillis(60000)
+ * .setRejectionPolicy(new CallerRunsPolicy())
+ * .buildThreadPool();
+ * </pre>
+ * <p/>
+ *
+ * But the preferred way of creating dispatchers is to use
+ * the {@link akka.dispatch.Dispatchers} factory object.
+ *
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ * @param throughput positive integer indicates the dispatcher will only process so much messages at a time from the
+ * mailbox, without checking the mailboxes of other actors. Zero or negative means the dispatcher
+ * always continues until the mailbox is empty.
+ * Larger values (or zero or negative) increase throughput, smaller values increase fairness
+ */
+class ExecutorBasedEventDrivenDispatcher(
+ _name: String,
+ val throughput: Int = Dispatchers.THROUGHPUT,
+ val throughputDeadlineTime: Int = Dispatchers.THROUGHPUT_DEADLINE_TIME_MILLIS,
+ val mailboxType: MailboxType = Dispatchers.MAILBOX_TYPE,
+ val config: ThreadPoolConfig = ThreadPoolConfig())
+ extends MessageDispatcher {
+
+ def this(_name: String, throughput: Int, throughputDeadlineTime: Int, mailboxType: MailboxType) =
+ this(_name, throughput, throughputDeadlineTime, mailboxType, ThreadPoolConfig()) // Needed for Java API usage
+
+ def this(_name: String, throughput: Int, mailboxType: MailboxType) =
+ this(_name, throughput, Dispatchers.THROUGHPUT_DEADLINE_TIME_MILLIS, mailboxType) // Needed for Java API usage
+
+ def this(_name: String, throughput: Int) =
+ this(_name, throughput, Dispatchers.THROUGHPUT_DEADLINE_TIME_MILLIS, Dispatchers.MAILBOX_TYPE) // Needed for Java API usage
+
+ def this(_name: String, _config: ThreadPoolConfig) =
+ this(_name, Dispatchers.THROUGHPUT, Dispatchers.THROUGHPUT_DEADLINE_TIME_MILLIS, Dispatchers.MAILBOX_TYPE, _config)
+
+ def this(_name: String) =
+ this(_name, Dispatchers.THROUGHPUT, Dispatchers.THROUGHPUT_DEADLINE_TIME_MILLIS, Dispatchers.MAILBOX_TYPE) // Needed for Java API usage
+
+ val name = "akka:event-driven:dispatcher:" + _name
+
+ private[akka] val threadFactory = new MonitorableThreadFactory(name)
+ private[akka] val executorService = new AtomicReference[ExecutorService](config.createLazyExecutorService(threadFactory))
+
+ private[akka] def dispatch(invocation: MessageInvocation) = {
+ val mbox = getMailbox(invocation.receiver)
+ mbox enqueue invocation
+ registerForExecution(mbox)
+ }
+
+ private[akka] def executeFuture(invocation: FutureInvocation[_]): Unit = if (active.isOn) {
+ try executorService.get() execute invocation
+ catch {
+ case e: RejectedExecutionException =>
+ EventHandler.warning(this, e.toString)
+ throw e
+ }
+ }
+
+ /**
+ * @return the mailbox associated with the actor
+ */
+ protected def getMailbox(receiver: ActorRef) = receiver.mailbox.asInstanceOf[MessageQueue with ExecutableMailbox]
+
+ override def mailboxSize(actorRef: ActorRef) = getMailbox(actorRef).size
+
+ def createMailbox(actorRef: ActorRef): AnyRef = mailboxType match {
+ case b: UnboundedMailbox =>
+ new ConcurrentLinkedQueue[MessageInvocation] with MessageQueue with ExecutableMailbox {
+ @inline
+ final def dispatcher = ExecutorBasedEventDrivenDispatcher.this
+ @inline
+ final def enqueue(m: MessageInvocation) = this.add(m)
+ @inline
+ final def dequeue(): MessageInvocation = this.poll()
+ }
+ case b: BoundedMailbox =>
+ new DefaultBoundedMessageQueue(b.capacity, b.pushTimeOut) with ExecutableMailbox {
+ @inline
+ final def dispatcher = ExecutorBasedEventDrivenDispatcher.this
+ }
+ }
+
+ private[akka] def start {}
+
+ private[akka] def shutdown {
+ val old = executorService.getAndSet(config.createLazyExecutorService(threadFactory))
+ if (old ne null) {
+ old.shutdownNow()
+ }
+ }
+
+ private[akka] def registerForExecution(mbox: MessageQueue with ExecutableMailbox): Unit = {
+ if (mbox.dispatcherLock.tryLock()) {
+ if (active.isOn && !mbox.suspended.locked) { //If the dispatcher is active and the actor not suspended
+ try {
+ executorService.get() execute mbox
+ } catch {
+ case e: RejectedExecutionException =>
+ EventHandler.warning(this, e.toString)
+ mbox.dispatcherLock.unlock()
+ throw e
+ }
+ } else {
+ mbox.dispatcherLock.unlock() //If the dispatcher isn't active or if the actor is suspended, unlock the dispatcher lock
+ }
+ }
+ }
+
+ private[akka] def reRegisterForExecution(mbox: MessageQueue with ExecutableMailbox): Unit =
+ registerForExecution(mbox)
+
+ override val toString = getClass.getSimpleName + "[" + name + "]"
+
+ def suspend(actorRef: ActorRef) {
+ getMailbox(actorRef).suspended.tryLock
+ }
+
+ def resume(actorRef: ActorRef) {
+ val mbox = getMailbox(actorRef)
+ mbox.suspended.tryUnlock
+ reRegisterForExecution(mbox)
+ }
+}
+
+/**
+ * This is the behavior of an ExecutorBasedEventDrivenDispatchers mailbox.
+ */
+trait ExecutableMailbox extends Runnable { self: MessageQueue =>
+
+ def dispatcher: ExecutorBasedEventDrivenDispatcher
+
+ final def run = {
+ try {
+ processMailbox()
+ } catch {
+ case ie: InterruptedException =>
+ }
+ finally {
+ dispatcherLock.unlock()
+ }
+ if (!self.isEmpty)
+ dispatcher.reRegisterForExecution(this)
+ }
+
+ /**
+ * Process the messages in the mailbox
+ *
+ * @return true if the processing finished before the mailbox was empty, due to the throughput constraint
+ */
+ final def processMailbox() {
+ if (!self.suspended.locked) {
+ var nextMessage = self.dequeue
+ if (nextMessage ne null) { //If we have a message
+ if (dispatcher.throughput <= 1) //If we only run one message per process
+ nextMessage.invoke //Just run it
+ else { //But otherwise, if we are throttled, we need to do some book-keeping
+ var processedMessages = 0
+ val isDeadlineEnabled = dispatcher.throughputDeadlineTime > 0
+ val deadlineNs = if (isDeadlineEnabled) System.nanoTime + TimeUnit.MILLISECONDS.toNanos(dispatcher.throughputDeadlineTime)
+ else 0
+ do {
+ nextMessage.invoke
+ nextMessage =
+ if (self.suspended.locked) {
+ null // If we are suspended, abort
+ } else { // If we aren't suspended, we need to make sure we're not overstepping our boundaries
+ processedMessages += 1
+ if ((processedMessages >= dispatcher.throughput) || (isDeadlineEnabled && System.nanoTime >= deadlineNs)) // If we're throttled, break out
+ null //We reached our boundaries, abort
+ else self.dequeue //Dequeue the next message
+ }
+ } while (nextMessage ne null)
+ }
+ }
+ }
+ }
+}
+
+object PriorityGenerator {
+ /**
+ * Creates a PriorityGenerator that uses the supplied function as priority generator
+ */
+ def apply(priorityFunction: Any => Int): PriorityGenerator = new PriorityGenerator {
+ def gen(message: Any): Int = priorityFunction(message)
+ }
+}
+
+/**
+ * A PriorityGenerator is a convenience API to create a Comparator that orders the messages of a
+ * PriorityExecutorBasedEventDrivenDispatcher
+ */
+abstract class PriorityGenerator extends java.util.Comparator[MessageInvocation] {
+ def gen(message: Any): Int
+
+ final def compare(thisMessage: MessageInvocation, thatMessage: MessageInvocation): Int =
+ gen(thisMessage.message) - gen(thatMessage.message)
+}
+
+/**
+ * A version of ExecutorBasedEventDrivenDispatcher that gives all actors registered to it a priority mailbox,
+ * prioritized according to the supplied comparator.
+ *
+ * The dispatcher will process the messages with the _lowest_ priority first.
+ */
+class PriorityExecutorBasedEventDrivenDispatcher(
+ name: String,
+ val comparator: java.util.Comparator[MessageInvocation],
+ throughput: Int = Dispatchers.THROUGHPUT,
+ throughputDeadlineTime: Int = Dispatchers.THROUGHPUT_DEADLINE_TIME_MILLIS,
+ mailboxType: MailboxType = Dispatchers.MAILBOX_TYPE,
+ config: ThreadPoolConfig = ThreadPoolConfig()) extends ExecutorBasedEventDrivenDispatcher(name, throughput, throughputDeadlineTime, mailboxType, config) with PriorityMailbox {
+
+ def this(name: String, comparator: java.util.Comparator[MessageInvocation], throughput: Int, throughputDeadlineTime: Int, mailboxType: MailboxType) =
+ this(name, comparator, throughput, throughputDeadlineTime, mailboxType, ThreadPoolConfig()) // Needed for Java API usage
+
+ def this(name: String, comparator: java.util.Comparator[MessageInvocation], throughput: Int, mailboxType: MailboxType) =
+ this(name, comparator, throughput, Dispatchers.THROUGHPUT_DEADLINE_TIME_MILLIS, mailboxType) // Needed for Java API usage
+
+ def this(name: String, comparator: java.util.Comparator[MessageInvocation], throughput: Int) =
+ this(name, comparator, throughput, Dispatchers.THROUGHPUT_DEADLINE_TIME_MILLIS, Dispatchers.MAILBOX_TYPE) // Needed for Java API usage
+
+ def this(name: String, comparator: java.util.Comparator[MessageInvocation], config: ThreadPoolConfig) =
+ this(name, comparator, Dispatchers.THROUGHPUT, Dispatchers.THROUGHPUT_DEADLINE_TIME_MILLIS, Dispatchers.MAILBOX_TYPE, config)
+
+ def this(name: String, comparator: java.util.Comparator[MessageInvocation]) =
+ this(name, comparator, Dispatchers.THROUGHPUT, Dispatchers.THROUGHPUT_DEADLINE_TIME_MILLIS, Dispatchers.MAILBOX_TYPE) // Needed for Java API usage
+}
+
+/**
+ * Can be used to give an ExecutorBasedEventDrivenDispatcher's actors priority-enabled mailboxes
+ *
+ * Usage:
+ * new ExecutorBasedEventDrivenDispatcher(...) with PriorityMailbox {
+ * val comparator = ...comparator that determines mailbox priority ordering...
+ * }
+ */
+trait PriorityMailbox { self: ExecutorBasedEventDrivenDispatcher =>
+ def comparator: java.util.Comparator[MessageInvocation]
+
+ override def createMailbox(actorRef: ActorRef): AnyRef = self.mailboxType match {
+ case b: UnboundedMailbox =>
+ new UnboundedPriorityMessageQueue(comparator) with ExecutableMailbox {
+ @inline
+ final def dispatcher = self
+ }
+
+ case b: BoundedMailbox =>
+ new BoundedPriorityMessageQueue(b.capacity, b.pushTimeOut, comparator) with ExecutableMailbox {
+ @inline
+ final def dispatcher = self
+ }
+ }
+}
diff --git a/test/disabled/presentation/akka/src/akka/dispatch/ExecutorBasedEventDrivenWorkStealingDispatcher.scala b/test/disabled/presentation/akka/src/akka/dispatch/ExecutorBasedEventDrivenWorkStealingDispatcher.scala
new file mode 100644
index 0000000000..4cba8eec8b
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/dispatch/ExecutorBasedEventDrivenWorkStealingDispatcher.scala
@@ -0,0 +1,165 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka.dispatch
+
+import akka.actor.{ ActorRef, Actor, IllegalActorStateException }
+import akka.util.{ ReflectiveAccess, Switch }
+
+import java.util.Queue
+import java.util.concurrent.atomic.{ AtomicReference, AtomicInteger }
+import java.util.concurrent.{ TimeUnit, ExecutorService, RejectedExecutionException, ConcurrentLinkedQueue, LinkedBlockingQueue }
+import util.DynamicVariable
+
+/**
+ * An executor based event driven dispatcher which will try to redistribute work from busy actors to idle actors. It is assumed
+ * that all actors using the same instance of this dispatcher can process all messages that have been sent to one of the actors. I.e. the
+ * actors belong to a pool of actors, and to the client there is no guarantee about which actor instance actually processes a given message.
+ * <p/>
+ * Although the technique used in this implementation is commonly known as "work stealing", the actual implementation is probably
+ * best described as "work donating" because the actor of which work is being stolen takes the initiative.
+ * <p/>
+ * The preferred way of creating dispatchers is to use
+ * the {@link akka.dispatch.Dispatchers} factory object.
+ *
+ * @see akka.dispatch.ExecutorBasedEventDrivenWorkStealingDispatcher
+ * @see akka.dispatch.Dispatchers
+ *
+ * @author Viktor Klang
+ */
+class ExecutorBasedEventDrivenWorkStealingDispatcher(
+ _name: String,
+ throughput: Int = Dispatchers.THROUGHPUT,
+ throughputDeadlineTime: Int = Dispatchers.THROUGHPUT_DEADLINE_TIME_MILLIS,
+ mailboxType: MailboxType = Dispatchers.MAILBOX_TYPE,
+ config: ThreadPoolConfig = ThreadPoolConfig())
+ extends ExecutorBasedEventDrivenDispatcher(_name, throughput, throughputDeadlineTime, mailboxType, config) {
+
+ def this(_name: String, throughput: Int, throughputDeadlineTime: Int, mailboxType: MailboxType) =
+ this(_name, throughput, throughputDeadlineTime, mailboxType, ThreadPoolConfig()) // Needed for Java API usage
+
+ def this(_name: String, throughput: Int, mailboxType: MailboxType) =
+ this(_name, throughput, Dispatchers.THROUGHPUT_DEADLINE_TIME_MILLIS, mailboxType) // Needed for Java API usage
+
+ def this(_name: String, throughput: Int) =
+ this(_name, throughput, Dispatchers.THROUGHPUT_DEADLINE_TIME_MILLIS, Dispatchers.MAILBOX_TYPE) // Needed for Java API usage
+
+ def this(_name: String, _config: ThreadPoolConfig) =
+ this(_name, Dispatchers.THROUGHPUT, Dispatchers.THROUGHPUT_DEADLINE_TIME_MILLIS, Dispatchers.MAILBOX_TYPE, _config)
+
+ def this(_name: String, memberType: Class[_ <: Actor]) =
+ this(_name, Dispatchers.THROUGHPUT, Dispatchers.THROUGHPUT_DEADLINE_TIME_MILLIS, Dispatchers.MAILBOX_TYPE) // Needed for Java API usage
+
+ def this(_name: String, mailboxType: MailboxType) =
+ this(_name, Dispatchers.THROUGHPUT, Dispatchers.THROUGHPUT_DEADLINE_TIME_MILLIS, mailboxType) // Needed for Java API usage
+
+ @volatile
+ private var actorType: Option[Class[_]] = None
+ @volatile
+ private var members = Vector[ActorRef]()
+ private val donationInProgress = new DynamicVariable(false)
+
+ private[akka] override def register(actorRef: ActorRef) = {
+ //Verify actor type conformity
+ actorType match {
+ case None => actorType = Some(actorRef.actor.getClass)
+ case Some(aType) =>
+ if (aType != actorRef.actor.getClass)
+ throw new IllegalActorStateException(String.format(
+ "Can't register actor %s in a work stealing dispatcher which already knows actors of type %s",
+ actorRef, aType))
+ }
+
+ synchronized { members :+= actorRef } //Update members
+ super.register(actorRef)
+ }
+
+ private[akka] override def unregister(actorRef: ActorRef) = {
+ synchronized { members = members.filterNot(actorRef eq) } //Update members
+ super.unregister(actorRef)
+ }
+
+ override private[akka] def dispatch(invocation: MessageInvocation) = {
+ val mbox = getMailbox(invocation.receiver)
+ if (donationInProgress.value == false && (!mbox.isEmpty || mbox.dispatcherLock.locked) && attemptDonationOf(invocation, mbox)) {
+ //We were busy and we got to donate the message to some other lucky guy, we're done here
+ } else {
+ mbox enqueue invocation
+ registerForExecution(mbox)
+ }
+ }
+
+ override private[akka] def reRegisterForExecution(mbox: MessageQueue with ExecutableMailbox): Unit = {
+ try {
+ donationInProgress.value = true
+ while (donateFrom(mbox)) {} //When we reregister, first donate messages to another actor
+ } finally { donationInProgress.value = false }
+
+ if (!mbox.isEmpty) //If we still have messages left to process, reschedule for execution
+ super.reRegisterForExecution(mbox)
+ }
+
+ /**
+ * Returns true if it successfully donated a message
+ */
+ protected def donateFrom(donorMbox: MessageQueue with ExecutableMailbox): Boolean = {
+ val actors = members // copy to prevent concurrent modifications having any impact
+
+ // we risk to pick a thief which is unregistered from the dispatcher in the meantime, but that typically means
+ // the dispatcher is being shut down...
+ // Starts at is seeded by current time
+ doFindDonorRecipient(donorMbox, actors, (System.currentTimeMillis % actors.size).asInstanceOf[Int]) match {
+ case null => false
+ case recipient => donate(donorMbox.dequeue, recipient)
+ }
+ }
+
+ /**
+ * Returns true if the donation succeeded or false otherwise
+ */
+ protected def attemptDonationOf(message: MessageInvocation, donorMbox: MessageQueue with ExecutableMailbox): Boolean = try {
+ donationInProgress.value = true
+ val actors = members // copy to prevent concurrent modifications having any impact
+ doFindDonorRecipient(donorMbox, actors, System.identityHashCode(message) % actors.size) match {
+ case null => false
+ case recipient => donate(message, recipient)
+ }
+ } finally { donationInProgress.value = false }
+
+ /**
+ * Rewrites the message and adds that message to the recipients mailbox
+ * returns true if the message is non-null
+ */
+ protected def donate(organ: MessageInvocation, recipient: ActorRef): Boolean = {
+ if (organ ne null) {
+ if (organ.senderFuture.isDefined) recipient.postMessageToMailboxAndCreateFutureResultWithTimeout[Any](
+ organ.message, recipient.timeout, organ.sender, organ.senderFuture)
+ else if (organ.sender.isDefined) recipient.postMessageToMailbox(organ.message, organ.sender)
+ else recipient.postMessageToMailbox(organ.message, None)
+ true
+ } else false
+ }
+
+ /**
+ * Returns an available recipient for the message, if any
+ */
+ protected def doFindDonorRecipient(donorMbox: MessageQueue with ExecutableMailbox, potentialRecipients: Vector[ActorRef], startIndex: Int): ActorRef = {
+ val prSz = potentialRecipients.size
+ var i = 0
+ var recipient: ActorRef = null
+
+ while ((i < prSz) && (recipient eq null)) {
+ val actor = potentialRecipients((i + startIndex) % prSz) //Wrap-around, one full lap
+ val mbox = getMailbox(actor)
+
+ if ((mbox ne donorMbox) && mbox.isEmpty) { //Don't donate to yourself
+ recipient = actor //Found!
+ }
+
+ i += 1
+ }
+
+ recipient // nothing found, reuse same start index next time
+ }
+}
diff --git a/test/disabled/presentation/akka/src/akka/dispatch/Future.scala b/test/disabled/presentation/akka/src/akka/dispatch/Future.scala
new file mode 100644
index 0000000000..1ad304d726
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/dispatch/Future.scala
@@ -0,0 +1,832 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka.dispatch
+
+import akka.AkkaException
+import akka.event.EventHandler
+import akka.actor.{ Actor, Channel }
+import akka.util.Duration
+import akka.japi.{ Procedure, Function => JFunc }
+
+import scala.util.continuations._
+
+import java.util.concurrent.locks.ReentrantLock
+import java.util.concurrent.{ ConcurrentLinkedQueue, TimeUnit, Callable }
+import java.util.concurrent.TimeUnit.{ NANOSECONDS => NANOS, MILLISECONDS => MILLIS }
+import java.util.concurrent.atomic.{ AtomicBoolean }
+import java.lang.{ Iterable => JIterable }
+import java.util.{ LinkedList => JLinkedList }
+import scala.collection.mutable.Stack
+import annotation.tailrec
+
+class FutureTimeoutException(message: String, cause: Throwable = null) extends AkkaException(message, cause)
+
+object Futures {
+
+ /**
+ * Java API, equivalent to Future.apply
+ */
+ def future[T](body: Callable[T]): Future[T] =
+ Future(body.call)
+
+ /**
+ * Java API, equivalent to Future.apply
+ */
+ def future[T](body: Callable[T], timeout: Long): Future[T] =
+ Future(body.call, timeout)
+
+ /**
+ * Java API, equivalent to Future.apply
+ */
+ def future[T](body: Callable[T], dispatcher: MessageDispatcher): Future[T] =
+ Future(body.call)(dispatcher)
+
+ /**
+ * Java API, equivalent to Future.apply
+ */
+ def future[T](body: Callable[T], timeout: Long, dispatcher: MessageDispatcher): Future[T] =
+ Future(body.call, timeout)(dispatcher)
+
+ /**
+ * Returns a Future to the result of the first future in the list that is completed
+ */
+ def firstCompletedOf[T](futures: Iterable[Future[T]], timeout: Long = Long.MaxValue): Future[T] = {
+ val futureResult = new DefaultCompletableFuture[T](timeout)
+
+ val completeFirst: Future[T] => Unit = _.value.foreach(futureResult complete _)
+ for (f ← futures) f onComplete completeFirst
+
+ futureResult
+ }
+
+ /**
+ * Java API.
+ * Returns a Future to the result of the first future in the list that is completed
+ */
+ def firstCompletedOf[T <: AnyRef](futures: java.lang.Iterable[Future[T]], timeout: Long): Future[T] =
+ firstCompletedOf(scala.collection.JavaConversions.iterableAsScalaIterable(futures), timeout)
+
+ /**
+ * A non-blocking fold over the specified futures.
+ * The fold is performed on the thread where the last future is completed,
+ * the result will be the first failure of any of the futures, or any failure in the actual fold,
+ * or the result of the fold.
+ * Example:
+ * <pre>
+ * val result = Futures.fold(0)(futures)(_ + _).await.result
+ * </pre>
+ */
+ def fold[T, R](zero: R, timeout: Long = Actor.TIMEOUT)(futures: Iterable[Future[T]])(foldFun: (R, T) => R): Future[R] = {
+ if (futures.isEmpty) {
+ new AlreadyCompletedFuture[R](Right(zero))
+ } else {
+ val result = new DefaultCompletableFuture[R](timeout)
+ val results = new ConcurrentLinkedQueue[T]()
+ val allDone = futures.size
+
+ val aggregate: Future[T] => Unit = f => if (!result.isCompleted) { //TODO: This is an optimization, is it premature?
+ f.value.get match {
+ case r: Right[Throwable, T] =>
+ results add r.b
+ if (results.size == allDone) { //Only one thread can get here
+ try {
+ result completeWithResult scala.collection.JavaConversions.collectionAsScalaIterable(results).foldLeft(zero)(foldFun)
+ } catch {
+ case e: Exception =>
+ EventHandler.error(e, this, e.getMessage)
+ result completeWithException e
+ }
+ finally {
+ results.clear
+ }
+ }
+ case l: Left[Throwable, T] =>
+ result completeWithException l.a
+ results.clear
+ }
+ }
+
+ futures foreach { _ onComplete aggregate }
+ result
+ }
+ }
+
+ /**
+ * Java API
+ * A non-blocking fold over the specified futures.
+ * The fold is performed on the thread where the last future is completed,
+ * the result will be the first failure of any of the futures, or any failure in the actual fold,
+ * or the result of the fold.
+ */
+ def fold[T <: AnyRef, R <: AnyRef](zero: R, timeout: Long, futures: java.lang.Iterable[Future[T]], fun: akka.japi.Function2[R, T, R]): Future[R] =
+ fold(zero, timeout)(scala.collection.JavaConversions.iterableAsScalaIterable(futures))(fun.apply _)
+
+ /**
+ * Initiates a fold over the supplied futures where the fold-zero is the result value of the Future that's completed first
+ * Example:
+ * <pre>
+ * val result = Futures.reduce(futures)(_ + _).await.result
+ * </pre>
+ */
+ def reduce[T, R >: T](futures: Iterable[Future[T]], timeout: Long = Actor.TIMEOUT)(op: (R, T) => T): Future[R] = {
+ if (futures.isEmpty)
+ new AlreadyCompletedFuture[R](Left(new UnsupportedOperationException("empty reduce left")))
+ else {
+ val result = new DefaultCompletableFuture[R](timeout)
+ val seedFound = new AtomicBoolean(false)
+ val seedFold: Future[T] => Unit = f => {
+ if (seedFound.compareAndSet(false, true)) { //Only the first completed should trigger the fold
+ f.value.get match {
+ case r: Right[Throwable, T] =>
+ result.completeWith(fold(r.b, timeout)(futures.filterNot(_ eq f))(op))
+ case l: Left[Throwable, T] =>
+ result.completeWithException(l.a)
+ }
+ }
+ }
+ for (f ← futures) f onComplete seedFold //Attach the listener to the Futures
+ result
+ }
+ }
+
+ /**
+ * Java API.
+ * Initiates a fold over the supplied futures where the fold-zero is the result value of the Future that's completed first
+ */
+ def reduce[T <: AnyRef, R >: T](futures: java.lang.Iterable[Future[T]], timeout: Long, fun: akka.japi.Function2[R, T, T]): Future[R] =
+ reduce(scala.collection.JavaConversions.iterableAsScalaIterable(futures), timeout)(fun.apply _)
+
+ /**
+ * Java API.
+ * Simple version of Futures.traverse. Transforms a java.lang.Iterable[Future[A]] into a Future[java.util.LinkedList[A]].
+ * Useful for reducing many Futures into a single Future.
+ */
+ def sequence[A](in: JIterable[Future[A]], timeout: Long): Future[JLinkedList[A]] =
+ scala.collection.JavaConversions.iterableAsScalaIterable(in).foldLeft(Future(new JLinkedList[A]()))((fr, fa) =>
+ for (r ← fr; a ← fa) yield {
+ r add a
+ r
+ })
+
+ /**
+ * Java API.
+ * Simple version of Futures.traverse. Transforms a java.lang.Iterable[Future[A]] into a Future[java.util.LinkedList[A]].
+ * Useful for reducing many Futures into a single Future.
+ */
+ def sequence[A](in: JIterable[Future[A]]): Future[JLinkedList[A]] = sequence(in, Actor.TIMEOUT)
+
+ /**
+ * Java API.
+ * Transforms a java.lang.Iterable[A] into a Future[java.util.LinkedList[B]] using the provided Function A => Future[B].
+ * This is useful for performing a parallel map. For example, to apply a function to all items of a list
+ * in parallel.
+ */
+ def traverse[A, B](in: JIterable[A], timeout: Long, fn: JFunc[A, Future[B]]): Future[JLinkedList[B]] =
+ scala.collection.JavaConversions.iterableAsScalaIterable(in).foldLeft(Future(new JLinkedList[B]())) { (fr, a) =>
+ val fb = fn(a)
+ for (r ← fr; b ← fb) yield {
+ r add b
+ r
+ }
+ }
+
+ /**
+ * Java API.
+ * Transforms a java.lang.Iterable[A] into a Future[java.util.LinkedList[B]] using the provided Function A => Future[B].
+ * This is useful for performing a parallel map. For example, to apply a function to all items of a list
+ * in parallel.
+ */
+ def traverse[A, B](in: JIterable[A], fn: JFunc[A, Future[B]]): Future[JLinkedList[B]] = traverse(in, Actor.TIMEOUT, fn)
+
+ // =====================================
+ // Deprecations
+ // =====================================
+
+ /**
+ * (Blocking!)
+ */
+ @deprecated("Will be removed after 1.1, if you must block, use: futures.foreach(_.await)", "1.1")
+ def awaitAll(futures: List[Future[_]]): Unit = futures.foreach(_.await)
+
+ /**
+ * Returns the First Future that is completed (blocking!)
+ */
+ @deprecated("Will be removed after 1.1, if you must block, use: firstCompletedOf(futures).await", "1.1")
+ def awaitOne(futures: List[Future[_]], timeout: Long = Long.MaxValue): Future[_] = firstCompletedOf[Any](futures, timeout).await
+
+ /**
+ * Applies the supplied function to the specified collection of Futures after awaiting each future to be completed
+ */
+ @deprecated("Will be removed after 1.1, if you must block, use: futures map { f => fun(f.await) }", "1.1")
+ def awaitMap[A, B](in: Traversable[Future[A]])(fun: (Future[A]) => B): Traversable[B] =
+ in map { f => fun(f.await) }
+
+ /**
+ * Returns Future.resultOrException of the first completed of the 2 Futures provided (blocking!)
+ */
+ @deprecated("Will be removed after 1.1, if you must block, use: firstCompletedOf(List(f1,f2)).await.resultOrException", "1.1")
+ def awaitEither[T](f1: Future[T], f2: Future[T]): Option[T] = firstCompletedOf[T](List(f1, f2)).await.resultOrException
+}
+
+object Future {
+ /**
+ * This method constructs and returns a Future that will eventually hold the result of the execution of the supplied body
+ * The execution is performed by the specified Dispatcher.
+ */
+ def apply[T](body: => T, timeout: Long = Actor.TIMEOUT)(implicit dispatcher: MessageDispatcher): Future[T] =
+ dispatcher.dispatchFuture(() => body, timeout)
+
+ /**
+ * Construct a completable channel
+ */
+ def channel(timeout: Long = Actor.TIMEOUT) = new Channel[Any] {
+ val future = empty[Any](timeout)
+ def !(msg: Any) = future completeWithResult msg
+ }
+
+ /**
+ * Create an empty Future with default timeout
+ */
+ def empty[T](timeout: Long = Actor.TIMEOUT) = new DefaultCompletableFuture[T](timeout)
+
+ import scala.collection.mutable.Builder
+ import scala.collection.generic.CanBuildFrom
+
+ /**
+ * Simple version of Futures.traverse. Transforms a Traversable[Future[A]] into a Future[Traversable[A]].
+ * Useful for reducing many Futures into a single Future.
+ */
+ def sequence[A, M[_] <: Traversable[_]](in: M[Future[A]], timeout: Long = Actor.TIMEOUT)(implicit cbf: CanBuildFrom[M[Future[A]], A, M[A]]): Future[M[A]] =
+ in.foldLeft(new DefaultCompletableFuture[Builder[A, M[A]]](timeout).completeWithResult(cbf(in)): Future[Builder[A, M[A]]])((fr, fa) => for (r ← fr; a ← fa.asInstanceOf[Future[A]]) yield (r += a)).map(_.result)
+
+ /**
+ * Transforms a Traversable[A] into a Future[Traversable[B]] using the provided Function A => Future[B].
+ * This is useful for performing a parallel map. For example, to apply a function to all items of a list
+ * in parallel:
+ * <pre>
+ * val myFutureList = Futures.traverse(myList)(x => Future(myFunc(x)))
+ * </pre>
+ */
+ def traverse[A, B, M[_] <: Traversable[_]](in: M[A], timeout: Long = Actor.TIMEOUT)(fn: A => Future[B])(implicit cbf: CanBuildFrom[M[A], B, M[B]]): Future[M[B]] =
+ in.foldLeft(new DefaultCompletableFuture[Builder[B, M[B]]](timeout).completeWithResult(cbf(in)): Future[Builder[B, M[B]]]) { (fr, a) =>
+ val fb = fn(a.asInstanceOf[A])
+ for (r ← fr; b ← fb) yield (r += b)
+ }.map(_.result)
+
+ /**
+ * Captures a block that will be transformed into 'Continuation Passing Style' using Scala's Delimited
+ * Continuations plugin.
+ *
+ * Within the block, the result of a Future may be accessed by calling Future.apply. At that point
+ * execution is suspended with the rest of the block being stored in a continuation until the result
+ * of the Future is available. If an Exception is thrown while processing, it will be contained
+ * within the resulting Future.
+ *
+ * This allows working with Futures in an imperative style without blocking for each result.
+ *
+ * Completing a Future using 'CompletableFuture << Future' will also suspend execution until the
+ * value of the other Future is available.
+ *
+ * The Delimited Continuations compiler plugin must be enabled in order to use this method.
+ */
+ def flow[A](body: => A @cps[Future[Any]], timeout: Long = Actor.TIMEOUT): Future[A] = {
+ val future = Promise[A](timeout)
+ (reset(future.asInstanceOf[CompletableFuture[Any]].completeWithResult(body)): Future[Any]) onComplete { f =>
+ val opte = f.exception
+ if (opte.isDefined) future completeWithException (opte.get)
+ }
+ future
+ }
+
+ private[akka] val callbacksPendingExecution = new ThreadLocal[Option[Stack[() => Unit]]]() {
+ override def initialValue = None
+ }
+}
+
+sealed trait Future[+T] {
+
+ /**
+ * For use only within a Future.flow block or another compatible Delimited Continuations reset block.
+ *
+ * Returns the result of this Future without blocking, by suspending execution and storing it as a
+ * continuation until the result is available.
+ *
+ * If this Future is untyped (a Future[Nothing]), a type parameter must be explicitly provided or
+ * execution will fail. The normal result of getting a Future from an ActorRef using !!! will return
+ * an untyped Future.
+ */
+ def apply[A >: T](): A @cps[Future[Any]] = shift(this flatMap (_: A => Future[Any]))
+
+ /**
+ * Blocks awaiting completion of this Future, then returns the resulting value,
+ * or throws the completed exception
+ *
+ * Scala & Java API
+ *
+ * throws FutureTimeoutException if this Future times out when waiting for completion
+ */
+ def get: T = this.await.resultOrException.get
+
+ /**
+ * Blocks the current thread until the Future has been completed or the
+ * timeout has expired. In the case of the timeout expiring a
+ * FutureTimeoutException will be thrown.
+ */
+ def await: Future[T]
+
+ /**
+ * Blocks the current thread until the Future has been completed or the
+ * timeout has expired. The timeout will be the least value of 'atMost' and the timeout
+ * supplied at the constructuion of this Future.
+ * In the case of the timeout expiring a FutureTimeoutException will be thrown.
+ */
+ def await(atMost: Duration): Future[T]
+
+ /**
+ * Blocks the current thread until the Future has been completed. Use
+ * caution with this method as it ignores the timeout and will block
+ * indefinitely if the Future is never completed.
+ */
+ @deprecated("Will be removed after 1.1, it's dangerous and can cause deadlocks, agony and insanity.", "1.1")
+ def awaitBlocking: Future[T]
+
+ /**
+ * Tests whether this Future has been completed.
+ */
+ final def isCompleted: Boolean = value.isDefined
+
+ /**
+ * Tests whether this Future's timeout has expired.
+ *
+ * Note that an expired Future may still contain a value, or it may be
+ * completed with a value.
+ */
+ def isExpired: Boolean
+
+ /**
+ * This Future's timeout in nanoseconds.
+ */
+ def timeoutInNanos: Long
+
+ /**
+ * The contained value of this Future. Before this Future is completed
+ * the value will be None. After completion the value will be Some(Right(t))
+ * if it contains a valid result, or Some(Left(error)) if it contains
+ * an exception.
+ */
+ def value: Option[Either[Throwable, T]]
+
+ /**
+ * Returns the successful result of this Future if it exists.
+ */
+ final def result: Option[T] = {
+ val v = value
+ if (v.isDefined) v.get.right.toOption
+ else None
+ }
+
+ /**
+ * Returns the contained exception of this Future if it exists.
+ */
+ final def exception: Option[Throwable] = {
+ val v = value
+ if (v.isDefined) v.get.left.toOption
+ else None
+ }
+
+ /**
+ * When this Future is completed, apply the provided function to the
+ * Future. If the Future has already been completed, this will apply
+ * immediately.
+ */
+ def onComplete(func: Future[T] => Unit): Future[T]
+
+ /**
+ * When the future is completed with a valid result, apply the provided
+ * PartialFunction to the result.
+ * <pre>
+ * val result = future receive {
+ * case Foo => "foo"
+ * case Bar => "bar"
+ * }.await.result
+ * </pre>
+ */
+ final def receive(pf: PartialFunction[Any, Unit]): Future[T] = onComplete { f =>
+ val optr = f.result
+ if (optr.isDefined) {
+ val r = optr.get
+ if (pf.isDefinedAt(r)) pf(r)
+ }
+ }
+
+ /**
+ * Creates a new Future by applying a PartialFunction to the successful
+ * result of this Future if a match is found, or else return a MatchError.
+ * If this Future is completed with an exception then the new Future will
+ * also contain this exception.
+ * Example:
+ * <pre>
+ * val future1 = for {
+ * a <- actor !!! Req("Hello") collect { case Res(x: Int) => x }
+ * b <- actor !!! Req(a) collect { case Res(x: String) => x }
+ * c <- actor !!! Req(7) collect { case Res(x: String) => x }
+ * } yield b + "-" + c
+ * </pre>
+ */
+ final def collect[A](pf: PartialFunction[Any, A]): Future[A] = {
+ val fa = new DefaultCompletableFuture[A](timeoutInNanos, NANOS)
+ onComplete { ft =>
+ val v = ft.value.get
+ fa complete {
+ if (v.isLeft) v.asInstanceOf[Either[Throwable, A]]
+ else {
+ try {
+ val r = v.right.get
+ if (pf isDefinedAt r) Right(pf(r))
+ else Left(new MatchError(r))
+ } catch {
+ case e: Exception =>
+ EventHandler.error(e, this, e.getMessage)
+ Left(e)
+ }
+ }
+ }
+ }
+ fa
+ }
+
+ /**
+ * Creates a new Future that will handle any matching Throwable that this
+ * Future might contain. If there is no match, or if this Future contains
+ * a valid result then the new Future will contain the same.
+ * Example:
+ * <pre>
+ * Future(6 / 0) failure { case e: ArithmeticException => 0 } // result: 0
+ * Future(6 / 0) failure { case e: NotFoundException => 0 } // result: exception
+ * Future(6 / 2) failure { case e: ArithmeticException => 0 } // result: 3
+ * </pre>
+ */
+ final def failure[A >: T](pf: PartialFunction[Throwable, A]): Future[A] = {
+ val fa = new DefaultCompletableFuture[A](timeoutInNanos, NANOS)
+ onComplete { ft =>
+ val opte = ft.exception
+ fa complete {
+ if (opte.isDefined) {
+ val e = opte.get
+ try {
+ if (pf isDefinedAt e) Right(pf(e))
+ else Left(e)
+ } catch {
+ case x: Exception => Left(x)
+ }
+ } else ft.value.get
+ }
+ }
+ fa
+ }
+
+ /**
+ * Creates a new Future by applying a function to the successful result of
+ * this Future. If this Future is completed with an exception then the new
+ * Future will also contain this exception.
+ * Example:
+ * <pre>
+ * val future1 = for {
+ * a: Int <- actor !!! "Hello" // returns 5
+ * b: String <- actor !!! a // returns "10"
+ * c: String <- actor !!! 7 // returns "14"
+ * } yield b + "-" + c
+ * </pre>
+ */
+ final def map[A](f: T => A): Future[A] = {
+ val fa = new DefaultCompletableFuture[A](timeoutInNanos, NANOS)
+ onComplete { ft =>
+ val optv = ft.value
+ if (optv.isDefined) {
+ val v = optv.get
+ if (v.isLeft)
+ fa complete v.asInstanceOf[Either[Throwable, A]]
+ else {
+ fa complete (try {
+ Right(f(v.right.get))
+ } catch {
+ case e: Exception =>
+ EventHandler.error(e, this, e.getMessage)
+ Left(e)
+ })
+ }
+ }
+ }
+ fa
+ }
+
+ /**
+ * Creates a new Future by applying a function to the successful result of
+ * this Future, and returns the result of the function as the new Future.
+ * If this Future is completed with an exception then the new Future will
+ * also contain this exception.
+ * Example:
+ * <pre>
+ * val future1 = for {
+ * a: Int <- actor !!! "Hello" // returns 5
+ * b: String <- actor !!! a // returns "10"
+ * c: String <- actor !!! 7 // returns "14"
+ * } yield b + "-" + c
+ * </pre>
+ */
+ final def flatMap[A](f: T => Future[A]): Future[A] = {
+ val fa = new DefaultCompletableFuture[A](timeoutInNanos, NANOS)
+ onComplete { ft =>
+ val optv = ft.value
+ if (optv.isDefined) {
+ val v = optv.get
+ if (v.isLeft)
+ fa complete v.asInstanceOf[Either[Throwable, A]]
+ else {
+ try {
+ fa.completeWith(f(v.right.get))
+ } catch {
+ case e: Exception =>
+ EventHandler.error(e, this, e.getMessage)
+ fa completeWithException e
+ }
+ }
+ }
+ }
+ fa
+ }
+
+ final def foreach(f: T => Unit): Unit = onComplete { ft =>
+ val optr = ft.result
+ if (optr.isDefined)
+ f(optr.get)
+ }
+
+ final def filter(p: Any => Boolean): Future[Any] = {
+ val f = new DefaultCompletableFuture[T](timeoutInNanos, NANOS)
+ onComplete { ft =>
+ val optv = ft.value
+ if (optv.isDefined) {
+ val v = optv.get
+ if (v.isLeft)
+ f complete v
+ else {
+ val r = v.right.get
+ f complete (try {
+ if (p(r)) Right(r)
+ else Left(new MatchError(r))
+ } catch {
+ case e: Exception =>
+ EventHandler.error(e, this, e.getMessage)
+ Left(e)
+ })
+ }
+ }
+ }
+ f
+ }
+
+ /**
+ * Returns the current result, throws the exception is one has been raised, else returns None
+ */
+ final def resultOrException: Option[T] = {
+ val v = value
+ if (v.isDefined) {
+ val r = v.get
+ if (r.isLeft) throw r.left.get
+ else r.right.toOption
+ } else None
+ }
+
+ /* Java API */
+ final def onComplete[A >: T](proc: Procedure[Future[A]]): Future[T] = onComplete(proc(_))
+
+ final def map[A >: T, B](f: JFunc[A, B]): Future[B] = map(f(_))
+
+ final def flatMap[A >: T, B](f: JFunc[A, Future[B]]): Future[B] = flatMap(f(_))
+
+ final def foreach[A >: T](proc: Procedure[A]): Unit = foreach(proc(_))
+
+ final def filter(p: JFunc[Any, Boolean]): Future[Any] = filter(p(_))
+
+}
+
+object Promise {
+
+ def apply[A](timeout: Long): CompletableFuture[A] = new DefaultCompletableFuture[A](timeout)
+
+ def apply[A](): CompletableFuture[A] = apply(Actor.TIMEOUT)
+
+}
+
+/**
+ * Essentially this is the Promise (or write-side) of a Future (read-side).
+ */
+trait CompletableFuture[T] extends Future[T] {
+ /**
+ * Completes this Future with the specified result, if not already completed.
+ * @return this
+ */
+ def complete(value: Either[Throwable, T]): Future[T]
+
+ /**
+ * Completes this Future with the specified result, if not already completed.
+ * @return this
+ */
+ final def completeWithResult(result: T): Future[T] = complete(Right(result))
+
+ /**
+ * Completes this Future with the specified exception, if not already completed.
+ * @return this
+ */
+ final def completeWithException(exception: Throwable): Future[T] = complete(Left(exception))
+
+ /**
+ * Completes this Future with the specified other Future, when that Future is completed,
+ * unless this Future has already been completed.
+ * @return this.
+ */
+ final def completeWith(other: Future[T]): Future[T] = {
+ other onComplete { f => complete(f.value.get) }
+ this
+ }
+
+ final def <<(value: T): Future[T] @cps[Future[Any]] = shift { cont: (Future[T] => Future[Any]) => cont(complete(Right(value))) }
+
+ final def <<(other: Future[T]): Future[T] @cps[Future[Any]] = shift { cont: (Future[T] => Future[Any]) =>
+ val fr = new DefaultCompletableFuture[Any](Actor.TIMEOUT)
+ this completeWith other onComplete { f =>
+ try {
+ fr completeWith cont(f)
+ } catch {
+ case e: Exception =>
+ EventHandler.error(e, this, e.getMessage)
+ fr completeWithException e
+ }
+ }
+ fr
+ }
+
+}
+
+/**
+ * The default concrete Future implementation.
+ */
+class DefaultCompletableFuture[T](timeout: Long, timeunit: TimeUnit) extends CompletableFuture[T] {
+
+ def this() = this(0, MILLIS)
+
+ def this(timeout: Long) = this(timeout, MILLIS)
+
+ val timeoutInNanos = timeunit.toNanos(timeout)
+ private val _startTimeInNanos = currentTimeInNanos
+ private val _lock = new ReentrantLock
+ private val _signal = _lock.newCondition
+ private var _value: Option[Either[Throwable, T]] = None
+ private var _listeners: List[Future[T] => Unit] = Nil
+
+ /**
+ * Must be called inside _lock.lock<->_lock.unlock
+ */
+ @tailrec
+ private def awaitUnsafe(waitTimeNanos: Long): Boolean = {
+ if (_value.isEmpty && waitTimeNanos > 0) {
+ val start = currentTimeInNanos
+ val remainingNanos = try {
+ _signal.awaitNanos(waitTimeNanos)
+ } catch {
+ case e: InterruptedException =>
+ waitTimeNanos - (currentTimeInNanos - start)
+ }
+ awaitUnsafe(remainingNanos)
+ } else {
+ _value.isDefined
+ }
+ }
+
+ def await(atMost: Duration) = {
+ _lock.lock
+ if (try { awaitUnsafe(atMost.toNanos min timeLeft()) } finally { _lock.unlock }) this
+ else throw new FutureTimeoutException("Futures timed out after [" + NANOS.toMillis(timeoutInNanos) + "] milliseconds")
+ }
+
+ def await = {
+ _lock.lock
+ if (try { awaitUnsafe(timeLeft()) } finally { _lock.unlock }) this
+ else throw new FutureTimeoutException("Futures timed out after [" + NANOS.toMillis(timeoutInNanos) + "] milliseconds")
+ }
+
+ def awaitBlocking = {
+ _lock.lock
+ try {
+ while (_value.isEmpty) {
+ _signal.await
+ }
+ this
+ } finally {
+ _lock.unlock
+ }
+ }
+
+ def isExpired: Boolean = timeLeft() <= 0
+
+ def value: Option[Either[Throwable, T]] = {
+ _lock.lock
+ try {
+ _value
+ } finally {
+ _lock.unlock
+ }
+ }
+
+ def complete(value: Either[Throwable, T]): DefaultCompletableFuture[T] = {
+ _lock.lock
+ val notifyTheseListeners = try {
+ if (_value.isEmpty && !isExpired) { //Only complete if we aren't expired
+ _value = Some(value)
+ val existingListeners = _listeners
+ _listeners = Nil
+ existingListeners
+ } else Nil
+ } finally {
+ _signal.signalAll
+ _lock.unlock
+ }
+
+ if (notifyTheseListeners.nonEmpty) { // Steps to ensure we don't run into a stack-overflow situation
+ @tailrec
+ def runCallbacks(rest: List[Future[T] => Unit], callbacks: Stack[() => Unit]) {
+ if (rest.nonEmpty) {
+ notifyCompleted(rest.head)
+ while (callbacks.nonEmpty) { callbacks.pop().apply() }
+ runCallbacks(rest.tail, callbacks)
+ }
+ }
+
+ val pending = Future.callbacksPendingExecution.get
+ if (pending.isDefined) { //Instead of nesting the calls to the callbacks (leading to stack overflow)
+ pending.get.push(() => { // Linearize/aggregate callbacks at top level and then execute
+ val doNotify = notifyCompleted _ //Hoist closure to avoid garbage
+ notifyTheseListeners foreach doNotify
+ })
+ } else {
+ try {
+ val callbacks = Stack[() => Unit]() // Allocate new aggregator for pending callbacks
+ Future.callbacksPendingExecution.set(Some(callbacks)) // Specify the callback aggregator
+ runCallbacks(notifyTheseListeners, callbacks) // Execute callbacks, if they trigger new callbacks, they are aggregated
+ } finally { Future.callbacksPendingExecution.set(None) } // Ensure cleanup
+ }
+ }
+
+ this
+ }
+
+ def onComplete(func: Future[T] => Unit): CompletableFuture[T] = {
+ _lock.lock
+ val notifyNow = try {
+ if (_value.isEmpty) {
+ if (!isExpired) { //Only add the listener if the future isn't expired
+ _listeners ::= func
+ false
+ } else false //Will never run the callback since the future is expired
+ } else true
+ } finally {
+ _lock.unlock
+ }
+
+ if (notifyNow) notifyCompleted(func)
+
+ this
+ }
+
+ private def notifyCompleted(func: Future[T] => Unit) {
+ try {
+ func(this)
+ } catch {
+ case e => EventHandler notify EventHandler.Error(e, this)
+ }
+ }
+
+ @inline
+ private def currentTimeInNanos: Long = MILLIS.toNanos(System.currentTimeMillis)
+ @inline
+ private def timeLeft(): Long = timeoutInNanos - (currentTimeInNanos - _startTimeInNanos)
+}
+
+/**
+ * An already completed Future is seeded with it's result at creation, is useful for when you are participating in
+ * a Future-composition but you already have a value to contribute.
+ */
+sealed class AlreadyCompletedFuture[T](suppliedValue: Either[Throwable, T]) extends CompletableFuture[T] {
+ val value = Some(suppliedValue)
+
+ def complete(value: Either[Throwable, T]): CompletableFuture[T] = this
+ def onComplete(func: Future[T] => Unit): Future[T] = { func(this); this }
+ def await(atMost: Duration): Future[T] = this
+ def await: Future[T] = this
+ def awaitBlocking: Future[T] = this
+ def isExpired: Boolean = true
+ def timeoutInNanos: Long = 0
+}
diff --git a/test/disabled/presentation/akka/src/akka/dispatch/MailboxHandling.scala b/test/disabled/presentation/akka/src/akka/dispatch/MailboxHandling.scala
new file mode 100644
index 0000000000..4c00577157
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/dispatch/MailboxHandling.scala
@@ -0,0 +1,68 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka.dispatch
+
+import akka.AkkaException
+
+import java.util.{ Comparator, PriorityQueue }
+import java.util.concurrent._
+import akka.util._
+
+class MessageQueueAppendFailedException(message: String, cause: Throwable = null) extends AkkaException(message, cause)
+
+/**
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+trait MessageQueue {
+ val dispatcherLock = new SimpleLock
+ val suspended = new SimpleLock
+ def enqueue(handle: MessageInvocation)
+ def dequeue(): MessageInvocation
+ def size: Int
+ def isEmpty: Boolean
+}
+
+/**
+ * Mailbox configuration.
+ */
+sealed trait MailboxType
+
+case class UnboundedMailbox() extends MailboxType
+case class BoundedMailbox(
+ val capacity: Int = { if (Dispatchers.MAILBOX_CAPACITY < 0) Int.MaxValue else Dispatchers.MAILBOX_CAPACITY },
+ val pushTimeOut: Duration = Dispatchers.MAILBOX_PUSH_TIME_OUT) extends MailboxType {
+ if (capacity < 0) throw new IllegalArgumentException("The capacity for BoundedMailbox can not be negative")
+ if (pushTimeOut eq null) throw new IllegalArgumentException("The push time-out for BoundedMailbox can not be null")
+}
+
+trait UnboundedMessageQueueSemantics extends MessageQueue { self: BlockingQueue[MessageInvocation] =>
+ @inline
+ final def enqueue(handle: MessageInvocation): Unit = this add handle
+ @inline
+ final def dequeue(): MessageInvocation = this.poll()
+}
+
+trait BoundedMessageQueueSemantics extends MessageQueue { self: BlockingQueue[MessageInvocation] =>
+ def pushTimeOut: Duration
+
+ final def enqueue(handle: MessageInvocation) {
+ if (pushTimeOut.length > 0) {
+ this.offer(handle, pushTimeOut.length, pushTimeOut.unit) || {
+ throw new MessageQueueAppendFailedException("Couldn't enqueue message " + handle + " to " + toString)
+ }
+ } else this put handle
+ }
+
+ @inline
+ final def dequeue(): MessageInvocation = this.poll()
+}
+
+class DefaultUnboundedMessageQueue extends LinkedBlockingQueue[MessageInvocation] with UnboundedMessageQueueSemantics
+
+class DefaultBoundedMessageQueue(capacity: Int, val pushTimeOut: Duration) extends LinkedBlockingQueue[MessageInvocation](capacity) with BoundedMessageQueueSemantics
+
+class UnboundedPriorityMessageQueue(cmp: Comparator[MessageInvocation]) extends PriorityBlockingQueue[MessageInvocation](11, cmp) with UnboundedMessageQueueSemantics
+
+class BoundedPriorityMessageQueue(capacity: Int, val pushTimeOut: Duration, cmp: Comparator[MessageInvocation]) extends BoundedBlockingQueue[MessageInvocation](capacity, new PriorityQueue[MessageInvocation](11, cmp)) with BoundedMessageQueueSemantics
diff --git a/test/disabled/presentation/akka/src/akka/dispatch/MessageHandling.scala b/test/disabled/presentation/akka/src/akka/dispatch/MessageHandling.scala
new file mode 100644
index 0000000000..20887c3867
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/dispatch/MessageHandling.scala
@@ -0,0 +1,260 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka.dispatch
+
+import java.util.concurrent._
+import java.util.concurrent.atomic.AtomicLong
+import akka.event.EventHandler
+import akka.config.Configuration
+import akka.config.Config.TIME_UNIT
+import akka.util.{ Duration, Switch, ReentrantGuard }
+import java.util.concurrent.ThreadPoolExecutor.{ AbortPolicy, CallerRunsPolicy, DiscardOldestPolicy, DiscardPolicy }
+import akka.actor._
+
+/**
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+final case class MessageInvocation(val receiver: ActorRef,
+ val message: Any,
+ val sender: Option[ActorRef],
+ val senderFuture: Option[CompletableFuture[Any]]) {
+ if (receiver eq null) throw new IllegalArgumentException("Receiver can't be null")
+
+ def invoke = try {
+ receiver.invoke(this)
+ } catch {
+ case e: NullPointerException => throw new ActorInitializationException(
+ "Don't call 'self ! message' in the Actor's constructor (in Scala this means in the body of the class).")
+ }
+}
+
+final case class FutureInvocation[T](future: CompletableFuture[T], function: () => T, cleanup: () => Unit) extends Runnable {
+ def run = {
+ future complete (try {
+ Right(function())
+ } catch {
+ case e =>
+ EventHandler.error(e, this, e.getMessage)
+ Left(e)
+ }
+ finally {
+ cleanup()
+ })
+ }
+}
+
+object MessageDispatcher {
+ val UNSCHEDULED = 0
+ val SCHEDULED = 1
+ val RESCHEDULED = 2
+
+ implicit def defaultGlobalDispatcher = Dispatchers.defaultGlobalDispatcher
+}
+
+/**
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+trait MessageDispatcher {
+ import MessageDispatcher._
+
+ protected val uuids = new ConcurrentSkipListSet[Uuid]
+ protected val futures = new AtomicLong(0L)
+ protected val guard = new ReentrantGuard
+ protected val active = new Switch(false)
+
+ private var shutdownSchedule = UNSCHEDULED //This can be non-volatile since it is protected by guard withGuard
+
+ /**
+ * Creates and returns a mailbox for the given actor.
+ */
+ private[akka] def createMailbox(actorRef: ActorRef): AnyRef
+
+ /**
+ * Attaches the specified actorRef to this dispatcher
+ */
+ final def attach(actorRef: ActorRef): Unit = guard withGuard {
+ register(actorRef)
+ }
+
+ /**
+ * Detaches the specified actorRef from this dispatcher
+ */
+ final def detach(actorRef: ActorRef): Unit = guard withGuard {
+ unregister(actorRef)
+ }
+
+ private[akka] final def dispatchMessage(invocation: MessageInvocation): Unit = dispatch(invocation)
+
+ private[akka] final def dispatchFuture[T](block: () => T, timeout: Long): Future[T] = {
+ futures.getAndIncrement()
+ try {
+ val future = new DefaultCompletableFuture[T](timeout)
+
+ if (active.isOff)
+ guard withGuard { active.switchOn { start } }
+
+ executeFuture(FutureInvocation[T](future, block, futureCleanup))
+ future
+ } catch {
+ case e =>
+ futures.decrementAndGet
+ throw e
+ }
+ }
+
+ private val futureCleanup: () => Unit =
+ () => if (futures.decrementAndGet() == 0) {
+ guard withGuard {
+ if (futures.get == 0 && uuids.isEmpty) {
+ shutdownSchedule match {
+ case UNSCHEDULED =>
+ shutdownSchedule = SCHEDULED
+ Scheduler.scheduleOnce(shutdownAction, timeoutMs, TimeUnit.MILLISECONDS)
+ case SCHEDULED =>
+ shutdownSchedule = RESCHEDULED
+ case RESCHEDULED => //Already marked for reschedule
+ }
+ }
+ }
+ }
+
+ private[akka] def register(actorRef: ActorRef) {
+ if (actorRef.mailbox eq null)
+ actorRef.mailbox = createMailbox(actorRef)
+
+ uuids add actorRef.uuid
+ if (active.isOff) {
+ active.switchOn {
+ start
+ }
+ }
+ }
+
+ private[akka] def unregister(actorRef: ActorRef) = {
+ if (uuids remove actorRef.uuid) {
+ actorRef.mailbox = null
+ if (uuids.isEmpty && futures.get == 0) {
+ shutdownSchedule match {
+ case UNSCHEDULED =>
+ shutdownSchedule = SCHEDULED
+ Scheduler.scheduleOnce(shutdownAction, timeoutMs, TimeUnit.MILLISECONDS)
+ case SCHEDULED =>
+ shutdownSchedule = RESCHEDULED
+ case RESCHEDULED => //Already marked for reschedule
+ }
+ }
+ }
+ }
+
+ /**
+ * Traverses the list of actors (uuids) currently being attached to this dispatcher and stops those actors
+ */
+ def stopAllAttachedActors {
+ val i = uuids.iterator
+ while (i.hasNext()) {
+ val uuid = i.next()
+ Actor.registry.actorFor(uuid) match {
+ case Some(actor) => actor.stop()
+ case None => {}
+ }
+ }
+ }
+
+ private val shutdownAction = new Runnable {
+ def run = guard withGuard {
+ shutdownSchedule match {
+ case RESCHEDULED =>
+ shutdownSchedule = SCHEDULED
+ Scheduler.scheduleOnce(this, timeoutMs, TimeUnit.MILLISECONDS)
+ case SCHEDULED =>
+ if (uuids.isEmpty && futures.get == 0) {
+ active switchOff {
+ shutdown // shut down in the dispatcher's references is zero
+ }
+ }
+ shutdownSchedule = UNSCHEDULED
+ case UNSCHEDULED => //Do nothing
+ }
+ }
+ }
+
+ /**
+ * When the dispatcher no longer has any actors registered, how long will it wait until it shuts itself down, in Ms
+ * defaulting to your akka configs "akka.actor.dispatcher-shutdown-timeout" or otherwise, 1 Second
+ */
+ private[akka] def timeoutMs: Long = Dispatchers.DEFAULT_SHUTDOWN_TIMEOUT.toMillis
+
+ /**
+ * After the call to this method, the dispatcher mustn't begin any new message processing for the specified reference
+ */
+ def suspend(actorRef: ActorRef): Unit
+
+ /*
+ * After the call to this method, the dispatcher must begin any new message processing for the specified reference
+ */
+ def resume(actorRef: ActorRef): Unit
+
+ /**
+ * Will be called when the dispatcher is to queue an invocation for execution
+ */
+ private[akka] def dispatch(invocation: MessageInvocation): Unit
+
+ private[akka] def executeFuture(invocation: FutureInvocation[_]): Unit
+
+ /**
+ * Called one time every time an actor is attached to this dispatcher and this dispatcher was previously shutdown
+ */
+ private[akka] def start(): Unit
+
+ /**
+ * Called one time every time an actor is detached from this dispatcher and this dispatcher has no actors left attached
+ */
+ private[akka] def shutdown(): Unit
+
+ /**
+ * Returns the size of the mailbox for the specified actor
+ */
+ def mailboxSize(actorRef: ActorRef): Int
+
+ /**
+ * Returns the amount of futures queued for execution
+ */
+ def pendingFutures: Long = futures.get
+}
+
+/**
+ * Trait to be used for hooking in new dispatchers into Dispatchers.fromConfig
+ */
+abstract class MessageDispatcherConfigurator {
+ /**
+ * Returns an instance of MessageDispatcher given a Configuration
+ */
+ def configure(config: Configuration): MessageDispatcher
+
+ def mailboxType(config: Configuration): MailboxType = {
+ val capacity = config.getInt("mailbox-capacity", Dispatchers.MAILBOX_CAPACITY)
+ if (capacity < 1) UnboundedMailbox()
+ else BoundedMailbox(capacity, Duration(config.getInt("mailbox-push-timeout-time", Dispatchers.MAILBOX_PUSH_TIME_OUT.toMillis.toInt), TIME_UNIT))
+ }
+
+ def configureThreadPool(config: Configuration, createDispatcher: => (ThreadPoolConfig) => MessageDispatcher): ThreadPoolConfigDispatcherBuilder = {
+ import ThreadPoolConfigDispatcherBuilder.conf_?
+
+ //Apply the following options to the config if they are present in the config
+ ThreadPoolConfigDispatcherBuilder(createDispatcher, ThreadPoolConfig()).configure(
+ conf_?(config getInt "keep-alive-time")(time => _.setKeepAliveTime(Duration(time, TIME_UNIT))),
+ conf_?(config getDouble "core-pool-size-factor")(factor => _.setCorePoolSizeFromFactor(factor)),
+ conf_?(config getDouble "max-pool-size-factor")(factor => _.setMaxPoolSizeFromFactor(factor)),
+ conf_?(config getInt "executor-bounds")(bounds => _.setExecutorBounds(bounds)),
+ conf_?(config getBool "allow-core-timeout")(allow => _.setAllowCoreThreadTimeout(allow)),
+ conf_?(config getString "rejection-policy" map {
+ case "abort" => new AbortPolicy()
+ case "caller-runs" => new CallerRunsPolicy()
+ case "discard-oldest" => new DiscardOldestPolicy()
+ case "discard" => new DiscardPolicy()
+ case x => throw new IllegalArgumentException("[%s] is not a valid rejectionPolicy!" format x)
+ })(policy => _.setRejectionPolicy(policy)))
+ }
+}
diff --git a/test/disabled/presentation/akka/src/akka/dispatch/ThreadBasedDispatcher.scala b/test/disabled/presentation/akka/src/akka/dispatch/ThreadBasedDispatcher.scala
new file mode 100644
index 0000000000..3169c70ef9
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/dispatch/ThreadBasedDispatcher.scala
@@ -0,0 +1,52 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka.dispatch
+
+import akka.actor.{ Actor, ActorRef }
+import akka.config.Config.config
+import akka.util.Duration
+
+import java.util.Queue
+import java.util.concurrent.{ ConcurrentLinkedQueue, BlockingQueue, TimeUnit, LinkedBlockingQueue }
+import akka.actor
+import java.util.concurrent.atomic.AtomicReference
+
+/**
+ * Dedicates a unique thread for each actor passed in as reference. Served through its messageQueue.
+ *
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+class ThreadBasedDispatcher(_actor: ActorRef, _mailboxType: MailboxType)
+ extends ExecutorBasedEventDrivenDispatcher(
+ _actor.uuid.toString, Dispatchers.THROUGHPUT, -1, _mailboxType, ThreadBasedDispatcher.oneThread) {
+
+ private[akka] val owner = new AtomicReference[ActorRef](_actor)
+
+ def this(actor: ActorRef) =
+ this(actor, UnboundedMailbox()) // For Java API
+
+ def this(actor: ActorRef, capacity: Int) =
+ this(actor, BoundedMailbox(capacity)) //For Java API
+
+ def this(actor: ActorRef, capacity: Int, pushTimeOut: Duration) = //For Java API
+ this(actor, BoundedMailbox(capacity, pushTimeOut))
+
+ override def register(actorRef: ActorRef) = {
+ val actor = owner.get()
+ if ((actor ne null) && actorRef != actor) throw new IllegalArgumentException("Cannot register to anyone but " + actor)
+ owner.compareAndSet(null, actorRef) //Register if unregistered
+ super.register(actorRef)
+ }
+
+ override def unregister(actorRef: ActorRef) = {
+ super.unregister(actorRef)
+ owner.compareAndSet(actorRef, null) //Unregister (prevent memory leak)
+ }
+}
+
+object ThreadBasedDispatcher {
+ val oneThread: ThreadPoolConfig = ThreadPoolConfig(allowCorePoolTimeout = true, corePoolSize = 1, maxPoolSize = 1)
+}
+
diff --git a/test/disabled/presentation/akka/src/akka/dispatch/ThreadPoolBuilder.scala b/test/disabled/presentation/akka/src/akka/dispatch/ThreadPoolBuilder.scala
new file mode 100644
index 0000000000..e847610c4c
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/dispatch/ThreadPoolBuilder.scala
@@ -0,0 +1,259 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka.dispatch
+
+import java.util.Collection
+import java.util.concurrent._
+import atomic.{ AtomicLong, AtomicInteger }
+import ThreadPoolExecutor.CallerRunsPolicy
+
+import akka.util.Duration
+import akka.event.EventHandler
+
+object ThreadPoolConfig {
+ type Bounds = Int
+ type FlowHandler = Either[RejectedExecutionHandler, Bounds]
+ type QueueFactory = () => BlockingQueue[Runnable]
+
+ val defaultAllowCoreThreadTimeout: Boolean = false
+ val defaultCorePoolSize: Int = 16
+ val defaultMaxPoolSize: Int = 128
+ val defaultTimeout: Duration = Duration(60000L, TimeUnit.MILLISECONDS)
+ def defaultFlowHandler: FlowHandler = flowHandler(new CallerRunsPolicy)
+
+ def flowHandler(rejectionHandler: RejectedExecutionHandler): FlowHandler = Left(rejectionHandler)
+ def flowHandler(bounds: Int): FlowHandler = Right(bounds)
+
+ def fixedPoolSize(size: Int): Int = size
+ def scaledPoolSize(multiplier: Double): Int =
+ (Runtime.getRuntime.availableProcessors * multiplier).ceil.toInt
+
+ def arrayBlockingQueue(capacity: Int, fair: Boolean): QueueFactory =
+ () => new ArrayBlockingQueue[Runnable](capacity, fair)
+
+ def synchronousQueue(fair: Boolean): QueueFactory =
+ () => new SynchronousQueue[Runnable](fair)
+
+ def linkedBlockingQueue(): QueueFactory =
+ () => new LinkedBlockingQueue[Runnable]()
+
+ def linkedBlockingQueue(capacity: Int): QueueFactory =
+ () => new LinkedBlockingQueue[Runnable](capacity)
+
+ def reusableQueue(queue: BlockingQueue[Runnable]): QueueFactory =
+ () => queue
+
+ def reusableQueue(queueFactory: QueueFactory): QueueFactory = {
+ val queue = queueFactory()
+ () => queue
+ }
+}
+
+case class ThreadPoolConfig(allowCorePoolTimeout: Boolean = ThreadPoolConfig.defaultAllowCoreThreadTimeout,
+ corePoolSize: Int = ThreadPoolConfig.defaultCorePoolSize,
+ maxPoolSize: Int = ThreadPoolConfig.defaultMaxPoolSize,
+ threadTimeout: Duration = ThreadPoolConfig.defaultTimeout,
+ flowHandler: ThreadPoolConfig.FlowHandler = ThreadPoolConfig.defaultFlowHandler,
+ queueFactory: ThreadPoolConfig.QueueFactory = ThreadPoolConfig.linkedBlockingQueue()) {
+
+ final def createLazyExecutorService(threadFactory: ThreadFactory): ExecutorService =
+ new LazyExecutorServiceWrapper(createExecutorService(threadFactory))
+
+ final def createExecutorService(threadFactory: ThreadFactory): ExecutorService = {
+ flowHandler match {
+ case Left(rejectHandler) =>
+ val service = new ThreadPoolExecutor(corePoolSize, maxPoolSize, threadTimeout.length, threadTimeout.unit, queueFactory(), threadFactory, rejectHandler)
+ service.allowCoreThreadTimeOut(allowCorePoolTimeout)
+ service
+ case Right(bounds) =>
+ val service = new ThreadPoolExecutor(corePoolSize, maxPoolSize, threadTimeout.length, threadTimeout.unit, queueFactory(), threadFactory)
+ service.allowCoreThreadTimeOut(allowCorePoolTimeout)
+ new BoundedExecutorDecorator(service, bounds)
+ }
+ }
+}
+
+trait DispatcherBuilder {
+ def build: MessageDispatcher
+}
+
+object ThreadPoolConfigDispatcherBuilder {
+ def conf_?[T](opt: Option[T])(fun: (T) => ThreadPoolConfigDispatcherBuilder => ThreadPoolConfigDispatcherBuilder): Option[(ThreadPoolConfigDispatcherBuilder) => ThreadPoolConfigDispatcherBuilder] = opt map fun
+}
+
+case class ThreadPoolConfigDispatcherBuilder(dispatcherFactory: (ThreadPoolConfig) => MessageDispatcher, config: ThreadPoolConfig) extends DispatcherBuilder {
+ import ThreadPoolConfig._
+ def build = dispatcherFactory(config)
+
+ //TODO remove this, for backwards compat only
+ @deprecated("Use .build instead", "1.1")
+ def buildThreadPool = build
+
+ def withNewBoundedThreadPoolWithLinkedBlockingQueueWithUnboundedCapacity(bounds: Int): ThreadPoolConfigDispatcherBuilder =
+ this.copy(config = config.copy(flowHandler = flowHandler(bounds), queueFactory = linkedBlockingQueue()))
+
+ def withNewThreadPoolWithCustomBlockingQueue(newQueueFactory: QueueFactory): ThreadPoolConfigDispatcherBuilder =
+ this.copy(config = config.copy(flowHandler = defaultFlowHandler, queueFactory = newQueueFactory))
+
+ def withNewThreadPoolWithCustomBlockingQueue(queue: BlockingQueue[Runnable]): ThreadPoolConfigDispatcherBuilder =
+ withNewThreadPoolWithCustomBlockingQueue(reusableQueue(queue))
+
+ def withNewThreadPoolWithLinkedBlockingQueueWithUnboundedCapacity: ThreadPoolConfigDispatcherBuilder =
+ this.copy(config = config.copy(queueFactory = linkedBlockingQueue(), flowHandler = defaultFlowHandler))
+
+ def withNewThreadPoolWithLinkedBlockingQueueWithCapacity(capacity: Int): ThreadPoolConfigDispatcherBuilder =
+ this.copy(config = config.copy(queueFactory = linkedBlockingQueue(capacity), flowHandler = defaultFlowHandler))
+
+ def withNewThreadPoolWithSynchronousQueueWithFairness(fair: Boolean): ThreadPoolConfigDispatcherBuilder =
+ this.copy(config = config.copy(queueFactory = synchronousQueue(fair), flowHandler = defaultFlowHandler))
+
+ def withNewThreadPoolWithArrayBlockingQueueWithCapacityAndFairness(capacity: Int, fair: Boolean): ThreadPoolConfigDispatcherBuilder =
+ this.copy(config = config.copy(queueFactory = arrayBlockingQueue(capacity, fair), flowHandler = defaultFlowHandler))
+
+ def setCorePoolSize(size: Int): ThreadPoolConfigDispatcherBuilder =
+ this.copy(config = config.copy(corePoolSize = size))
+
+ def setMaxPoolSize(size: Int): ThreadPoolConfigDispatcherBuilder =
+ this.copy(config = config.copy(maxPoolSize = size))
+
+ def setCorePoolSizeFromFactor(multiplier: Double): ThreadPoolConfigDispatcherBuilder =
+ setCorePoolSize(scaledPoolSize(multiplier))
+
+ def setMaxPoolSizeFromFactor(multiplier: Double): ThreadPoolConfigDispatcherBuilder =
+ setMaxPoolSize(scaledPoolSize(multiplier))
+
+ def setExecutorBounds(bounds: Int): ThreadPoolConfigDispatcherBuilder =
+ this.copy(config = config.copy(flowHandler = flowHandler(bounds)))
+
+ def setKeepAliveTimeInMillis(time: Long): ThreadPoolConfigDispatcherBuilder =
+ setKeepAliveTime(Duration(time, TimeUnit.MILLISECONDS))
+
+ def setKeepAliveTime(time: Duration): ThreadPoolConfigDispatcherBuilder =
+ this.copy(config = config.copy(threadTimeout = time))
+
+ def setRejectionPolicy(policy: RejectedExecutionHandler): ThreadPoolConfigDispatcherBuilder =
+ setFlowHandler(flowHandler(policy))
+
+ def setFlowHandler(newFlowHandler: FlowHandler): ThreadPoolConfigDispatcherBuilder =
+ this.copy(config = config.copy(flowHandler = newFlowHandler))
+
+ def setAllowCoreThreadTimeout(allow: Boolean): ThreadPoolConfigDispatcherBuilder =
+ this.copy(config = config.copy(allowCorePoolTimeout = allow))
+
+ def configure(fs: Option[Function[ThreadPoolConfigDispatcherBuilder, ThreadPoolConfigDispatcherBuilder]]*): ThreadPoolConfigDispatcherBuilder = fs.foldLeft(this)((c, f) => f.map(_(c)).getOrElse(c))
+}
+
+/**
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+class MonitorableThreadFactory(val name: String) extends ThreadFactory {
+ protected val counter = new AtomicLong
+
+ def newThread(runnable: Runnable) = new MonitorableThread(runnable, name)
+}
+
+/**
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+object MonitorableThread {
+ val DEFAULT_NAME = "MonitorableThread"
+
+ // FIXME use MonitorableThread.created and MonitorableThread.alive in monitoring
+ val created = new AtomicInteger
+ val alive = new AtomicInteger
+}
+
+/**
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+class MonitorableThread(runnable: Runnable, name: String)
+ extends Thread(runnable, name + "-" + MonitorableThread.created.incrementAndGet) {
+
+ setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
+ def uncaughtException(thread: Thread, cause: Throwable) = {}
+ })
+
+ override def run = {
+ try {
+ MonitorableThread.alive.incrementAndGet
+ super.run
+ } finally {
+ MonitorableThread.alive.decrementAndGet
+ }
+ }
+}
+
+/**
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+class BoundedExecutorDecorator(val executor: ExecutorService, bound: Int) extends ExecutorServiceDelegate {
+ protected val semaphore = new Semaphore(bound)
+
+ override def execute(command: Runnable) = {
+ semaphore.acquire
+ try {
+ executor.execute(new Runnable() {
+ def run = {
+ try {
+ command.run
+ } finally {
+ semaphore.release
+ }
+ }
+ })
+ } catch {
+ case e: RejectedExecutionException =>
+ EventHandler.warning(this, e.toString)
+ semaphore.release
+ case e: Throwable =>
+ EventHandler.error(e, this, e.getMessage)
+ throw e
+ }
+ }
+}
+
+trait ExecutorServiceDelegate extends ExecutorService {
+
+ def executor: ExecutorService
+
+ def execute(command: Runnable) = executor.execute(command)
+
+ def shutdown() { executor.shutdown() }
+
+ def shutdownNow() = executor.shutdownNow()
+
+ def isShutdown = executor.isShutdown
+
+ def isTerminated = executor.isTerminated
+
+ def awaitTermination(l: Long, timeUnit: TimeUnit) = executor.awaitTermination(l, timeUnit)
+
+ def submit[T](callable: Callable[T]) = executor.submit(callable)
+
+ def submit[T](runnable: Runnable, t: T) = executor.submit(runnable, t)
+
+ def submit(runnable: Runnable) = executor.submit(runnable)
+
+ def invokeAll[T](callables: Collection[_ <: Callable[T]]) = executor.invokeAll(callables)
+
+ def invokeAll[T](callables: Collection[_ <: Callable[T]], l: Long, timeUnit: TimeUnit) = executor.invokeAll(callables, l, timeUnit)
+
+ def invokeAny[T](callables: Collection[_ <: Callable[T]]) = executor.invokeAny(callables)
+
+ def invokeAny[T](callables: Collection[_ <: Callable[T]], l: Long, timeUnit: TimeUnit) = executor.invokeAny(callables, l, timeUnit)
+}
+
+trait LazyExecutorService extends ExecutorServiceDelegate {
+
+ def createExecutor: ExecutorService
+
+ lazy val executor = {
+ createExecutor
+ }
+}
+
+class LazyExecutorServiceWrapper(executorFactory: => ExecutorService) extends LazyExecutorService {
+ def createExecutor = executorFactory
+}
diff --git a/test/disabled/presentation/akka/src/akka/event/EventHandler.scala b/test/disabled/presentation/akka/src/akka/event/EventHandler.scala
new file mode 100644
index 0000000000..f3176b7c21
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/event/EventHandler.scala
@@ -0,0 +1,235 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka.event
+
+import akka.actor._
+import akka.config.Config._
+import akka.config.ConfigurationException
+import akka.util.{ ListenerManagement, ReflectiveAccess }
+import akka.AkkaException
+
+/**
+ * Event handler.
+ * <p/>
+ * Create, add and remove a listener:
+ * <pre>
+ * val eventHandlerListener = Actor.actorOf(new Actor {
+ * self.dispatcher = EventHandler.EventHandlerDispatcher
+ *
+ * def receive = {
+ * case EventHandler.Error(cause, instance, message) => ...
+ * case EventHandler.Warning(instance, message) => ...
+ * case EventHandler.Info(instance, message) => ...
+ * case EventHandler.Debug(instance, message) => ...
+ * case genericEvent => ...
+ * }
+ * })
+ *
+ * EventHandler.addListener(eventHandlerListener)
+ * ...
+ * EventHandler.removeListener(eventHandlerListener)
+ * </pre>
+ * <p/>
+ * However best is probably to register the listener in the 'akka.conf'
+ * configuration file.
+ * <p/>
+ * Log an error event:
+ * <pre>
+ * EventHandler.notify(EventHandler.Error(exception, this, message))
+ * </pre>
+ * Or use the direct methods (better performance):
+ * <pre>
+ * EventHandler.error(exception, this, message)
+ * </pre>
+ *
+ * Shut down the EventHandler:
+ * <pre>
+ * EventHandler.shutdown()
+ * </pre>
+ *
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+object EventHandler extends ListenerManagement {
+ import java.io.{ StringWriter, PrintWriter }
+ import java.text.DateFormat
+ import java.util.Date
+ import akka.dispatch.Dispatchers
+
+ val ErrorLevel = 1
+ val WarningLevel = 2
+ val InfoLevel = 3
+ val DebugLevel = 4
+
+ sealed trait Event {
+ @transient
+ val thread: Thread = Thread.currentThread
+ val level: Int
+ }
+ case class Error(cause: Throwable, instance: AnyRef, message: Any = "") extends Event {
+ override val level = ErrorLevel
+ }
+ case class Warning(instance: AnyRef, message: Any = "") extends Event {
+ override val level = WarningLevel
+ }
+ case class Info(instance: AnyRef, message: Any = "") extends Event {
+ override val level = InfoLevel
+ }
+ case class Debug(instance: AnyRef, message: Any = "") extends Event {
+ override val level = DebugLevel
+ }
+
+ val error = "[ERROR] [%s] [%s] [%s] %s\n%s".intern
+ val warning = "[WARN] [%s] [%s] [%s] %s".intern
+ val info = "[INFO] [%s] [%s] [%s] %s".intern
+ val debug = "[DEBUG] [%s] [%s] [%s] %s".intern
+ val generic = "[GENERIC] [%s] [%s]".intern
+ val ID = "event:handler".intern
+
+ class EventHandlerException extends AkkaException
+
+ lazy val EventHandlerDispatcher = Dispatchers.newExecutorBasedEventDrivenDispatcher(ID).build
+
+ val level: Int = config.getString("akka.event-handler-level", "INFO") match {
+ case "ERROR" => ErrorLevel
+ case "WARNING" => WarningLevel
+ case "INFO" => InfoLevel
+ case "DEBUG" => DebugLevel
+ case unknown => throw new ConfigurationException(
+ "Configuration option 'akka.event-handler-level' is invalid [" + unknown + "]")
+ }
+
+ /**
+ * Shuts down all event handler listeners including the event handle dispatcher.
+ */
+ def shutdown() {
+ foreachListener(_.stop())
+ EventHandlerDispatcher.shutdown()
+ }
+
+ def notify(event: Any) {
+ if (event.isInstanceOf[Event]) {
+ if (level >= event.asInstanceOf[Event].level) notifyListeners(event)
+ } else
+ notifyListeners(event)
+ }
+
+ def notify[T <: Event: ClassManifest](event: => T) {
+ if (level >= levelFor(classManifest[T].erasure.asInstanceOf[Class[_ <: Event]])) notifyListeners(event)
+ }
+
+ def error(cause: Throwable, instance: AnyRef, message: => String) {
+ if (level >= ErrorLevel) notifyListeners(Error(cause, instance, message))
+ }
+
+ def error(cause: Throwable, instance: AnyRef, message: Any) {
+ if (level >= ErrorLevel) notifyListeners(Error(cause, instance, message))
+ }
+
+ def error(instance: AnyRef, message: => String) {
+ if (level >= ErrorLevel) notifyListeners(Error(new EventHandlerException, instance, message))
+ }
+
+ def error(instance: AnyRef, message: Any) {
+ if (level >= ErrorLevel) notifyListeners(Error(new EventHandlerException, instance, message))
+ }
+
+ def warning(instance: AnyRef, message: => String) {
+ if (level >= WarningLevel) notifyListeners(Warning(instance, message))
+ }
+
+ def warning(instance: AnyRef, message: Any) {
+ if (level >= WarningLevel) notifyListeners(Warning(instance, message))
+ }
+
+ def info(instance: AnyRef, message: => String) {
+ if (level >= InfoLevel) notifyListeners(Info(instance, message))
+ }
+
+ def info(instance: AnyRef, message: Any) {
+ if (level >= InfoLevel) notifyListeners(Info(instance, message))
+ }
+
+ def debug(instance: AnyRef, message: => String) {
+ if (level >= DebugLevel) notifyListeners(Debug(instance, message))
+ }
+
+ def debug(instance: AnyRef, message: Any) {
+ if (level >= DebugLevel) notifyListeners(Debug(instance, message))
+ }
+
+ def isInfoEnabled = level >= InfoLevel
+
+ def isDebugEnabled = level >= DebugLevel
+
+ def formattedTimestamp = DateFormat.getInstance.format(new Date)
+
+ def stackTraceFor(e: Throwable) = {
+ val sw = new StringWriter
+ val pw = new PrintWriter(sw)
+ e.printStackTrace(pw)
+ sw.toString
+ }
+
+ private def levelFor(eventClass: Class[_ <: Event]) = {
+ if (eventClass.isInstanceOf[Error]) ErrorLevel
+ else if (eventClass.isInstanceOf[Warning]) WarningLevel
+ else if (eventClass.isInstanceOf[Info]) InfoLevel
+ else if (eventClass.isInstanceOf[Debug]) DebugLevel
+ else DebugLevel
+ }
+
+ class DefaultListener extends Actor {
+ self.id = ID
+ self.dispatcher = EventHandlerDispatcher
+
+ def receive = {
+ case event@Error(cause, instance, message) =>
+ println(error.format(
+ formattedTimestamp,
+ event.thread.getName,
+ instance.getClass.getSimpleName,
+ message,
+ stackTraceFor(cause)))
+ case event@Warning(instance, message) =>
+ println(warning.format(
+ formattedTimestamp,
+ event.thread.getName,
+ instance.getClass.getSimpleName,
+ message))
+ case event@Info(instance, message) =>
+ println(info.format(
+ formattedTimestamp,
+ event.thread.getName,
+ instance.getClass.getSimpleName,
+ message))
+ case event@Debug(instance, message) =>
+ println(debug.format(
+ formattedTimestamp,
+ event.thread.getName,
+ instance.getClass.getSimpleName,
+ message))
+ case event =>
+ println(generic.format(formattedTimestamp, event.toString))
+ }
+ }
+
+ val defaultListeners = config.getList("akka.event-handlers") match {
+ case Nil => "akka.event.EventHandler$DefaultListener" :: Nil
+ case listeners => listeners
+ }
+ defaultListeners foreach { listenerName =>
+ try {
+ ReflectiveAccess.getClassFor[Actor](listenerName) match {
+ case r: Right[_, Class[Actor]] => addListener(Actor.actorOf(r.b).start())
+ case l: Left[Exception, _] => throw l.a
+ }
+ } catch {
+ case e: Exception =>
+ throw new ConfigurationException(
+ "Event Handler specified in config can't be loaded [" + listenerName +
+ "] due to [" + e.toString + "]", e)
+ }
+ }
+}
diff --git a/test/disabled/presentation/akka/src/akka/event/JavaEventHandler.java b/test/disabled/presentation/akka/src/akka/event/JavaEventHandler.java
new file mode 100644
index 0000000000..7e6e2d4143
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/event/JavaEventHandler.java
@@ -0,0 +1,35 @@
+package akka.event;
+
+
+import akka.actor.ActorRef;
+
+/**
+ * Java API for Akka EventHandler
+ */
+
+public class JavaEventHandler {
+
+
+ public static void notify(Object message){
+ EventHandler$.MODULE$.notify(message);
+ }
+
+ public static void debug(ActorRef instance, Object message){
+ EventHandler$.MODULE$.debug(instance, message);
+ }
+
+ public static void info(ActorRef instance, Object message){
+ EventHandler$.MODULE$.info(instance,message);
+ }
+
+ public static void warning(ActorRef instance, Object message){
+ EventHandler$.MODULE$.warning(instance,message);
+ }
+
+ public static void error(ActorRef instance, Object message){
+ EventHandler$.MODULE$.debug(instance,message);
+ }
+
+}
+
+
diff --git a/test/disabled/presentation/akka/src/akka/japi/JavaAPI.scala b/test/disabled/presentation/akka/src/akka/japi/JavaAPI.scala
new file mode 100644
index 0000000000..f5c4ccdcaa
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/japi/JavaAPI.scala
@@ -0,0 +1,108 @@
+package akka.japi
+
+/**
+ * A Function interface. Used to create first-class-functions is Java (sort of).
+ */
+trait Function[T, R] {
+ def apply(param: T): R
+}
+
+/**
+ * A Function interface. Used to create 2-arg first-class-functions is Java (sort of).
+ */
+trait Function2[T1, T2, R] {
+ def apply(arg1: T1, arg2: T2): R
+}
+
+/**
+ * A Procedure is like a Function, but it doesn't produce a return value
+ */
+trait Procedure[T] {
+ def apply(param: T): Unit
+}
+
+/**
+ * A Procedure is like a Function, but it doesn't produce a return value
+ */
+trait Procedure2[T1, T2] {
+ def apply(param: T1, param2: T2): Unit
+}
+
+/**
+ * An executable piece of code that takes no parameters and doesn't return any value.
+ */
+trait SideEffect {
+ def apply: Unit
+}
+
+/**
+ * An executable piece of code that takes no parameters and doesn't return any value.
+ */
+trait Effect {
+ def apply: Unit
+}
+
+/**
+ * + * A constructor/factory, takes no parameters but creates a new value of type T every call
+ * +
+ */
+trait Creator[T] {
+ def create: T
+}
+
+/**
+ * This class represents optional values. Instances of <code>Option</code>
+ * are either instances of case class <code>Some</code> or it is case
+ * object <code>None</code>.
+ * <p>
+ * Java API
+ */
+sealed abstract class Option[A] extends java.lang.Iterable[A] {
+ import scala.collection.JavaConversions._
+
+ def get: A
+ def isEmpty: Boolean
+ def isDefined = !isEmpty
+ def asScala: scala.Option[A]
+ def iterator = if (isEmpty) Iterator.empty else Iterator.single(get)
+}
+
+object Option {
+ /**
+ * <code>Option</code> factory that creates <code>Some</code>
+ */
+ def some[A](v: A): Option[A] = Some(v)
+
+ /**
+ * <code>Option</code> factory that creates <code>None</code>
+ */
+ def none[A] = None.asInstanceOf[Option[A]]
+
+ /**
+ * <code>Option</code> factory that creates <code>None</code> if
+ * <code>v</code> is <code>null</code>, <code>Some(v)</code> otherwise.
+ */
+ def option[A](v: A): Option[A] = if (v == null) none else some(v)
+
+ /**
+ * Class <code>Some[A]</code> represents existing values of type
+ * <code>A</code>.
+ */
+ final case class Some[A](v: A) extends Option[A] {
+ def get = v
+ def isEmpty = false
+ def asScala = scala.Some(v)
+ }
+
+ /**
+ * This case object represents non-existent values.
+ */
+ private case object None extends Option[Nothing] {
+ def get = throw new NoSuchElementException("None.get")
+ def isEmpty = true
+ def asScala = scala.None
+ }
+
+ implicit def java2ScalaOption[A](o: Option[A]): scala.Option[A] = o.asScala
+ implicit def scala2JavaOption[A](o: scala.Option[A]): Option[A] = option(o.get)
+}
diff --git a/test/disabled/presentation/akka/src/akka/remoteinterface/RemoteEventHandler.scala b/test/disabled/presentation/akka/src/akka/remoteinterface/RemoteEventHandler.scala
new file mode 100644
index 0000000000..1c75618301
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/remoteinterface/RemoteEventHandler.scala
@@ -0,0 +1,43 @@
+package akka.remoteinterface
+
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+import akka.actor.Actor
+import akka.event.EventHandler
+
+/**
+ * Remote client and server event listener that pipes the events to the standard Akka EventHander.
+ *
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+class RemoteEventHandler extends Actor {
+ import EventHandler._
+
+ self.id = ID
+ self.dispatcher = EventHandlerDispatcher
+
+ def receive = {
+
+ // client
+ case RemoteClientError(cause, client, address) => EventHandler.error(cause, client, "RemoteClientError - Address[%s]" format address.toString)
+ case RemoteClientWriteFailed(request, cause, client, address) => EventHandler.error(cause, client, "RemoteClientWriteFailed - Request[%s] Address[%s]".format(address.toString))
+ case RemoteClientDisconnected(client, address) => EventHandler.info(client, "RemoteClientDisconnected - Address[%s]" format address.toString)
+ case RemoteClientConnected(client, address) => EventHandler.info(client, "RemoteClientConnected - Address[%s]" format address.toString)
+ case RemoteClientStarted(client, address) => EventHandler.info(client, "RemoteClientStarted - Address[%s]" format address.toString)
+ case RemoteClientShutdown(client, address) => EventHandler.info(client, "RemoteClientShutdown - Address[%s]" format address.toString)
+
+ // server
+ case RemoteServerError(cause, server) => EventHandler.error(cause, server, "RemoteServerError")
+ case RemoteServerWriteFailed(request, cause, server, clientAddress) => EventHandler.error(cause, server, "RemoteServerWriteFailed - Request[%s] Address[%s]" format (request, clientAddress.toString))
+ case RemoteServerStarted(server) => EventHandler.info(server, "RemoteServerStarted")
+ case RemoteServerShutdown(server) => EventHandler.info(server, "RemoteServerShutdown")
+ case RemoteServerClientConnected(server, clientAddress) => EventHandler.info(server, "RemoteServerClientConnected - Address[%s]" format clientAddress.toString)
+ case RemoteServerClientDisconnected(server, clientAddress) => EventHandler.info(server, "RemoteServerClientDisconnected - Address[%s]" format clientAddress.toString)
+ case RemoteServerClientClosed(server, clientAddress) => EventHandler.info(server, "RemoteServerClientClosed - Address[%s]" format clientAddress.toString)
+
+ case _ => //ignore other
+ }
+}
+
diff --git a/test/disabled/presentation/akka/src/akka/remoteinterface/RemoteInterface.scala b/test/disabled/presentation/akka/src/akka/remoteinterface/RemoteInterface.scala
new file mode 100644
index 0000000000..0c5da82294
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/remoteinterface/RemoteInterface.scala
@@ -0,0 +1,493 @@
+/**
+ * Copyright (C) 2009-2010 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka.remoteinterface
+
+import akka.japi.Creator
+import akka.actor._
+import akka.util._
+import akka.dispatch.CompletableFuture
+import akka.AkkaException
+
+import scala.beans.BeanProperty
+
+import java.net.InetSocketAddress
+import java.util.concurrent.ConcurrentHashMap
+import java.io.{ PrintWriter, PrintStream }
+import java.lang.reflect.InvocationTargetException
+
+trait RemoteModule {
+ val UUID_PREFIX = "uuid:".intern
+
+ def optimizeLocalScoped_?(): Boolean //Apply optimizations for remote operations in local scope
+ protected[akka] def notifyListeners(message: => Any): Unit
+
+ private[akka] def actors: ConcurrentHashMap[String, ActorRef]
+ private[akka] def actorsByUuid: ConcurrentHashMap[String, ActorRef]
+ private[akka] def actorsFactories: ConcurrentHashMap[String, () => ActorRef]
+ private[akka] def typedActors: ConcurrentHashMap[String, AnyRef]
+ private[akka] def typedActorsByUuid: ConcurrentHashMap[String, AnyRef]
+ private[akka] def typedActorsFactories: ConcurrentHashMap[String, () => AnyRef]
+
+ /** Lookup methods **/
+
+ private[akka] def findActorById(id: String): ActorRef = actors.get(id)
+
+ private[akka] def findActorByUuid(uuid: String): ActorRef = actorsByUuid.get(uuid)
+
+ private[akka] def findActorFactory(id: String): () => ActorRef = actorsFactories.get(id)
+
+ private[akka] def findTypedActorById(id: String): AnyRef = typedActors.get(id)
+
+ private[akka] def findTypedActorFactory(id: String): () => AnyRef = typedActorsFactories.get(id)
+
+ private[akka] def findTypedActorByUuid(uuid: String): AnyRef = typedActorsByUuid.get(uuid)
+
+ private[akka] def findActorByIdOrUuid(id: String, uuid: String): ActorRef = {
+ var actorRefOrNull = if (id.startsWith(UUID_PREFIX)) findActorByUuid(id.substring(UUID_PREFIX.length))
+ else findActorById(id)
+ if (actorRefOrNull eq null) actorRefOrNull = findActorByUuid(uuid)
+ actorRefOrNull
+ }
+
+ private[akka] def findTypedActorByIdOrUuid(id: String, uuid: String): AnyRef = {
+ var actorRefOrNull = if (id.startsWith(UUID_PREFIX)) findTypedActorByUuid(id.substring(UUID_PREFIX.length))
+ else findTypedActorById(id)
+ if (actorRefOrNull eq null) actorRefOrNull = findTypedActorByUuid(uuid)
+ actorRefOrNull
+ }
+}
+
+/**
+ * Life-cycle events for RemoteClient.
+ */
+sealed trait RemoteClientLifeCycleEvent
+case class RemoteClientError(
+ @BeanProperty cause: Throwable,
+ @BeanProperty client: RemoteClientModule,
+ @BeanProperty remoteAddress: InetSocketAddress) extends RemoteClientLifeCycleEvent
+case class RemoteClientDisconnected(
+ @BeanProperty client: RemoteClientModule,
+ @BeanProperty remoteAddress: InetSocketAddress) extends RemoteClientLifeCycleEvent
+case class RemoteClientConnected(
+ @BeanProperty client: RemoteClientModule,
+ @BeanProperty remoteAddress: InetSocketAddress) extends RemoteClientLifeCycleEvent
+case class RemoteClientStarted(
+ @BeanProperty client: RemoteClientModule,
+ @BeanProperty remoteAddress: InetSocketAddress) extends RemoteClientLifeCycleEvent
+case class RemoteClientShutdown(
+ @BeanProperty client: RemoteClientModule,
+ @BeanProperty remoteAddress: InetSocketAddress) extends RemoteClientLifeCycleEvent
+case class RemoteClientWriteFailed(
+ @BeanProperty request: AnyRef,
+ @BeanProperty cause: Throwable,
+ @BeanProperty client: RemoteClientModule,
+ @BeanProperty remoteAddress: InetSocketAddress) extends RemoteClientLifeCycleEvent
+
+/**
+ * Life-cycle events for RemoteServer.
+ */
+sealed trait RemoteServerLifeCycleEvent
+case class RemoteServerStarted(
+ @BeanProperty val server: RemoteServerModule) extends RemoteServerLifeCycleEvent
+case class RemoteServerShutdown(
+ @BeanProperty val server: RemoteServerModule) extends RemoteServerLifeCycleEvent
+case class RemoteServerError(
+ @BeanProperty val cause: Throwable,
+ @BeanProperty val server: RemoteServerModule) extends RemoteServerLifeCycleEvent
+case class RemoteServerClientConnected(
+ @BeanProperty val server: RemoteServerModule,
+ @BeanProperty val clientAddress: Option[InetSocketAddress]) extends RemoteServerLifeCycleEvent
+case class RemoteServerClientDisconnected(
+ @BeanProperty val server: RemoteServerModule,
+ @BeanProperty val clientAddress: Option[InetSocketAddress]) extends RemoteServerLifeCycleEvent
+case class RemoteServerClientClosed(
+ @BeanProperty val server: RemoteServerModule,
+ @BeanProperty val clientAddress: Option[InetSocketAddress]) extends RemoteServerLifeCycleEvent
+case class RemoteServerWriteFailed(
+ @BeanProperty request: AnyRef,
+ @BeanProperty cause: Throwable,
+ @BeanProperty server: RemoteServerModule,
+ @BeanProperty clientAddress: Option[InetSocketAddress]) extends RemoteServerLifeCycleEvent
+
+/**
+ * Thrown for example when trying to send a message using a RemoteClient that is either not started or shut down.
+ */
+class RemoteClientException private[akka] (
+ message: String,
+ @BeanProperty val client: RemoteClientModule,
+ val remoteAddress: InetSocketAddress, cause: Throwable = null) extends AkkaException(message, cause)
+
+/**
+ * Thrown when the remote server actor dispatching fails for some reason.
+ */
+class RemoteServerException private[akka] (message: String) extends AkkaException(message)
+
+/**
+ * Thrown when a remote exception sent over the wire cannot be loaded and instantiated
+ */
+case class CannotInstantiateRemoteExceptionDueToRemoteProtocolParsingErrorException private[akka] (cause: Throwable, originalClassName: String, originalMessage: String)
+ extends AkkaException("\nParsingError[%s]\nOriginalException[%s]\nOriginalMessage[%s]"
+ .format(cause.toString, originalClassName, originalMessage)) {
+ override def printStackTrace = cause.printStackTrace
+ override def printStackTrace(printStream: PrintStream) = cause.printStackTrace(printStream)
+ override def printStackTrace(printWriter: PrintWriter) = cause.printStackTrace(printWriter)
+}
+
+abstract class RemoteSupport extends ListenerManagement with RemoteServerModule with RemoteClientModule {
+
+ lazy val eventHandler: ActorRef = {
+ val handler = Actor.actorOf[RemoteEventHandler].start()
+ // add the remote client and server listener that pipes the events to the event handler system
+ addListener(handler)
+ handler
+ }
+
+ def shutdown() {
+ eventHandler.stop()
+ removeListener(eventHandler)
+ this.shutdownClientModule()
+ this.shutdownServerModule()
+ clear
+ }
+
+ /**
+ * Creates a Client-managed ActorRef out of the Actor of the specified Class.
+ * If the supplied host and port is identical of the configured local node, it will be a local actor
+ * <pre>
+ * import Actor._
+ * val actor = actorOf(classOf[MyActor],"www.akka.io", 2552)
+ * actor.start()
+ * actor ! message
+ * actor.stop()
+ * </pre>
+ * You can create and start the actor in one statement like this:
+ * <pre>
+ * val actor = actorOf(classOf[MyActor],"www.akka.io", 2552).start()
+ * </pre>
+ */
+ @deprecated("Will be removed after 1.1", "1.1")
+ def actorOf(factory: => Actor, host: String, port: Int): ActorRef =
+ Actor.remote.clientManagedActorOf(() => factory, host, port)
+
+ /**
+ * Creates a Client-managed ActorRef out of the Actor of the specified Class.
+ * If the supplied host and port is identical of the configured local node, it will be a local actor
+ * <pre>
+ * import Actor._
+ * val actor = actorOf(classOf[MyActor],"www.akka.io",2552)
+ * actor.start()
+ * actor ! message
+ * actor.stop()
+ * </pre>
+ * You can create and start the actor in one statement like this:
+ * <pre>
+ * val actor = actorOf(classOf[MyActor],"www.akka.io",2552).start()
+ * </pre>
+ */
+ @deprecated("Will be removed after 1.1", "1.1")
+ def actorOf(clazz: Class[_ <: Actor], host: String, port: Int): ActorRef =
+ clientManagedActorOf(() => createActorFromClass(clazz), host, port)
+
+ /**
+ * Creates a Client-managed ActorRef out of the Actor of the specified Class.
+ * If the supplied host and port is identical of the configured local node, it will be a local actor
+ * <pre>
+ * import Actor._
+ * val actor = actorOf[MyActor]("www.akka.io",2552)
+ * actor.start()
+ * actor ! message
+ * actor.stop()
+ * </pre>
+ * You can create and start the actor in one statement like this:
+ * <pre>
+ * val actor = actorOf[MyActor]("www.akka.io",2552).start()
+ * </pre>
+ */
+ @deprecated("Will be removed after 1.1", "1.1")
+ def actorOf[T <: Actor: Manifest](host: String, port: Int): ActorRef =
+ clientManagedActorOf(() => createActorFromClass(manifest.erasure), host, port)
+
+ protected def createActorFromClass(clazz: Class[_]): Actor = {
+ import ReflectiveAccess.{ createInstance, noParams, noArgs }
+ createInstance[Actor](clazz, noParams, noArgs) match {
+ case Right(actor) => actor
+ case Left(exception) =>
+ val cause = exception match {
+ case i: InvocationTargetException => i.getTargetException
+ case _ => exception
+ }
+
+ throw new ActorInitializationException(
+ "Could not instantiate Actor of " + clazz +
+ "\nMake sure Actor is NOT defined inside a class/trait," +
+ "\nif so put it outside the class/trait, f.e. in a companion object," +
+ "\nOR try to change: 'actorOf[MyActor]' to 'actorOf(new MyActor)'.", cause)
+ }
+ }
+
+ protected override def manageLifeCycleOfListeners = false
+ protected[akka] override def notifyListeners(message: => Any): Unit = super.notifyListeners(message)
+
+ private[akka] val actors = new ConcurrentHashMap[String, ActorRef]
+ private[akka] val actorsByUuid = new ConcurrentHashMap[String, ActorRef]
+ private[akka] val actorsFactories = new ConcurrentHashMap[String, () => ActorRef]
+ private[akka] val typedActors = new ConcurrentHashMap[String, AnyRef]
+ private[akka] val typedActorsByUuid = new ConcurrentHashMap[String, AnyRef]
+ private[akka] val typedActorsFactories = new ConcurrentHashMap[String, () => AnyRef]
+
+ def clear {
+ actors.clear
+ actorsByUuid.clear
+ typedActors.clear
+ typedActorsByUuid.clear
+ actorsFactories.clear
+ typedActorsFactories.clear
+ }
+}
+
+/**
+ * This is the interface for the RemoteServer functionality, it's used in Actor.remote
+ */
+trait RemoteServerModule extends RemoteModule {
+ protected val guard = new ReentrantGuard
+
+ /**
+ * Signals whether the server is up and running or not
+ */
+ def isRunning: Boolean
+
+ /**
+ * Gets the name of the server instance
+ */
+ def name: String
+
+ /**
+ * Gets the address of the server instance
+ */
+ def address: InetSocketAddress
+
+ /**
+ * Starts the server up
+ */
+ def start(): RemoteServerModule =
+ start(ReflectiveAccess.Remote.configDefaultAddress.getAddress.getHostAddress,
+ ReflectiveAccess.Remote.configDefaultAddress.getPort,
+ None)
+
+ /**
+ * Starts the server up
+ */
+ def start(loader: ClassLoader): RemoteServerModule =
+ start(ReflectiveAccess.Remote.configDefaultAddress.getAddress.getHostAddress,
+ ReflectiveAccess.Remote.configDefaultAddress.getPort,
+ Option(loader))
+
+ /**
+ * Starts the server up
+ */
+ def start(host: String, port: Int): RemoteServerModule =
+ start(host, port, None)
+
+ /**
+ * Starts the server up
+ */
+ def start(host: String, port: Int, loader: ClassLoader): RemoteServerModule =
+ start(host, port, Option(loader))
+
+ /**
+ * Starts the server up
+ */
+ def start(host: String, port: Int, loader: Option[ClassLoader]): RemoteServerModule
+
+ /**
+ * Shuts the server down
+ */
+ def shutdownServerModule(): Unit
+
+ /**
+ * Register typed actor by interface name.
+ */
+ def registerTypedActor(intfClass: Class[_], typedActor: AnyRef): Unit = registerTypedActor(intfClass.getName, typedActor)
+
+ /**
+ * Register remote typed actor by a specific id.
+ * @param id custom actor id
+ * @param typedActor typed actor to register
+ */
+ def registerTypedActor(id: String, typedActor: AnyRef): Unit
+
+ /**
+ * Register typed actor by interface name.
+ */
+ def registerTypedPerSessionActor(intfClass: Class[_], factory: => AnyRef): Unit = registerTypedActor(intfClass.getName, factory)
+
+ /**
+ * Register typed actor by interface name.
+ * Java API
+ */
+ def registerTypedPerSessionActor(intfClass: Class[_], factory: Creator[AnyRef]): Unit = registerTypedActor(intfClass.getName, factory)
+
+ /**
+ * Register remote typed actor by a specific id.
+ * @param id custom actor id
+ * @param typedActor typed actor to register
+ */
+ def registerTypedPerSessionActor(id: String, factory: => AnyRef): Unit
+
+ /**
+ * Register remote typed actor by a specific id.
+ * @param id custom actor id
+ * @param typedActor typed actor to register
+ * Java API
+ */
+ def registerTypedPerSessionActor(id: String, factory: Creator[AnyRef]): Unit = registerTypedPerSessionActor(id, factory.create)
+
+ /**
+ * Register Remote Actor by the Actor's 'id' field. It starts the Actor if it is not started already.
+ */
+ def register(actorRef: ActorRef): Unit = register(actorRef.id, actorRef)
+
+ /**
+ * Register Remote Actor by the Actor's uuid field. It starts the Actor if it is not started already.
+ */
+ def registerByUuid(actorRef: ActorRef): Unit
+
+ /**
+ * Register Remote Actor by a specific 'id' passed as argument. The actor is registered by UUID rather than ID
+ * when prefixing the handle with the “uuid:” protocol.
+ * <p/>
+ * NOTE: If you use this method to register your remote actor then you must unregister the actor by this ID yourself.
+ */
+ def register(id: String, actorRef: ActorRef): Unit
+
+ /**
+ * Register Remote Session Actor by a specific 'id' passed as argument.
+ * <p/>
+ * NOTE: If you use this method to register your remote actor then you must unregister the actor by this ID yourself.
+ */
+ def registerPerSession(id: String, factory: => ActorRef): Unit
+
+ /**
+ * Register Remote Session Actor by a specific 'id' passed as argument.
+ * <p/>
+ * NOTE: If you use this method to register your remote actor then you must unregister the actor by this ID yourself.
+ * Java API
+ */
+ def registerPerSession(id: String, factory: Creator[ActorRef]): Unit = registerPerSession(id, factory.create)
+
+ /**
+ * Unregister Remote Actor that is registered using its 'id' field (not custom ID).
+ */
+ def unregister(actorRef: ActorRef): Unit
+
+ /**
+ * Unregister Remote Actor by specific 'id'.
+ * <p/>
+ * NOTE: You need to call this method if you have registered an actor by a custom ID.
+ */
+ def unregister(id: String): Unit
+
+ /**
+ * Unregister Remote Actor by specific 'id'.
+ * <p/>
+ * NOTE: You need to call this method if you have registered an actor by a custom ID.
+ */
+ def unregisterPerSession(id: String): Unit
+
+ /**
+ * Unregister Remote Typed Actor by specific 'id'.
+ * <p/>
+ * NOTE: You need to call this method if you have registered an actor by a custom ID.
+ */
+ def unregisterTypedActor(id: String): Unit
+
+ /**
+ * Unregister Remote Typed Actor by specific 'id'.
+ * <p/>
+ * NOTE: You need to call this method if you have registered an actor by a custom ID.
+ */
+ def unregisterTypedPerSessionActor(id: String): Unit
+}
+
+trait RemoteClientModule extends RemoteModule { self: RemoteModule =>
+
+ def actorFor(classNameOrServiceId: String, hostname: String, port: Int): ActorRef =
+ actorFor(classNameOrServiceId, classNameOrServiceId, Actor.TIMEOUT, hostname, port, None)
+
+ def actorFor(classNameOrServiceId: String, hostname: String, port: Int, loader: ClassLoader): ActorRef =
+ actorFor(classNameOrServiceId, classNameOrServiceId, Actor.TIMEOUT, hostname, port, Some(loader))
+
+ def actorFor(serviceId: String, className: String, hostname: String, port: Int): ActorRef =
+ actorFor(serviceId, className, Actor.TIMEOUT, hostname, port, None)
+
+ def actorFor(serviceId: String, className: String, hostname: String, port: Int, loader: ClassLoader): ActorRef =
+ actorFor(serviceId, className, Actor.TIMEOUT, hostname, port, Some(loader))
+
+ def actorFor(classNameOrServiceId: String, timeout: Long, hostname: String, port: Int): ActorRef =
+ actorFor(classNameOrServiceId, classNameOrServiceId, timeout, hostname, port, None)
+
+ def actorFor(classNameOrServiceId: String, timeout: Long, hostname: String, port: Int, loader: ClassLoader): ActorRef =
+ actorFor(classNameOrServiceId, classNameOrServiceId, timeout, hostname, port, Some(loader))
+
+ def actorFor(serviceId: String, className: String, timeout: Long, hostname: String, port: Int): ActorRef =
+ actorFor(serviceId, className, timeout, hostname, port, None)
+
+ def typedActorFor[T](intfClass: Class[T], serviceIdOrClassName: String, hostname: String, port: Int): T =
+ typedActorFor(intfClass, serviceIdOrClassName, serviceIdOrClassName, Actor.TIMEOUT, hostname, port, None)
+
+ def typedActorFor[T](intfClass: Class[T], serviceIdOrClassName: String, timeout: Long, hostname: String, port: Int): T =
+ typedActorFor(intfClass, serviceIdOrClassName, serviceIdOrClassName, timeout, hostname, port, None)
+
+ def typedActorFor[T](intfClass: Class[T], serviceIdOrClassName: String, timeout: Long, hostname: String, port: Int, loader: ClassLoader): T =
+ typedActorFor(intfClass, serviceIdOrClassName, serviceIdOrClassName, timeout, hostname, port, Some(loader))
+
+ def typedActorFor[T](intfClass: Class[T], serviceId: String, implClassName: String, timeout: Long, hostname: String, port: Int, loader: ClassLoader): T =
+ typedActorFor(intfClass, serviceId, implClassName, timeout, hostname, port, Some(loader))
+
+ @deprecated("Will be removed after 1.1", "1.1")
+ def clientManagedActorOf(factory: () => Actor, host: String, port: Int): ActorRef
+
+ /**
+ * Clean-up all open connections.
+ */
+ def shutdownClientModule(): Unit
+
+ /**
+ * Shuts down a specific client connected to the supplied remote address returns true if successful
+ */
+ def shutdownClientConnection(address: InetSocketAddress): Boolean
+
+ /**
+ * Restarts a specific client connected to the supplied remote address, but only if the client is not shut down
+ */
+ def restartClientConnection(address: InetSocketAddress): Boolean
+
+ /** Methods that needs to be implemented by a transport **/
+
+ protected[akka] def typedActorFor[T](intfClass: Class[T], serviceId: String, implClassName: String, timeout: Long, host: String, port: Int, loader: Option[ClassLoader]): T
+
+ protected[akka] def actorFor(serviceId: String, className: String, timeout: Long, hostname: String, port: Int, loader: Option[ClassLoader]): ActorRef
+
+ protected[akka] def send[T](message: Any,
+ senderOption: Option[ActorRef],
+ senderFuture: Option[CompletableFuture[T]],
+ remoteAddress: InetSocketAddress,
+ timeout: Long,
+ isOneWay: Boolean,
+ actorRef: ActorRef,
+ typedActorInfo: Option[Tuple2[String, String]],
+ actorType: ActorType,
+ loader: Option[ClassLoader]): Option[CompletableFuture[T]]
+
+ private[akka] def registerSupervisorForActor(actorRef: ActorRef): ActorRef
+
+ private[akka] def deregisterSupervisorForActor(actorRef: ActorRef): ActorRef
+
+ @deprecated("Will be removed after 1.1", "1.1")
+ private[akka] def registerClientManagedActor(hostname: String, port: Int, uuid: Uuid): Unit
+
+ @deprecated("Will be removed after 1.1", "1.1")
+ private[akka] def unregisterClientManagedActor(hostname: String, port: Int, uuid: Uuid): Unit
+}
diff --git a/test/disabled/presentation/akka/src/akka/routing/Iterators.scala b/test/disabled/presentation/akka/src/akka/routing/Iterators.scala
new file mode 100644
index 0000000000..315e7bea51
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/routing/Iterators.scala
@@ -0,0 +1,49 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka.routing
+
+import akka.actor.ActorRef
+import scala.collection.JavaConversions._
+import scala.collection.immutable.Seq
+
+/**
+ * An Iterator that is either always empty or yields an infinite number of Ts.
+ */
+trait InfiniteIterator[T] extends Iterator[T] {
+ val items: Seq[T]
+}
+
+/**
+ * CyclicIterator is a round-robin style InfiniteIterator that cycles the supplied List.
+ */
+case class CyclicIterator[T](val items: Seq[T]) extends InfiniteIterator[T] {
+ def this(items: java.util.List[T]) = this(items.toList)
+
+ @volatile
+ private[this] var current: Seq[T] = items
+
+ def hasNext = items != Nil
+
+ def next = {
+ val nc = if (current == Nil) items else current
+ current = nc.tail
+ nc.head
+ }
+
+ override def exists(f: T => Boolean): Boolean = items.exists(f)
+}
+
+/**
+ * This InfiniteIterator always returns the Actor that has the currently smallest mailbox
+ * useful for work-stealing.
+ */
+case class SmallestMailboxFirstIterator(val items: Seq[ActorRef]) extends InfiniteIterator[ActorRef] {
+ def this(items: java.util.List[ActorRef]) = this(items.toList)
+ def hasNext = items != Nil
+
+ def next = items.reduceLeft((a1, a2) => if (a1.mailboxSize < a2.mailboxSize) a1 else a2)
+
+ override def exists(f: ActorRef => Boolean): Boolean = items.exists(f)
+}
diff --git a/test/disabled/presentation/akka/src/akka/routing/Listeners.scala b/test/disabled/presentation/akka/src/akka/routing/Listeners.scala
new file mode 100644
index 0000000000..04f6c1259f
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/routing/Listeners.scala
@@ -0,0 +1,37 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka.routing
+
+import akka.actor.{ Actor, ActorRef }
+import java.util.concurrent.ConcurrentSkipListSet
+import scala.collection.JavaConversions._
+
+sealed trait ListenerMessage
+case class Listen(listener: ActorRef) extends ListenerMessage
+case class Deafen(listener: ActorRef) extends ListenerMessage
+case class WithListeners(f: (ActorRef) => Unit) extends ListenerMessage
+
+/**
+ * Listeners is a generic trait to implement listening capability on an Actor.
+ * <p/>
+ * Use the <code>gossip(msg)</code> method to have it sent to the listeners.
+ * <p/>
+ * Send <code>Listen(self)</code> to start listening.
+ * <p/>
+ * Send <code>Deafen(self)</code> to stop listening.
+ * <p/>
+ * Send <code>WithListeners(fun)</code> to traverse the current listeners.
+ */
+trait Listeners { self: Actor =>
+ private val listeners = new ConcurrentSkipListSet[ActorRef]
+
+ protected def listenerManagement: Receive = {
+ case Listen(l) => listeners add l
+ case Deafen(l) => listeners remove l
+ case WithListeners(f) => listeners foreach f
+ }
+
+ protected def gossip(msg: Any) = listeners foreach (_ ! msg)
+}
diff --git a/test/disabled/presentation/akka/src/akka/routing/Pool.scala b/test/disabled/presentation/akka/src/akka/routing/Pool.scala
new file mode 100644
index 0000000000..d972bb84c8
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/routing/Pool.scala
@@ -0,0 +1,292 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka.routing
+
+import akka.actor.{ Actor, ActorRef, PoisonPill }
+import java.util.concurrent.TimeUnit
+
+/**
+ * Actor pooling
+ *
+ * An actor pool is an message router for a set of delegate actors. The pool is an actor itself.
+ * There are a handful of basic concepts that need to be understood when working with and defining your pool.
+ *
+ * Selectors - A selector is a trait that determines how and how many pooled actors will receive an incoming message.
+ * Capacitors - A capacitor is a trait that influences the size of pool. There are effectively two types.
+ * The first determines the size itself - either fixed or bounded.
+ * The second determines how to adjust of the pool according to some internal pressure characteristic.
+ * Filters - A filter can be used to refine the raw pressure value returned from a capacitor.
+ *
+ * It should be pointed out that all actors in the pool are treated as essentially equivalent. This is not to say
+ * that one couldn't instance different classes within the pool, only that the pool, when selecting and routing,
+ * will not take any type information into consideration.
+ *
+ * @author Garrick Evans
+ */
+
+object ActorPool {
+ case object Stat
+ case class Stats(size: Int)
+}
+
+/**
+ * Defines the nature of an actor pool.
+ */
+trait ActorPool {
+ def instance(): ActorRef //Question, Instance of what?
+ def capacity(delegates: Seq[ActorRef]): Int //Question, What is the semantics of this return value?
+ def select(delegates: Seq[ActorRef]): Tuple2[Iterator[ActorRef], Int] //Question, Why does select return this instead of an ordered Set?
+}
+
+/**
+ * A default implementation of a pool, on each message to route,
+ * - checks the current capacity and adjusts accordingly if needed
+ * - routes the incoming message to a selection set of delegate actors
+ */
+trait DefaultActorPool extends ActorPool { this: Actor =>
+ import ActorPool._
+ import collection.mutable.LinkedList
+ import akka.actor.MaximumNumberOfRestartsWithinTimeRangeReached
+
+ protected var _delegates = Vector[ActorRef]()
+ private var _lastCapacityChange = 0
+ private var _lastSelectorCount = 0
+
+ override def postStop() = _delegates foreach { delegate =>
+ try {
+ delegate ! PoisonPill
+ } catch { case e: Exception => } //Ignore any exceptions here
+ }
+
+ protected def _route(): Receive = {
+ // for testing...
+ case Stat =>
+ self reply_? Stats(_delegates length)
+ case max: MaximumNumberOfRestartsWithinTimeRangeReached =>
+ _delegates = _delegates filterNot { _.uuid == max.victim.uuid }
+ case msg =>
+ resizeIfAppropriate()
+
+ select(_delegates) match {
+ case (selectedDelegates, count) =>
+ _lastSelectorCount = count
+ selectedDelegates foreach { _ forward msg } //Should we really send the same message to several actors?
+ }
+ }
+
+ private def resizeIfAppropriate() {
+ val requestedCapacity = capacity(_delegates)
+ val newDelegates = requestedCapacity match {
+ case qty if qty > 0 =>
+ _delegates ++ {
+ for (i ← 0 until requestedCapacity) yield {
+ val delegate = instance()
+ self startLink delegate
+ delegate
+ }
+ }
+ case qty if qty < 0 =>
+ _delegates.splitAt(_delegates.length + requestedCapacity) match {
+ case (keep, abandon) =>
+ abandon foreach { _ ! PoisonPill }
+ keep
+ }
+ case _ => _delegates //No change
+ }
+
+ _lastCapacityChange = requestedCapacity
+ _delegates = newDelegates
+ }
+}
+
+/**
+ * Selectors
+ * These traits define how, when a message needs to be routed, delegate(s) are chosen from the pool
+ */
+
+/**
+ * Returns the set of delegates with the least amount of message backlog.
+ */
+trait SmallestMailboxSelector {
+ def selectionCount: Int
+ def partialFill: Boolean
+
+ def select(delegates: Seq[ActorRef]): Tuple2[Iterator[ActorRef], Int] = {
+ var set: Seq[ActorRef] = Nil
+ var take = if (partialFill) math.min(selectionCount, delegates.length) else selectionCount
+
+ while (take > 0) {
+ set = delegates.sortWith(_.mailboxSize < _.mailboxSize).take(take) ++ set //Question, doesn't this risk selecting the same actor multiple times?
+ take -= set.size
+ }
+
+ (set.iterator, set.size)
+ }
+}
+
+/**
+ * Returns the set of delegates that occur sequentially 'after' the last delegate from the previous selection
+ */
+trait RoundRobinSelector {
+ private var _last: Int = -1;
+
+ def selectionCount: Int
+ def partialFill: Boolean
+
+ def select(delegates: Seq[ActorRef]): Tuple2[Iterator[ActorRef], Int] = {
+ val length = delegates.length
+ val take = if (partialFill) math.min(selectionCount, length)
+ else selectionCount
+
+ val set =
+ for (i ← 0 until take) yield {
+ _last = (_last + 1) % length
+ delegates(_last)
+ }
+
+ (set.iterator, set.size)
+ }
+}
+
+/**
+ * Capacitors
+ * These traits define how to alter the size of the pool
+ */
+
+/**
+ * Ensures a fixed number of delegates in the pool
+ */
+trait FixedSizeCapacitor {
+ def limit: Int
+ def capacity(delegates: Seq[ActorRef]): Int = (limit - delegates.size) max 0
+}
+
+/**
+ * Constrains the pool capacity to a bounded range
+ */
+trait BoundedCapacitor {
+ def lowerBound: Int
+ def upperBound: Int
+
+ def capacity(delegates: Seq[ActorRef]): Int = {
+ val current = delegates length
+ val delta = _eval(delegates)
+ val proposed = current + delta
+
+ if (proposed < lowerBound) delta + (lowerBound - proposed)
+ else if (proposed > upperBound) delta - (proposed - upperBound)
+ else delta
+ }
+
+ protected def _eval(delegates: Seq[ActorRef]): Int
+}
+
+/**
+ * Returns the number of delegates required to manage the current message backlogs
+ */
+trait MailboxPressureCapacitor {
+ def pressureThreshold: Int
+ def pressure(delegates: Seq[ActorRef]): Int =
+ delegates count { _.mailboxSize > pressureThreshold }
+}
+
+/**
+ * Returns the number of delegates required to respond to the number of pending futures
+ */
+trait ActiveFuturesPressureCapacitor {
+ def pressure(delegates: Seq[ActorRef]): Int =
+ delegates count { _.senderFuture.isDefined }
+}
+
+/**
+ */
+trait CapacityStrategy {
+ import ActorPool._
+
+ def pressure(delegates: Seq[ActorRef]): Int
+ def filter(pressure: Int, capacity: Int): Int
+
+ protected def _eval(delegates: Seq[ActorRef]): Int = filter(pressure(delegates), delegates.size)
+}
+
+trait FixedCapacityStrategy extends FixedSizeCapacitor
+trait BoundedCapacityStrategy extends CapacityStrategy with BoundedCapacitor
+
+/**
+ * Filters
+ * These traits refine the raw pressure reading into a more appropriate capacity delta.
+ */
+
+/**
+ * The basic filter trait that composes ramp-up and back-off subfiltering.
+ */
+trait Filter {
+ def rampup(pressure: Int, capacity: Int): Int
+ def backoff(pressure: Int, capacity: Int): Int
+
+ // pass through both filters just to be sure any internal counters
+ // are updated consistently. ramping up is always + and backing off
+ // is always - and each should return 0 otherwise...
+ def filter(pressure: Int, capacity: Int): Int =
+ rampup(pressure, capacity) + backoff(pressure, capacity)
+}
+
+trait BasicFilter extends Filter with BasicRampup with BasicBackoff
+
+/**
+ * Filter performs steady incremental growth using only the basic ramp-up subfilter
+ */
+trait BasicNoBackoffFilter extends BasicRampup {
+ def filter(pressure: Int, capacity: Int): Int = rampup(pressure, capacity)
+}
+
+/**
+ * Basic incremental growth as a percentage of the current pool capacity
+ */
+trait BasicRampup {
+ def rampupRate: Double
+
+ def rampup(pressure: Int, capacity: Int): Int =
+ if (pressure < capacity) 0 else math.ceil(rampupRate * capacity) toInt
+}
+
+/**
+ * Basic decrement as a percentage of the current pool capacity
+ */
+trait BasicBackoff {
+ def backoffThreshold: Double
+ def backoffRate: Double
+
+ def backoff(pressure: Int, capacity: Int): Int =
+ if (capacity > 0 && pressure / capacity < backoffThreshold) math.ceil(-1.0 * backoffRate * capacity) toInt else 0
+}
+/**
+ * This filter tracks the average pressure over the lifetime of the pool (or since last reset) and
+ * will begin to reduce capacity once this value drops below the provided threshold. The number of
+ * delegates to cull from the pool is determined by some scaling factor (the backoffRate) multiplied
+ * by the difference in capacity and pressure.
+ */
+trait RunningMeanBackoff {
+ def backoffThreshold: Double
+ def backoffRate: Double
+
+ private var _pressure: Double = 0.0
+ private var _capacity: Double = 0.0
+
+ def backoff(pressure: Int, capacity: Int): Int = {
+ _pressure += pressure
+ _capacity += capacity
+
+ if (capacity > 0 && pressure / capacity < backoffThreshold
+ && _capacity > 0 && _pressure / _capacity < backoffThreshold) //Why does the entire clause need to be true?
+ math.floor(-1.0 * backoffRate * (capacity - pressure)).toInt
+ else 0
+ }
+
+ def backoffReset {
+ _pressure = 0.0
+ _capacity = 0.0
+ }
+}
diff --git a/test/disabled/presentation/akka/src/akka/routing/Routers.scala b/test/disabled/presentation/akka/src/akka/routing/Routers.scala
new file mode 100644
index 0000000000..a4c34c5c67
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/routing/Routers.scala
@@ -0,0 +1,87 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka.routing
+
+import akka.actor.{ UntypedActor, Actor, ActorRef }
+
+/**
+ * A Dispatcher is a trait whose purpose is to route incoming messages to actors.
+ */
+trait Dispatcher { this: Actor =>
+
+ protected def transform(msg: Any): Any = msg
+
+ protected def routes: PartialFunction[Any, ActorRef]
+
+ protected def broadcast(message: Any) {}
+
+ protected def dispatch: Receive = {
+ case Routing.Broadcast(message) =>
+ broadcast(message)
+ case a if routes.isDefinedAt(a) =>
+ if (isSenderDefined) routes(a).forward(transform(a))(someSelf)
+ else routes(a).!(transform(a))(None)
+ }
+
+ def receive = dispatch
+
+ private def isSenderDefined = self.senderFuture.isDefined || self.sender.isDefined
+}
+
+/**
+ * An UntypedDispatcher is an abstract class whose purpose is to route incoming messages to actors.
+ */
+abstract class UntypedDispatcher extends UntypedActor {
+ protected def transform(msg: Any): Any = msg
+
+ protected def route(msg: Any): ActorRef
+
+ protected def broadcast(message: Any) {}
+
+ private def isSenderDefined = self.senderFuture.isDefined || self.sender.isDefined
+
+ @throws(classOf[Exception])
+ def onReceive(msg: Any): Unit = {
+ if (msg.isInstanceOf[Routing.Broadcast]) broadcast(msg.asInstanceOf[Routing.Broadcast].message)
+ else {
+ val r = route(msg)
+ if (r eq null) throw new IllegalStateException("No route for " + msg + " defined!")
+ if (isSenderDefined) r.forward(transform(msg))(someSelf)
+ else r.!(transform(msg))(None)
+ }
+ }
+}
+
+/**
+ * A LoadBalancer is a specialized kind of Dispatcher, that is supplied an InfiniteIterator of targets
+ * to dispatch incoming messages to.
+ */
+trait LoadBalancer extends Dispatcher { self: Actor =>
+ protected def seq: InfiniteIterator[ActorRef]
+
+ protected def routes = {
+ case x if seq.hasNext => seq.next
+ }
+
+ override def broadcast(message: Any) = seq.items.foreach(_ ! message)
+
+ override def isDefinedAt(msg: Any) = seq.exists(_.isDefinedAt(msg))
+}
+
+/**
+ * A UntypedLoadBalancer is a specialized kind of UntypedDispatcher, that is supplied an InfiniteIterator of targets
+ * to dispatch incoming messages to.
+ */
+abstract class UntypedLoadBalancer extends UntypedDispatcher {
+ protected def seq: InfiniteIterator[ActorRef]
+
+ protected def route(msg: Any) =
+ if (seq.hasNext) seq.next
+ else null
+
+ override def broadcast(message: Any) = seq.items.foreach(_ ! message)
+
+ override def isDefinedAt(msg: Any) = seq.exists(_.isDefinedAt(msg))
+}
diff --git a/test/disabled/presentation/akka/src/akka/routing/Routing.scala b/test/disabled/presentation/akka/src/akka/routing/Routing.scala
new file mode 100644
index 0000000000..befc124248
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/routing/Routing.scala
@@ -0,0 +1,64 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka.routing
+
+import akka.actor.{ Actor, ActorRef }
+import akka.actor.Actor._
+
+object Routing {
+
+ sealed trait RoutingMessage
+ case class Broadcast(message: Any) extends RoutingMessage
+
+ type PF[A, B] = PartialFunction[A, B]
+
+ /**
+ * Creates a new PartialFunction whose isDefinedAt is a combination
+ * of the two parameters, and whose apply is first to call filter.apply
+ * and then filtered.apply.
+ */
+ def filter[A, B](filter: PF[A, Unit], filtered: PF[A, B]): PF[A, B] = {
+ case a: A if filtered.isDefinedAt(a) && filter.isDefinedAt(a) =>
+ filter(a)
+ filtered(a)
+ }
+
+ /**
+ * Interceptor is a filter(x,y) where x.isDefinedAt is considered to be always true.
+ */
+ def intercept[A, B](interceptor: (A) => Unit, interceptee: PF[A, B]): PF[A, B] =
+ filter({ case a if a.isInstanceOf[A] => interceptor(a) }, interceptee)
+
+ /**
+ * Creates a LoadBalancer from the thunk-supplied InfiniteIterator.
+ */
+ def loadBalancerActor(actors: => InfiniteIterator[ActorRef]): ActorRef =
+ actorOf(new Actor with LoadBalancer {
+ val seq = actors
+ }).start()
+
+ /**
+ * Creates a Dispatcher given a routing and a message-transforming function.
+ */
+ def dispatcherActor(routing: PF[Any, ActorRef], msgTransformer: (Any) => Any): ActorRef =
+ actorOf(new Actor with Dispatcher {
+ override def transform(msg: Any) = msgTransformer(msg)
+ def routes = routing
+ }).start()
+
+ /**
+ * Creates a Dispatcher given a routing.
+ */
+ def dispatcherActor(routing: PF[Any, ActorRef]): ActorRef = actorOf(new Actor with Dispatcher {
+ def routes = routing
+ }).start()
+
+ /**
+ * Creates an actor that pipes all incoming messages to
+ * both another actor and through the supplied function
+ */
+ def loggerActor(actorToLog: ActorRef, logger: (Any) => Unit): ActorRef =
+ dispatcherActor({ case _ => actorToLog }, logger)
+}
diff --git a/test/disabled/presentation/akka/src/akka/util/Address.scala b/test/disabled/presentation/akka/src/akka/util/Address.scala
new file mode 100644
index 0000000000..65b5c0a834
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/util/Address.scala
@@ -0,0 +1,29 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+package akka.util
+
+import java.net.InetSocketAddress
+
+object Address {
+ def apply(hostname: String, port: Int) = new Address(hostname, port)
+ def apply(inetAddress: InetSocketAddress): Address = inetAddress match {
+ case null => null
+ case inet => new Address(inet.getAddress.getHostAddress, inet.getPort)
+ }
+}
+
+class Address(val hostname: String, val port: Int) {
+ override val hashCode: Int = {
+ var result = HashCode.SEED
+ result = HashCode.hash(result, hostname)
+ result = HashCode.hash(result, port)
+ result
+ }
+
+ override def equals(that: Any): Boolean = {
+ that.isInstanceOf[Address] &&
+ that.asInstanceOf[Address].hostname == hostname &&
+ that.asInstanceOf[Address].port == port
+ }
+}
diff --git a/test/disabled/presentation/akka/src/akka/util/AkkaLoader.scala b/test/disabled/presentation/akka/src/akka/util/AkkaLoader.scala
new file mode 100644
index 0000000000..cb246f2ecf
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/util/AkkaLoader.scala
@@ -0,0 +1,94 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka.util
+
+import akka.config.Config
+import akka.actor.Actor
+
+/*
+ * This class is responsible for booting up a stack of bundles and then shutting them down
+ */
+class AkkaLoader {
+ private val hasBooted = new Switch(false)
+
+ @volatile
+ private var _bundles: Option[Bootable] = None
+
+ def bundles = _bundles;
+
+ /*
+ * Boot initializes the specified bundles
+ */
+ def boot(withBanner: Boolean, b: Bootable): Unit = hasBooted switchOn {
+ if (withBanner) printBanner()
+ println("Starting Akka...")
+ b.onLoad
+ Thread.currentThread.setContextClassLoader(getClass.getClassLoader)
+ _bundles = Some(b)
+ println("Akka started successfully")
+ }
+
+ /*
+ * Shutdown, well, shuts down the bundles used in boot
+ */
+ def shutdown() {
+ hasBooted switchOff {
+ println("Shutting down Akka...")
+ _bundles.foreach(_.onUnload)
+ _bundles = None
+ Actor.shutdownHook.run
+ println("Akka succesfully shut down")
+ }
+ }
+
+ private def printBanner() {
+ println("""
+==============================================================================
+
+ ZZ:
+ ZZZZ
+ ZZZZZZ
+ ZZZ' ZZZ
+ ~7 7ZZ' ZZZ
+ :ZZZ: IZZ' ZZZ
+ ,OZZZZ.~ZZ? ZZZ
+ ZZZZ' 'ZZZ$ ZZZ
+ . $ZZZ ~ZZ$ ZZZ
+ .=Z?. .ZZZO ~ZZ7 OZZ
+ .ZZZZ7..:ZZZ~ 7ZZZ ZZZ~
+ .$ZZZ$Z+.ZZZZ ZZZ: ZZZ$
+ .,ZZZZ?' =ZZO= .OZZ 'ZZZ
+ .$ZZZZ+ .ZZZZ IZZZ ZZZ$
+ .ZZZZZ' .ZZZZ' .ZZZ$ ?ZZZ
+ .ZZZZZZ' .OZZZ? ?ZZZ 'ZZZ$
+ .?ZZZZZZ' .ZZZZ? .ZZZ? 'ZZZO
+ .+ZZZZZZ?' .7ZZZZ' .ZZZZ :ZZZZ
+ .ZZZZZZ$' .?ZZZZZ' .~ZZZZ 'ZZZZ.
+
+
+ NNNNN $NNNN+
+ NNNNN $NNNN+
+ NNNNN $NNNN+
+ NNNNN $NNNN+
+ NNNNN $NNNN+
+ =NNNNNNNNND$ NNNNN DDDDDD: $NNNN+ DDDDDN NDDNNNNNNNN,
+ NNNNNNNNNNNNND NNNNN DNNNNN $NNNN+ 8NNNNN= :NNNNNNNNNNNNNN
+ NNNNN$ DNNNNN NNNNN $NNNNN~ $NNNN+ NNNNNN NNNNN, :NNNNN+
+ ?DN~ NNNNN NNNNN MNNNNN $NNNN+:NNNNN7 $ND =NNNNN
+ DNNNNN NNNNNDNNNN$ $NNNNDNNNNN :DNNNNN
+ ZNDNNNNNNNNND NNNNNNNNNND, $NNNNNNNNNNN DNDNNNNNNNNNN
+ NNNNNNNDDINNNNN NNNNNNNNNNND $NNNNNNNNNNND ONNNNNNND8+NNNNN
+ :NNNND NNNNN NNNNNN DNNNN, $NNNNNO 7NNNND NNNNNO :NNNNN
+ DNNNN NNNNN NNNNN DNNNN $NNNN+ 8NNNNN NNNNN $NNNNN
+ DNNNNO NNNNNN NNNNN NNNNN $NNNN+ NNNNN$ NNNND, ,NNNNND
+ NNNNNNDDNNNNNNNN NNNNN =NNNNN $NNNN+ DNNNN? DNNNNNNDNNNNNNNND
+ NNNNNNNNN NNNN$ NNNNN 8NNNND $NNNN+ NNNNN= ,DNNNNNNND NNNNN$
+
+==============================================================================
+ Running version %s
+==============================================================================
+""".format(Config.VERSION))
+ }
+}
diff --git a/test/disabled/presentation/akka/src/akka/util/Bootable.scala b/test/disabled/presentation/akka/src/akka/util/Bootable.scala
new file mode 100644
index 0000000000..d07643e1ac
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/util/Bootable.scala
@@ -0,0 +1,10 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka.util
+
+trait Bootable {
+ def onLoad() {}
+ def onUnload() {}
+}
diff --git a/test/disabled/presentation/akka/src/akka/util/BoundedBlockingQueue.scala b/test/disabled/presentation/akka/src/akka/util/BoundedBlockingQueue.scala
new file mode 100644
index 0000000000..f8deda746c
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/util/BoundedBlockingQueue.scala
@@ -0,0 +1,326 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka.util
+
+import java.util.concurrent.locks.ReentrantLock
+import java.util.concurrent.{ TimeUnit, BlockingQueue }
+import java.util.{ AbstractQueue, Queue, Collection, Iterator }
+
+class BoundedBlockingQueue[E <: AnyRef](
+ val maxCapacity: Int, private val backing: Queue[E]) extends AbstractQueue[E] with BlockingQueue[E] {
+
+ backing match {
+ case null => throw new IllegalArgumentException("Backing Queue may not be null")
+ case b: BlockingQueue[_] =>
+ require(maxCapacity > 0)
+ require(b.size() == 0)
+ require(b.remainingCapacity >= maxCapacity)
+ case b: Queue[_] =>
+ require(b.size() == 0)
+ require(maxCapacity > 0)
+ }
+
+ protected val lock = new ReentrantLock(false)
+
+ private val notEmpty = lock.newCondition()
+ private val notFull = lock.newCondition()
+
+ def put(e: E): Unit = { //Blocks until not full
+ if (e eq null) throw new NullPointerException
+ lock.lock()
+ try {
+ while (backing.size() == maxCapacity)
+ notFull.await()
+ require(backing.offer(e))
+ notEmpty.signal()
+ } finally {
+ lock.unlock()
+ }
+ }
+
+ def take(): E = { //Blocks until not empty
+ lock.lockInterruptibly()
+ try {
+ while (backing.size() == 0)
+ notEmpty.await()
+ val e = backing.poll()
+ require(e ne null)
+ notFull.signal()
+ e
+ } finally {
+ lock.unlock()
+ }
+ }
+
+ def offer(e: E): Boolean = { //Tries to do it immediately, if fail return false
+ if (e eq null) throw new NullPointerException
+ lock.lock()
+ try {
+ if (backing.size() == maxCapacity) false
+ else {
+ require(backing.offer(e)) //Should never fail
+ notEmpty.signal()
+ true
+ }
+ } finally {
+ lock.unlock()
+ }
+ }
+
+ def offer(e: E, timeout: Long, unit: TimeUnit): Boolean = { //Tries to do it within the timeout, return false if fail
+ if (e eq null) throw new NullPointerException
+ var nanos = unit.toNanos(timeout)
+ lock.lockInterruptibly()
+ try {
+ while (backing.size() == maxCapacity) {
+ if (nanos <= 0)
+ return false
+ else
+ nanos = notFull.awaitNanos(nanos)
+ }
+ require(backing.offer(e)) //Should never fail
+ notEmpty.signal()
+ true
+ } finally {
+ lock.unlock()
+ }
+ }
+
+ def poll(timeout: Long, unit: TimeUnit): E = { //Tries to do it within the timeout, returns null if fail
+ var nanos = unit.toNanos(timeout)
+ lock.lockInterruptibly()
+ try {
+ var result: E = null.asInstanceOf[E]
+ var hasResult = false
+ while (!hasResult) {
+ hasResult = backing.poll() match {
+ case null if nanos <= 0 =>
+ result = null.asInstanceOf[E]
+ true
+ case null =>
+ try {
+ nanos = notEmpty.awaitNanos(nanos)
+ } catch {
+ case ie: InterruptedException =>
+ notEmpty.signal()
+ throw ie
+ }
+ false
+ case e =>
+ notFull.signal()
+ result = e
+ true
+ }
+ }
+ result
+ } finally {
+ lock.unlock()
+ }
+ }
+
+ def poll(): E = { //Tries to remove the head of the queue immediately, if fail, return null
+ lock.lock()
+ try {
+ backing.poll() match {
+ case null => null.asInstanceOf[E]
+ case e =>
+ notFull.signal()
+ e
+ }
+ } finally {
+ lock.unlock
+ }
+ }
+
+ override def remove(e: AnyRef): Boolean = { //Tries to do it immediately, if fail, return false
+ if (e eq null) throw new NullPointerException
+ lock.lock()
+ try {
+ if (backing remove e) {
+ notFull.signal()
+ true
+ } else false
+ } finally {
+ lock.unlock()
+ }
+ }
+
+ override def contains(e: AnyRef): Boolean = {
+ if (e eq null) throw new NullPointerException
+ lock.lock()
+ try {
+ backing contains e
+ } finally {
+ lock.unlock()
+ }
+ }
+
+ override def clear(): Unit = {
+ lock.lock()
+ try {
+ backing.clear
+ } finally {
+ lock.unlock()
+ }
+ }
+
+ def remainingCapacity(): Int = {
+ lock.lock()
+ try {
+ maxCapacity - backing.size()
+ } finally {
+ lock.unlock()
+ }
+ }
+
+ def size(): Int = {
+ lock.lock()
+ try {
+ backing.size()
+ } finally {
+ lock.unlock()
+ }
+ }
+
+ def peek(): E = {
+ lock.lock()
+ try {
+ backing.peek()
+ } finally {
+ lock.unlock()
+ }
+ }
+
+ def drainTo(c: Collection[_ >: E]): Int = drainTo(c, Int.MaxValue)
+
+ def drainTo(c: Collection[_ >: E], maxElements: Int): Int = {
+ if (c eq null) throw new NullPointerException
+ if (c eq this) throw new IllegalArgumentException
+ if (maxElements <= 0) 0
+ else {
+ lock.lock()
+ try {
+ var n = 0
+ var e: E = null.asInstanceOf[E]
+ while (n < maxElements) {
+ backing.poll() match {
+ case null => return n
+ case e =>
+ c add e
+ n += 1
+ }
+ }
+ n
+ } finally {
+ lock.unlock()
+ }
+ }
+ }
+
+ override def containsAll(c: Collection[_]): Boolean = {
+ lock.lock()
+ try {
+ backing containsAll c
+ } finally {
+ lock.unlock()
+ }
+ }
+
+ override def removeAll(c: Collection[_]): Boolean = {
+ lock.lock()
+ try {
+ if (backing.removeAll(c)) {
+ val sz = backing.size()
+ if (sz < maxCapacity) notFull.signal()
+ if (sz > 0) notEmpty.signal() //FIXME needed?
+ true
+ } else false
+ } finally {
+ lock.unlock()
+ }
+ }
+
+ override def retainAll(c: Collection[_]): Boolean = {
+ lock.lock()
+ try {
+ if (backing.retainAll(c)) {
+ val sz = backing.size()
+ if (sz < maxCapacity) notFull.signal() //FIXME needed?
+ if (sz > 0) notEmpty.signal()
+ true
+ } else false
+ } finally {
+ lock.unlock()
+ }
+ }
+
+ def iterator(): Iterator[E] = {
+ lock.lock
+ try {
+ val elements = backing.toArray
+ new Iterator[E] {
+ var at = 0
+ var last = -1
+
+ def hasNext(): Boolean = at < elements.length
+
+ def next(): E = {
+ if (at >= elements.length) throw new NoSuchElementException
+ last = at
+ at += 1
+ elements(last).asInstanceOf[E]
+ }
+
+ def remove(): Unit = {
+ if (last < 0) throw new IllegalStateException
+ val target = elements(last)
+ last = -1 //To avoid 2 subsequent removes without a next in between
+ lock.lock()
+ try {
+ val i = backing.iterator()
+ while (i.hasNext) {
+ if (i.next eq target) {
+ i.remove()
+ notFull.signal()
+ return ()
+ }
+ }
+ } finally {
+ lock.unlock()
+ }
+ }
+ }
+ } finally {
+ lock.unlock
+ }
+ }
+
+ override def toArray(): Array[AnyRef] = {
+ lock.lock()
+ try {
+ backing.toArray
+ } finally {
+ lock.unlock()
+ }
+ }
+
+ override def isEmpty(): Boolean = {
+ lock.lock()
+ try {
+ backing.isEmpty()
+ } finally {
+ lock.unlock()
+ }
+ }
+
+ override def toArray[X](a: Array[X with AnyRef]) = {
+ lock.lock()
+ try {
+ backing.toArray[X](a)
+ } finally {
+ lock.unlock()
+ }
+ }
+}
diff --git a/test/disabled/presentation/akka/src/akka/util/Crypt.scala b/test/disabled/presentation/akka/src/akka/util/Crypt.scala
new file mode 100644
index 0000000000..3ce2d559a2
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/util/Crypt.scala
@@ -0,0 +1,44 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka.util
+
+import java.security.{ MessageDigest, SecureRandom }
+
+/**
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+object Crypt {
+ val hex = "0123456789ABCDEF"
+ val lineSeparator = System.getProperty("line.separator")
+
+ lazy val random = SecureRandom.getInstance("SHA1PRNG")
+
+ def md5(text: String): String = md5(unifyLineSeparator(text).getBytes("ASCII"))
+
+ def md5(bytes: Array[Byte]): String = digest(bytes, MessageDigest.getInstance("MD5"))
+
+ def sha1(text: String): String = sha1(unifyLineSeparator(text).getBytes("ASCII"))
+
+ def sha1(bytes: Array[Byte]): String = digest(bytes, MessageDigest.getInstance("SHA1"))
+
+ def generateSecureCookie: String = {
+ val bytes = Array.fill(32)(0.byteValue)
+ random.nextBytes(bytes)
+ sha1(bytes)
+ }
+
+ def digest(bytes: Array[Byte], md: MessageDigest): String = {
+ md.update(bytes)
+ hexify(md.digest)
+ }
+
+ def hexify(bytes: Array[Byte]): String = {
+ val builder = new StringBuilder
+ bytes.foreach { byte => builder.append(hex.charAt((byte & 0xF) >> 4)).append(hex.charAt(byte & 0xF)) }
+ builder.toString
+ }
+
+ private def unifyLineSeparator(text: String): String = text.replaceAll(lineSeparator, "\n")
+}
diff --git a/test/disabled/presentation/akka/src/akka/util/Duration.scala b/test/disabled/presentation/akka/src/akka/util/Duration.scala
new file mode 100644
index 0000000000..316cb86689
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/util/Duration.scala
@@ -0,0 +1,437 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka.util
+
+import java.util.concurrent.TimeUnit
+import TimeUnit._
+import java.lang.{ Long => JLong, Double => JDouble }
+
+object Duration {
+ def apply(length: Long, unit: TimeUnit): Duration = new FiniteDuration(length, unit)
+ def apply(length: Double, unit: TimeUnit): Duration = fromNanos(unit.toNanos(1) * length)
+ def apply(length: Long, unit: String): Duration = new FiniteDuration(length, timeUnit(unit))
+
+ def fromNanos(nanos: Long): Duration = {
+ if (nanos % 86400000000000L == 0) {
+ Duration(nanos / 86400000000000L, DAYS)
+ } else if (nanos % 3600000000000L == 0) {
+ Duration(nanos / 3600000000000L, HOURS)
+ } else if (nanos % 60000000000L == 0) {
+ Duration(nanos / 60000000000L, MINUTES)
+ } else if (nanos % 1000000000L == 0) {
+ Duration(nanos / 1000000000L, SECONDS)
+ } else if (nanos % 1000000L == 0) {
+ Duration(nanos / 1000000L, MILLISECONDS)
+ } else if (nanos % 1000L == 0) {
+ Duration(nanos / 1000L, MICROSECONDS)
+ } else {
+ Duration(nanos, NANOSECONDS)
+ }
+ }
+
+ def fromNanos(nanos: Double): Duration = fromNanos((nanos + 0.5).asInstanceOf[Long])
+
+ /**
+ * Construct a Duration by parsing a String. In case of a format error, a
+ * RuntimeException is thrown. See `unapply(String)` for more information.
+ */
+ def apply(s: String): Duration = unapply(s) getOrElse sys.error("format error")
+
+ /**
+ * Deconstruct a Duration into length and unit if it is finite.
+ */
+ def unapply(d: Duration): Option[(Long, TimeUnit)] = {
+ if (d.finite_?) {
+ Some((d.length, d.unit))
+ } else {
+ None
+ }
+ }
+
+ private val RE = ("""^\s*(\d+(?:\.\d+)?)\s*""" + // length part
+ "(?:" + // units are distinguished in separate match groups
+ "(d|day|days)|" +
+ "(h|hour|hours)|" +
+ "(min|minute|minutes)|" +
+ "(s|sec|second|seconds)|" +
+ "(ms|milli|millis|millisecond|milliseconds)|" +
+ "(µs|micro|micros|microsecond|microseconds)|" +
+ "(ns|nano|nanos|nanosecond|nanoseconds)" +
+ """)\s*$""").r // close the non-capturing group
+ private val REinf = """^\s*Inf\s*$""".r
+ private val REminf = """^\s*(?:-\s*|Minus)Inf\s*""".r
+
+ /**
+ * Parse String, return None if no match. Format is `"<length><unit>"`, where
+ * whitespace is allowed before, between and after the parts. Infinities are
+ * designated by `"Inf"` and `"-Inf"` or `"MinusInf"`.
+ */
+ def unapply(s: String): Option[Duration] = s match {
+ case RE(length, d, h, m, s, ms, mus, ns) =>
+ if (d ne null) Some(Duration(JDouble.parseDouble(length), DAYS)) else if (h ne null) Some(Duration(JDouble.parseDouble(length), HOURS)) else if (m ne null) Some(Duration(JDouble.parseDouble(length), MINUTES)) else if (s ne null) Some(Duration(JDouble.parseDouble(length), SECONDS)) else if (ms ne null) Some(Duration(JDouble.parseDouble(length), MILLISECONDS)) else if (mus ne null) Some(Duration(JDouble.parseDouble(length), MICROSECONDS)) else if (ns ne null) Some(Duration(JDouble.parseDouble(length), NANOSECONDS)) else
+ sys.error("made some error in regex (should not be possible)")
+ case REinf() => Some(Inf)
+ case REminf() => Some(MinusInf)
+ case _ => None
+ }
+
+ /**
+ * Parse TimeUnit from string representation.
+ */
+ def timeUnit(unit: String) = unit.toLowerCase match {
+ case "d" | "day" | "days" => DAYS
+ case "h" | "hour" | "hours" => HOURS
+ case "min" | "minute" | "minutes" => MINUTES
+ case "s" | "sec" | "second" | "seconds" => SECONDS
+ case "ms" | "milli" | "millis" | "millisecond" | "milliseconds" => MILLISECONDS
+ case "µs" | "micro" | "micros" | "microsecond" | "microseconds" => MICROSECONDS
+ case "ns" | "nano" | "nanos" | "nanosecond" | "nanoseconds" => NANOSECONDS
+ }
+
+ val Zero: Duration = new FiniteDuration(0, NANOSECONDS)
+
+ trait Infinite {
+ this: Duration =>
+
+ override def equals(other: Any) = false
+
+ def +(other: Duration): Duration =
+ other match {
+ case _: this.type => this
+ case _: Infinite => throw new IllegalArgumentException("illegal addition of infinities")
+ case _ => this
+ }
+ def -(other: Duration): Duration =
+ other match {
+ case _: this.type => throw new IllegalArgumentException("illegal subtraction of infinities")
+ case _ => this
+ }
+ def *(factor: Double): Duration = this
+ def /(factor: Double): Duration = this
+ def /(other: Duration): Double =
+ other match {
+ case _: Infinite => throw new IllegalArgumentException("illegal division of infinities")
+ // maybe questionable but pragmatic: Inf / 0 => Inf
+ case x => Double.PositiveInfinity * (if ((this > Zero) ^ (other >= Zero)) -1 else 1)
+ }
+
+ def finite_? = false
+
+ def length: Long = throw new IllegalArgumentException("length not allowed on infinite Durations")
+ def unit: TimeUnit = throw new IllegalArgumentException("unit not allowed on infinite Durations")
+ def toNanos: Long = throw new IllegalArgumentException("toNanos not allowed on infinite Durations")
+ def toMicros: Long = throw new IllegalArgumentException("toMicros not allowed on infinite Durations")
+ def toMillis: Long = throw new IllegalArgumentException("toMillis not allowed on infinite Durations")
+ def toSeconds: Long = throw new IllegalArgumentException("toSeconds not allowed on infinite Durations")
+ def toMinutes: Long = throw new IllegalArgumentException("toMinutes not allowed on infinite Durations")
+ def toHours: Long = throw new IllegalArgumentException("toHours not allowed on infinite Durations")
+ def toDays: Long = throw new IllegalArgumentException("toDays not allowed on infinite Durations")
+ def toUnit(unit: TimeUnit): Double = throw new IllegalArgumentException("toUnit not allowed on infinite Durations")
+
+ def printHMS = toString
+ }
+
+ /**
+ * Infinite duration: greater than any other and not equal to any other,
+ * including itself.
+ */
+ val Inf: Duration = new Duration with Infinite {
+ override def toString = "Duration.Inf"
+ def >(other: Duration) = true
+ def >=(other: Duration) = true
+ def <(other: Duration) = false
+ def <=(other: Duration) = false
+ def unary_- : Duration = MinusInf
+ }
+
+ /**
+ * Infinite negative duration: lesser than any other and not equal to any other,
+ * including itself.
+ */
+ val MinusInf: Duration = new Duration with Infinite {
+ override def toString = "Duration.MinusInf"
+ def >(other: Duration) = false
+ def >=(other: Duration) = false
+ def <(other: Duration) = true
+ def <=(other: Duration) = true
+ def unary_- : Duration = Inf
+ }
+
+ // Java Factories
+ def create(length: Long, unit: TimeUnit): Duration = apply(length, unit)
+ def create(length: Double, unit: TimeUnit): Duration = apply(length, unit)
+ def create(length: Long, unit: String): Duration = apply(length, unit)
+ def parse(s: String): Duration = unapply(s).get
+}
+
+/**
+ * Utility for working with java.util.concurrent.TimeUnit durations.
+ *
+ * <p/>
+ * Examples of usage from Java:
+ * <pre>
+ * import akka.util.FiniteDuration;
+ * import java.util.concurrent.TimeUnit;
+ *
+ * Duration duration = new FiniteDuration(100, MILLISECONDS);
+ * Duration duration = new FiniteDuration(5, "seconds");
+ *
+ * duration.toNanos();
+ * </pre>
+ *
+ * <p/>
+ * Examples of usage from Scala:
+ * <pre>
+ * import akka.util.Duration
+ * import java.util.concurrent.TimeUnit
+ *
+ * val duration = Duration(100, MILLISECONDS)
+ * val duration = Duration(100, "millis")
+ *
+ * duration.toNanos
+ * duration < 1.second
+ * duration <= Duration.Inf
+ * </pre>
+ *
+ * <p/>
+ * Implicits are also provided for Int, Long and Double. Example usage:
+ * <pre>
+ * import akka.util.duration._
+ *
+ * val duration = 100 millis
+ * </pre>
+ *
+ * Extractors, parsing and arithmetic are also included:
+ * <pre>
+ * val d = Duration("1.2 µs")
+ * val Duration(length, unit) = 5 millis
+ * val d2 = d * 2.5
+ * val d3 = d2 + 1.millisecond
+ * </pre>
+ */
+abstract class Duration {
+ def length: Long
+ def unit: TimeUnit
+ def toNanos: Long
+ def toMicros: Long
+ def toMillis: Long
+ def toSeconds: Long
+ def toMinutes: Long
+ def toHours: Long
+ def toDays: Long
+ def toUnit(unit: TimeUnit): Double
+ def printHMS: String
+ def <(other: Duration): Boolean
+ def <=(other: Duration): Boolean
+ def >(other: Duration): Boolean
+ def >=(other: Duration): Boolean
+ def +(other: Duration): Duration
+ def -(other: Duration): Duration
+ def *(factor: Double): Duration
+ def /(factor: Double): Duration
+ def /(other: Duration): Double
+ def unary_- : Duration
+ def finite_? : Boolean
+
+ // Java API
+ def lt(other: Duration) = this < other
+ def lteq(other: Duration) = this <= other
+ def gt(other: Duration) = this > other
+ def gteq(other: Duration) = this >= other
+ def plus(other: Duration) = this + other
+ def minus(other: Duration) = this - other
+ def mul(factor: Double) = this * factor
+ def div(factor: Double) = this / factor
+ def div(other: Duration) = this / other
+ def neg() = -this
+ def isFinite() = finite_?
+}
+
+class FiniteDuration(val length: Long, val unit: TimeUnit) extends Duration {
+ import Duration._
+
+ def this(length: Long, unit: String) = this(length, Duration.timeUnit(unit))
+
+ def toNanos = unit.toNanos(length)
+ def toMicros = unit.toMicros(length)
+ def toMillis = unit.toMillis(length)
+ def toSeconds = unit.toSeconds(length)
+ def toMinutes = unit.toMinutes(length)
+ def toHours = unit.toHours(length)
+ def toDays = unit.toDays(length)
+ def toUnit(u: TimeUnit) = long2double(toNanos) / NANOSECONDS.convert(1, u)
+
+ override def toString = this match {
+ case Duration(1, DAYS) => "1 day"
+ case Duration(x, DAYS) => x + " days"
+ case Duration(1, HOURS) => "1 hour"
+ case Duration(x, HOURS) => x + " hours"
+ case Duration(1, MINUTES) => "1 minute"
+ case Duration(x, MINUTES) => x + " minutes"
+ case Duration(1, SECONDS) => "1 second"
+ case Duration(x, SECONDS) => x + " seconds"
+ case Duration(1, MILLISECONDS) => "1 millisecond"
+ case Duration(x, MILLISECONDS) => x + " milliseconds"
+ case Duration(1, MICROSECONDS) => "1 microsecond"
+ case Duration(x, MICROSECONDS) => x + " microseconds"
+ case Duration(1, NANOSECONDS) => "1 nanosecond"
+ case Duration(x, NANOSECONDS) => x + " nanoseconds"
+ }
+
+ def printHMS = "%02d:%02d:%06.3f".format(toHours, toMinutes % 60, toMillis / 1000. % 60)
+
+ def <(other: Duration) = {
+ if (other.finite_?) {
+ toNanos < other.asInstanceOf[FiniteDuration].toNanos
+ } else {
+ other > this
+ }
+ }
+
+ def <=(other: Duration) = {
+ if (other.finite_?) {
+ toNanos <= other.asInstanceOf[FiniteDuration].toNanos
+ } else {
+ other >= this
+ }
+ }
+
+ def >(other: Duration) = {
+ if (other.finite_?) {
+ toNanos > other.asInstanceOf[FiniteDuration].toNanos
+ } else {
+ other < this
+ }
+ }
+
+ def >=(other: Duration) = {
+ if (other.finite_?) {
+ toNanos >= other.asInstanceOf[FiniteDuration].toNanos
+ } else {
+ other <= this
+ }
+ }
+
+ def +(other: Duration) = {
+ if (!other.finite_?) {
+ other
+ } else {
+ val nanos = toNanos + other.asInstanceOf[FiniteDuration].toNanos
+ fromNanos(nanos)
+ }
+ }
+
+ def -(other: Duration) = {
+ if (!other.finite_?) {
+ other
+ } else {
+ val nanos = toNanos - other.asInstanceOf[FiniteDuration].toNanos
+ fromNanos(nanos)
+ }
+ }
+
+ def *(factor: Double) = fromNanos(long2double(toNanos) * factor)
+
+ def /(factor: Double) = fromNanos(long2double(toNanos) / factor)
+
+ def /(other: Duration) = if (other.finite_?) long2double(toNanos) / other.toNanos else 0
+
+ def unary_- = Duration(-length, unit)
+
+ def finite_? = true
+
+ override def equals(other: Any) =
+ other.isInstanceOf[FiniteDuration] &&
+ toNanos == other.asInstanceOf[FiniteDuration].toNanos
+
+ override def hashCode = toNanos.asInstanceOf[Int]
+}
+
+class DurationInt(n: Int) {
+ def nanoseconds = Duration(n, NANOSECONDS)
+ def nanos = Duration(n, NANOSECONDS)
+ def nanosecond = Duration(n, NANOSECONDS)
+ def nano = Duration(n, NANOSECONDS)
+
+ def microseconds = Duration(n, MICROSECONDS)
+ def micros = Duration(n, MICROSECONDS)
+ def microsecond = Duration(n, MICROSECONDS)
+ def micro = Duration(n, MICROSECONDS)
+
+ def milliseconds = Duration(n, MILLISECONDS)
+ def millis = Duration(n, MILLISECONDS)
+ def millisecond = Duration(n, MILLISECONDS)
+ def milli = Duration(n, MILLISECONDS)
+
+ def seconds = Duration(n, SECONDS)
+ def second = Duration(n, SECONDS)
+
+ def minutes = Duration(n, MINUTES)
+ def minute = Duration(n, MINUTES)
+
+ def hours = Duration(n, HOURS)
+ def hour = Duration(n, HOURS)
+
+ def days = Duration(n, DAYS)
+ def day = Duration(n, DAYS)
+}
+
+class DurationLong(n: Long) {
+ def nanoseconds = Duration(n, NANOSECONDS)
+ def nanos = Duration(n, NANOSECONDS)
+ def nanosecond = Duration(n, NANOSECONDS)
+ def nano = Duration(n, NANOSECONDS)
+
+ def microseconds = Duration(n, MICROSECONDS)
+ def micros = Duration(n, MICROSECONDS)
+ def microsecond = Duration(n, MICROSECONDS)
+ def micro = Duration(n, MICROSECONDS)
+
+ def milliseconds = Duration(n, MILLISECONDS)
+ def millis = Duration(n, MILLISECONDS)
+ def millisecond = Duration(n, MILLISECONDS)
+ def milli = Duration(n, MILLISECONDS)
+
+ def seconds = Duration(n, SECONDS)
+ def second = Duration(n, SECONDS)
+
+ def minutes = Duration(n, MINUTES)
+ def minute = Duration(n, MINUTES)
+
+ def hours = Duration(n, HOURS)
+ def hour = Duration(n, HOURS)
+
+ def days = Duration(n, DAYS)
+ def day = Duration(n, DAYS)
+}
+
+class DurationDouble(d: Double) {
+ def nanoseconds = Duration(d, NANOSECONDS)
+ def nanos = Duration(d, NANOSECONDS)
+ def nanosecond = Duration(d, NANOSECONDS)
+ def nano = Duration(d, NANOSECONDS)
+
+ def microseconds = Duration(d, MICROSECONDS)
+ def micros = Duration(d, MICROSECONDS)
+ def microsecond = Duration(d, MICROSECONDS)
+ def micro = Duration(d, MICROSECONDS)
+
+ def milliseconds = Duration(d, MILLISECONDS)
+ def millis = Duration(d, MILLISECONDS)
+ def millisecond = Duration(d, MILLISECONDS)
+ def milli = Duration(d, MILLISECONDS)
+
+ def seconds = Duration(d, SECONDS)
+ def second = Duration(d, SECONDS)
+
+ def minutes = Duration(d, MINUTES)
+ def minute = Duration(d, MINUTES)
+
+ def hours = Duration(d, HOURS)
+ def hour = Duration(d, HOURS)
+
+ def days = Duration(d, DAYS)
+ def day = Duration(d, DAYS)
+}
diff --git a/test/disabled/presentation/akka/src/akka/util/HashCode.scala b/test/disabled/presentation/akka/src/akka/util/HashCode.scala
new file mode 100644
index 0000000000..d015f12f5d
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/util/HashCode.scala
@@ -0,0 +1,57 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka.util
+
+import java.lang.reflect.{ Array => JArray }
+import java.lang.{ Float => JFloat, Double => JDouble }
+
+/**
+ * Set of methods which allow easy implementation of <code>hashCode</code>.
+ *
+ * Example:
+ * <pre>
+ * override def hashCode: Int = {
+ * var result = HashCode.SEED
+ * //collect the contributions of various fields
+ * result = HashCode.hash(result, fPrimitive)
+ * result = HashCode.hash(result, fObject)
+ * result = HashCode.hash(result, fArray)
+ * result
+ * }
+ * </pre>
+ *
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+object HashCode {
+ val SEED = 23
+
+ def hash(seed: Int, any: Any): Int = any match {
+ case value: Boolean => hash(seed, value)
+ case value: Char => hash(seed, value)
+ case value: Short => hash(seed, value)
+ case value: Int => hash(seed, value)
+ case value: Long => hash(seed, value)
+ case value: Float => hash(seed, value)
+ case value: Double => hash(seed, value)
+ case value: Byte => hash(seed, value)
+ case value: AnyRef =>
+ var result = seed
+ if (value eq null) result = hash(result, 0)
+ else if (!isArray(value)) result = hash(result, value.hashCode())
+ else for (id ← 0 until JArray.getLength(value)) result = hash(result, JArray.get(value, id)) // is an array
+ result
+ }
+ def hash(seed: Int, value: Boolean): Int = firstTerm(seed) + (if (value) 1 else 0)
+ def hash(seed: Int, value: Char): Int = firstTerm(seed) + value.asInstanceOf[Int]
+ def hash(seed: Int, value: Int): Int = firstTerm(seed) + value
+ def hash(seed: Int, value: Long): Int = firstTerm(seed) + (value ^ (value >>> 32)).asInstanceOf[Int]
+ def hash(seed: Int, value: Float): Int = hash(seed, JFloat.floatToIntBits(value))
+ def hash(seed: Int, value: Double): Int = hash(seed, JDouble.doubleToLongBits(value))
+
+ private def firstTerm(seed: Int): Int = PRIME * seed
+ private def isArray(anyRef: AnyRef): Boolean = anyRef.getClass.isArray
+ private val PRIME = 37
+}
+
diff --git a/test/disabled/presentation/akka/src/akka/util/Helpers.scala b/test/disabled/presentation/akka/src/akka/util/Helpers.scala
new file mode 100644
index 0000000000..48477426c9
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/util/Helpers.scala
@@ -0,0 +1,99 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka.util
+
+/**
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+object Helpers {
+
+ implicit def null2Option[T](t: T): Option[T] = Option(t)
+
+ def intToBytes(value: Int): Array[Byte] = {
+ val bytes = new Array[Byte](4)
+ bytes(0) = (value >>> 24).asInstanceOf[Byte]
+ bytes(1) = (value >>> 16).asInstanceOf[Byte]
+ bytes(2) = (value >>> 8).asInstanceOf[Byte]
+ bytes(3) = value.asInstanceOf[Byte]
+ bytes
+ }
+
+ def bytesToInt(bytes: Array[Byte], offset: Int): Int = {
+ (0 until 4).foldLeft(0)((value, index) => value + ((bytes(index + offset) & 0x000000FF) << ((4 - 1 - index) * 8)))
+ }
+
+ /**
+ * Convenience helper to cast the given Option of Any to an Option of the given type. Will throw a ClassCastException
+ * if the actual type is not assignable from the given one.
+ */
+ def narrow[T](o: Option[Any]): Option[T] = {
+ require((o ne null), "Option to be narrowed must not be null!")
+ o.asInstanceOf[Option[T]]
+ }
+
+ /**
+ * Convenience helper to cast the given Option of Any to an Option of the given type. Will swallow a possible
+ * ClassCastException and return None in that case.
+ */
+ def narrowSilently[T: Manifest](o: Option[Any]): Option[T] =
+ try {
+ narrow(o)
+ } catch {
+ case e: ClassCastException =>
+ None
+ }
+
+ /**
+ * Reference that can hold either a typed value or an exception.
+ *
+ * Usage:
+ * <pre>
+ * scala> ResultOrError(1)
+ * res0: ResultOrError[Int] = ResultOrError@a96606
+ *
+ * scala> res0()
+ * res1: Int = 1
+ *
+ * scala> res0() = 3
+ *
+ * scala> res0()
+ * res3: Int = 3
+ *
+ * scala> res0() = { println("Hello world"); 3}
+ * Hello world
+ *
+ * scala> res0()
+ * res5: Int = 3
+ *
+ * scala> res0() = error("Lets see what happens here...")
+ *
+ * scala> res0()
+ * java.lang.RuntimeException: Lets see what happens here...
+ * at ResultOrError.apply(Helper.scala:11)
+ * at .<init>(<console>:6)
+ * at .<clinit>(<console>)
+ * at Re...
+ * </pre>
+ */
+ class ResultOrError[R](result: R) {
+ private[this] var contents: Either[R, Throwable] = Left(result)
+
+ def update(value: => R) = {
+ contents = try {
+ Left(value)
+ } catch {
+ case (error: Throwable) => Right(error)
+ }
+ }
+
+ def apply() = contents match {
+ case Left(result) => result
+ case Right(error) => throw error.fillInStackTrace
+ }
+ }
+ object ResultOrError {
+ def apply[R](result: R) = new ResultOrError(result)
+ }
+}
diff --git a/test/disabled/presentation/akka/src/akka/util/ListenerManagement.scala b/test/disabled/presentation/akka/src/akka/util/ListenerManagement.scala
new file mode 100644
index 0000000000..863e905d59
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/util/ListenerManagement.scala
@@ -0,0 +1,81 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka.util
+
+import java.util.concurrent.ConcurrentSkipListSet
+import akka.actor.{ ActorInitializationException, ActorRef }
+
+/**
+ * A manager for listener actors. Intended for mixin by observables.
+ *
+ * @author Martin Krasser
+ */
+trait ListenerManagement {
+
+ private val listeners = new ConcurrentSkipListSet[ActorRef]
+
+ /**
+ * Specifies whether listeners should be started when added and stopped when removed or not
+ */
+ protected def manageLifeCycleOfListeners: Boolean = true
+
+ /**
+ * Adds the <code>listener</code> this registry's listener list.
+ * The <code>listener</code> is started by this method if manageLifeCycleOfListeners yields true.
+ */
+ def addListener(listener: ActorRef) {
+ if (manageLifeCycleOfListeners) listener.start()
+ listeners add listener
+ }
+
+ /**
+ * Removes the <code>listener</code> this registry's listener list.
+ * The <code>listener</code> is stopped by this method if manageLifeCycleOfListeners yields true.
+ */
+ def removeListener(listener: ActorRef) {
+ listeners remove listener
+ if (manageLifeCycleOfListeners) listener.stop()
+ }
+
+ /*
+ * Returns whether there are any listeners currently
+ */
+ def hasListeners: Boolean = !listeners.isEmpty
+
+ /**
+ * Checks if a specific listener is registered. ActorInitializationException leads to removal of listener if that
+ * one isShutdown.
+ */
+ def hasListener(listener: ActorRef): Boolean = listeners.contains(listener)
+
+ protected[akka] def notifyListeners(message: => Any) {
+ if (hasListeners) {
+ val msg = message
+ val iterator = listeners.iterator
+ while (iterator.hasNext) {
+ val listener = iterator.next
+ // Uncomment if those exceptions are so frequent as to bottleneck
+ // if (listener.isShutdown) iterator.remove() else
+ try {
+ listener ! msg
+ } catch {
+ case e: ActorInitializationException =>
+ if (listener.isShutdown) iterator.remove()
+ }
+ }
+ }
+ }
+
+ /**
+ * Execute <code>f</code> with each listener as argument. ActorInitializationException is not handled.
+ */
+ protected[akka] def foreachListener(f: (ActorRef) => Unit) {
+ val iterator = listeners.iterator
+ while (iterator.hasNext) {
+ val listener = iterator.next
+ if (listener.isRunning) f(listener)
+ }
+ }
+}
diff --git a/test/disabled/presentation/akka/src/akka/util/LockUtil.scala b/test/disabled/presentation/akka/src/akka/util/LockUtil.scala
new file mode 100644
index 0000000000..4aaefadc4a
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/util/LockUtil.scala
@@ -0,0 +1,197 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka.util
+
+import java.util.concurrent.locks.{ ReentrantReadWriteLock, ReentrantLock }
+import java.util.concurrent.atomic.{ AtomicBoolean }
+import akka.event.EventHandler
+
+/**
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+final class ReentrantGuard {
+ val lock = new ReentrantLock
+
+ final def withGuard[T](body: => T): T = {
+ lock.lock
+ try {
+ body
+ } finally {
+ lock.unlock
+ }
+ }
+
+ final def tryWithGuard[T](body: => T): T = {
+ while (!lock.tryLock) { Thread.sleep(10) } // wait on the monitor to be unlocked
+ try {
+ body
+ } finally {
+ lock.unlock
+ }
+ }
+}
+
+/**
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+class ReadWriteGuard {
+ private val rwl = new ReentrantReadWriteLock
+ val readLock = rwl.readLock
+ val writeLock = rwl.writeLock
+
+ def withWriteGuard[T](body: => T): T = {
+ writeLock.lock
+ try {
+ body
+ } finally {
+ writeLock.unlock
+ }
+ }
+
+ def withReadGuard[T](body: => T): T = {
+ readLock.lock
+ try {
+ body
+ } finally {
+ readLock.unlock
+ }
+ }
+}
+
+/**
+ * A very simple lock that uses CCAS (Compare Compare-And-Swap)
+ * Does not keep track of the owner and isn't Reentrant, so don't nest and try to stick to the if*-methods
+ */
+class SimpleLock {
+ val acquired = new AtomicBoolean(false)
+
+ def ifPossible(perform: () => Unit): Boolean = {
+ if (tryLock()) {
+ try {
+ perform
+ } finally {
+ unlock()
+ }
+ true
+ } else false
+ }
+
+ def ifPossibleYield[T](perform: () => T): Option[T] = {
+ if (tryLock()) {
+ try {
+ Some(perform())
+ } finally {
+ unlock()
+ }
+ } else None
+ }
+
+ def ifPossibleApply[T, R](value: T)(function: (T) => R): Option[R] = {
+ if (tryLock()) {
+ try {
+ Some(function(value))
+ } finally {
+ unlock()
+ }
+ } else None
+ }
+
+ def tryLock() = {
+ if (acquired.get) false
+ else acquired.compareAndSet(false, true)
+ }
+
+ def tryUnlock() = {
+ acquired.compareAndSet(true, false)
+ }
+
+ def locked = acquired.get
+
+ def unlock() {
+ acquired.set(false)
+ }
+}
+
+/**
+ * An atomic switch that can be either on or off
+ */
+class Switch(startAsOn: Boolean = false) {
+ private val switch = new AtomicBoolean(startAsOn)
+
+ protected def transcend(from: Boolean, action: => Unit): Boolean = synchronized {
+ if (switch.compareAndSet(from, !from)) {
+ try {
+ action
+ } catch {
+ case e: Throwable =>
+ EventHandler.error(e, this, e.getMessage)
+ switch.compareAndSet(!from, from) // revert status
+ throw e
+ }
+ true
+ } else false
+ }
+
+ def switchOff(action: => Unit): Boolean = transcend(from = true, action)
+ def switchOn(action: => Unit): Boolean = transcend(from = false, action)
+
+ def switchOff: Boolean = synchronized { switch.compareAndSet(true, false) }
+ def switchOn: Boolean = synchronized { switch.compareAndSet(false, true) }
+
+ def ifOnYield[T](action: => T): Option[T] = {
+ if (switch.get) Some(action)
+ else None
+ }
+
+ def ifOffYield[T](action: => T): Option[T] = {
+ if (!switch.get) Some(action)
+ else None
+ }
+
+ def ifOn(action: => Unit): Boolean = {
+ if (switch.get) {
+ action
+ true
+ } else false
+ }
+
+ def ifOff(action: => Unit): Boolean = {
+ if (!switch.get) {
+ action
+ true
+ } else false
+ }
+
+ def whileOnYield[T](action: => T): Option[T] = synchronized {
+ if (switch.get) Some(action)
+ else None
+ }
+
+ def whileOffYield[T](action: => T): Option[T] = synchronized {
+ if (!switch.get) Some(action)
+ else None
+ }
+
+ def whileOn(action: => Unit): Boolean = synchronized {
+ if (switch.get) {
+ action
+ true
+ } else false
+ }
+
+ def whileOff(action: => Unit): Boolean = synchronized {
+ if (switch.get) {
+ action
+ true
+ } else false
+ }
+
+ def ifElseYield[T](on: => T)(off: => T) = synchronized {
+ if (switch.get) on else off
+ }
+
+ def isOn = switch.get
+ def isOff = !isOn
+}
diff --git a/test/disabled/presentation/akka/src/akka/util/ReflectiveAccess.scala b/test/disabled/presentation/akka/src/akka/util/ReflectiveAccess.scala
new file mode 100644
index 0000000000..f38d1f9b98
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/util/ReflectiveAccess.scala
@@ -0,0 +1,232 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka.util
+
+import akka.dispatch.{ Future, CompletableFuture, MessageInvocation }
+import akka.config.{ Config, ModuleNotAvailableException }
+
+import java.net.InetSocketAddress
+import akka.remoteinterface.RemoteSupport
+import akka.actor._
+import akka.event.EventHandler
+
+/**
+ * Helper class for reflective access to different modules in order to allow optional loading of modules.
+ *
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+object ReflectiveAccess {
+
+ val loader = getClass.getClassLoader
+
+ def isRemotingEnabled = Remote.isEnabled
+ lazy val isTypedActorEnabled = TypedActorModule.isEnabled
+
+ def ensureRemotingEnabled = Remote.ensureEnabled
+ def ensureTypedActorEnabled = TypedActorModule.ensureEnabled
+
+ /**
+ * Reflective access to the RemoteClient module.
+ *
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+ object Remote {
+ val TRANSPORT = Config.config.getString("akka.remote.layer", "akka.remote.netty.NettyRemoteSupport")
+
+ private[akka] val configDefaultAddress =
+ new InetSocketAddress(Config.config.getString("akka.remote.server.hostname", "localhost"),
+ Config.config.getInt("akka.remote.server.port", 2552))
+
+ lazy val isEnabled = remoteSupportClass.isDefined
+
+ def ensureEnabled = if (!isEnabled) {
+ val e = new ModuleNotAvailableException("Can't load the remoting module, make sure that akka-remote.jar is on the classpath")
+ EventHandler.debug(this, e.toString)
+ throw e
+ }
+ val remoteSupportClass = getClassFor[RemoteSupport](TRANSPORT) match {
+ case Right(value) => Some(value)
+ case Left(exception) =>
+ EventHandler.debug(this, exception.toString)
+ None
+ }
+
+ protected[akka] val defaultRemoteSupport: Option[() => RemoteSupport] =
+ remoteSupportClass map { remoteClass =>
+ () => createInstance[RemoteSupport](
+ remoteClass,
+ Array[Class[_]](),
+ Array[AnyRef]()) match {
+ case Right(value) => value
+ case Left(exception) =>
+ val e = new ModuleNotAvailableException(
+ "Can't instantiate [%s] - make sure that akka-remote.jar is on the classpath".format(remoteClass.getName), exception)
+ EventHandler.debug(this, e.toString)
+ throw e
+ }
+ }
+ }
+
+ /**
+ * Reflective access to the TypedActors module.
+ *
+ * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
+ */
+ object TypedActorModule {
+
+ type TypedActorObject = {
+ def isJoinPoint(message: Any): Boolean
+ def isJoinPointAndOneWay(message: Any): Boolean
+ def actorFor(proxy: AnyRef): Option[ActorRef]
+ def proxyFor(actorRef: ActorRef): Option[AnyRef]
+ def stop(anyRef: AnyRef): Unit
+ }
+
+ lazy val isEnabled = typedActorObjectInstance.isDefined
+
+ def ensureEnabled = if (!isTypedActorEnabled) throw new ModuleNotAvailableException(
+ "Can't load the typed actor module, make sure that akka-typed-actor.jar is on the classpath")
+
+ val typedActorObjectInstance: Option[TypedActorObject] =
+ getObjectFor[TypedActorObject]("akka.actor.TypedActor$") match {
+ case Right(value) => Some(value)
+ case Left(exception) =>
+ EventHandler.debug(this, exception.toString)
+ None
+ }
+
+ def resolveFutureIfMessageIsJoinPoint(message: Any, future: Future[_]): Boolean = {
+ ensureEnabled
+ if (typedActorObjectInstance.get.isJoinPointAndOneWay(message)) {
+ future.asInstanceOf[CompletableFuture[Option[_]]].completeWithResult(None)
+ }
+ typedActorObjectInstance.get.isJoinPoint(message)
+ }
+ }
+
+ object AkkaCloudModule {
+
+ type Mailbox = {
+ def enqueue(message: MessageInvocation)
+ def dequeue: MessageInvocation
+ }
+
+ type Serializer = {
+ def toBinary(obj: AnyRef): Array[Byte]
+ def fromBinary(bytes: Array[Byte], clazz: Option[Class[_]]): AnyRef
+ }
+
+ lazy val isEnabled = clusterObjectInstance.isDefined
+
+ val clusterObjectInstance: Option[AnyRef] =
+ getObjectFor[AnyRef]("akka.cloud.cluster.Cluster$") match {
+ case Right(value) => Some(value)
+ case Left(exception) =>
+ EventHandler.debug(this, exception.toString)
+ None
+ }
+
+ val serializerClass: Option[Class[_]] =
+ getClassFor("akka.serialization.Serializer") match {
+ case Right(value) => Some(value)
+ case Left(exception) =>
+ EventHandler.debug(this, exception.toString)
+ None
+ }
+
+ def ensureEnabled = if (!isEnabled) throw new ModuleNotAvailableException(
+ "Feature is only available in Akka Cloud")
+ }
+
+ val noParams = Array[Class[_]]()
+ val noArgs = Array[AnyRef]()
+
+ def createInstance[T](clazz: Class[_],
+ params: Array[Class[_]],
+ args: Array[AnyRef]): Either[Exception, T] = try {
+ assert(clazz ne null)
+ assert(params ne null)
+ assert(args ne null)
+ val ctor = clazz.getDeclaredConstructor(params: _*)
+ ctor.setAccessible(true)
+ Right(ctor.newInstance(args: _*).asInstanceOf[T])
+ } catch {
+ case e: Exception => Left(e)
+ }
+
+ def createInstance[T](fqn: String,
+ params: Array[Class[_]],
+ args: Array[AnyRef],
+ classloader: ClassLoader = loader): Either[Exception, T] = try {
+ assert(params ne null)
+ assert(args ne null)
+ getClassFor(fqn) match {
+ case Right(value) =>
+ val ctor = value.getDeclaredConstructor(params: _*)
+ ctor.setAccessible(true)
+ Right(ctor.newInstance(args: _*).asInstanceOf[T])
+ case Left(exception) => Left(exception) //We could just cast this to Either[Exception, T] but it's ugly
+ }
+ } catch {
+ case e: Exception =>
+ Left(e)
+ }
+
+ //Obtains a reference to fqn.MODULE$
+ def getObjectFor[T](fqn: String, classloader: ClassLoader = loader): Either[Exception, T] = try {
+ getClassFor(fqn) match {
+ case Right(value) =>
+ val instance = value.getDeclaredField("MODULE$")
+ instance.setAccessible(true)
+ val obj = instance.get(null)
+ if (obj eq null) Left(new NullPointerException) else Right(obj.asInstanceOf[T])
+ case Left(exception) => Left(exception) //We could just cast this to Either[Exception, T] but it's ugly
+ }
+ } catch {
+ case e: Exception =>
+ Left(e)
+ }
+
+ def getClassFor[T](fqn: String, classloader: ClassLoader = loader): Either[Exception, Class[T]] = try {
+ assert(fqn ne null)
+
+ // First, use the specified CL
+ val first = try {
+ Right(classloader.loadClass(fqn).asInstanceOf[Class[T]])
+ } catch {
+ case c: ClassNotFoundException => Left(c)
+ }
+
+ if (first.isRight) first
+ else {
+ // Second option is to use the ContextClassLoader
+ val second = try {
+ Right(Thread.currentThread.getContextClassLoader.loadClass(fqn).asInstanceOf[Class[T]])
+ } catch {
+ case c: ClassNotFoundException => Left(c)
+ }
+
+ if (second.isRight) second
+ else {
+ val third = try {
+ if (classloader ne loader) Right(loader.loadClass(fqn).asInstanceOf[Class[T]]) else Left(null) //Horrid
+ } catch {
+ case c: ClassNotFoundException => Left(c)
+ }
+
+ if (third.isRight) third
+ else {
+ try {
+ Right(Class.forName(fqn).asInstanceOf[Class[T]]) // Last option is Class.forName
+ } catch {
+ case c: ClassNotFoundException => Left(c)
+ }
+ }
+ }
+ }
+ } catch {
+ case e: Exception => Left(e)
+ }
+}
diff --git a/test/disabled/presentation/akka/src/akka/util/package.scala b/test/disabled/presentation/akka/src/akka/util/package.scala
new file mode 100644
index 0000000000..26a24929c9
--- /dev/null
+++ b/test/disabled/presentation/akka/src/akka/util/package.scala
@@ -0,0 +1,27 @@
+/**
+ * Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
+ */
+
+package akka.util
+
+import java.util.concurrent.TimeUnit
+
+package object duration {
+ implicit def intToDurationInt(n: Int) = new DurationInt(n)
+ implicit def longToDurationLong(n: Long) = new DurationLong(n)
+ implicit def doubleToDurationDouble(d: Double) = new DurationDouble(d)
+
+ implicit def pairIntToDuration(p: (Int, TimeUnit)) = Duration(p._1, p._2)
+ implicit def pairLongToDuration(p: (Long, TimeUnit)) = Duration(p._1, p._2)
+ implicit def durationToPair(d: Duration) = (d.length, d.unit)
+
+ implicit def intMult(i: Int) = new {
+ def *(d: Duration) = d * i
+ }
+ implicit def longMult(l: Long) = new {
+ def *(d: Duration) = d * l
+ }
+ implicit def doubleMult(f: Double) = new {
+ def *(d: Duration) = d * f
+ }
+}
diff --git a/test/disabled/presentation/akka/src/com/eaio/util/lang/Hex.java b/test/disabled/presentation/akka/src/com/eaio/util/lang/Hex.java
new file mode 100644
index 0000000000..7794059517
--- /dev/null
+++ b/test/disabled/presentation/akka/src/com/eaio/util/lang/Hex.java
@@ -0,0 +1,215 @@
+/*
+ * Hex.java
+ *
+ * Created 04.07.2003.
+ *
+ * eaio: UUID - an implementation of the UUID specification Copyright (c) 2003-2009 Johann Burkard (jb@eaio.com)
+ * http://eaio.com.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
+ * documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+ * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+package com.eaio.util.lang;
+
+import java.io.IOException;
+
+/**
+ * Number-to-hexadecimal and hexadecimal-to-number conversions.
+ *
+ * @see <a href="http://johannburkard.de/software/uuid/">UUID</a>
+ * @author <a href="mailto:jb@eaio.com">Johann Burkard</a>
+ * @version $Id: Hex.java 1888 2009-03-15 12:43:24Z johann $
+ */
+public final class Hex {
+
+ /**
+ * No instances needed.
+ */
+ private Hex() {
+ super();
+ }
+
+ private static final char[] DIGITS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e',
+ 'f' };
+
+ /**
+ * Turns a <code>short</code> into hex octets.
+ *
+ * @param a the {@link Appendable}, may not be <code>null</code>
+ * @param in the integer
+ * @return {@link Appendable}
+ */
+ public static Appendable append(Appendable a, short in) {
+ return append(a, (long) in, 4);
+ }
+
+ /**
+ * Turns a <code>short</code> into hex octets.
+ *
+ * @param a the {@link Appendable}, may not be <code>null</code>
+ * @param in the integer
+ * @param length the number of octets to produce
+ * @return {@link Appendable}
+ */
+ public static Appendable append(Appendable a, short in, int length) {
+ return append(a, (long) in, length);
+ }
+
+ /**
+ * Turns an <code>int</code> into hex octets.
+ *
+ * @param a the {@link Appendable}, may not be <code>null</code>
+ * @param in the integer
+ * @return {@link Appendable}
+ */
+ public static Appendable append(Appendable a, int in) {
+ return append(a, (long) in, 8);
+ }
+
+ /**
+ * Turns an <code>int</code> into hex octets.
+ *
+ * @param a the {@link Appendable}, may not be <code>null</code>
+ * @param in the integer
+ * @param length the number of octets to produce
+ * @return {@link Appendable}
+ */
+ public static Appendable append(Appendable a, int in, int length) {
+ return append(a, (long) in, length);
+ }
+
+ /**
+ * Turns a <code>long</code> into hex octets.
+ *
+ * @param a the {@link Appendable}, may not be <code>null</code>
+ * @param in the long
+ * @return {@link Appendable}
+ */
+ public static Appendable append(Appendable a, long in) {
+ return append(a, in, 16);
+ }
+
+ /**
+ * Turns a <code>long</code> into hex octets.
+ *
+ * @param a the {@link Appendable}, may not be <code>null</code>
+ * @param in the long
+ * @param length the number of octets to produce
+ * @return {@link Appendable}
+ */
+ public static Appendable append(Appendable a, long in, int length) {
+ try {
+ int lim = (length << 2) - 4;
+ while (lim >= 0) {
+ a.append(DIGITS[(byte) (in >> lim) & 0x0f]);
+ lim -= 4;
+ }
+ }
+ catch (IOException ex) {
+ // Bla
+ }
+ return a;
+ }
+
+ /**
+ * Turns a <code>byte</code> array into hex octets.
+ *
+ * @param a the {@link Appendable}, may not be <code>null</code>
+ * @param bytes the <code>byte</code> array
+ * @return {@link Appendable}
+ */
+ public static Appendable append(Appendable a, byte[] bytes) {
+ try {
+ for (byte b : bytes) {
+ a.append(DIGITS[(byte) ((b & 0xF0) >> 4)]);
+ a.append(DIGITS[(byte) (b & 0x0F)]);
+ }
+ }
+ catch (IOException ex) {
+ // Bla
+ }
+ return a;
+ }
+
+ /**
+ * Parses a <code>long</code> from a hex encoded number. This method will skip all characters that are not 0-9,
+ * A-F and a-f.
+ * <p>
+ * Returns 0 if the {@link CharSequence} does not contain any interesting characters.
+ *
+ * @param s the {@link CharSequence} to extract a <code>long</code> from, may not be <code>null</code>
+ * @return a <code>long</code>
+ * @throws NullPointerException if the {@link CharSequence} is <code>null</code>
+ */
+ public static long parseLong(CharSequence s) {
+ long out = 0;
+ byte shifts = 0;
+ char c;
+ for (int i = 0; i < s.length() && shifts < 16; i++) {
+ c = s.charAt(i);
+ if ((c > 47) && (c < 58)) {
+ ++shifts;
+ out <<= 4;
+ out |= c - 48;
+ }
+ else if ((c > 64) && (c < 71)) {
+ ++shifts;
+ out <<= 4;
+ out |= c - 55;
+ }
+ else if ((c > 96) && (c < 103)) {
+ ++shifts;
+ out <<= 4;
+ out |= c - 87;
+ }
+ }
+ return out;
+ }
+
+ /**
+ * Parses a <code>short</code> from a hex encoded number. This method will skip all characters that are not 0-9,
+ * A-F and a-f.
+ * <p>
+ * Returns 0 if the {@link CharSequence} does not contain any interesting characters.
+ *
+ * @param s the {@link CharSequence} to extract a <code>short</code> from, may not be <code>null</code>
+ * @return a <code>short</code>
+ * @throws NullPointerException if the {@link CharSequence} is <code>null</code>
+ */
+ public static short parseShort(String s) {
+ short out = 0;
+ byte shifts = 0;
+ char c;
+ for (int i = 0; i < s.length() && shifts < 4; i++) {
+ c = s.charAt(i);
+ if ((c > 47) && (c < 58)) {
+ ++shifts;
+ out <<= 4;
+ out |= c - 48;
+ }
+ else if ((c > 64) && (c < 71)) {
+ ++shifts;
+ out <<= 4;
+ out |= c - 55;
+ }
+ else if ((c > 96) && (c < 103)) {
+ ++shifts;
+ out <<= 4;
+ out |= c - 87;
+ }
+ }
+ return out;
+ }
+
+}
diff --git a/test/disabled/presentation/akka/src/com/eaio/uuid/MACAddressParser.java b/test/disabled/presentation/akka/src/com/eaio/uuid/MACAddressParser.java
new file mode 100644
index 0000000000..c077147470
--- /dev/null
+++ b/test/disabled/presentation/akka/src/com/eaio/uuid/MACAddressParser.java
@@ -0,0 +1,116 @@
+/*
+ * MACAddressParserTest.java
+ *
+ * Created 30.01.2006.
+ *
+ * eaio: UUID - an implementation of the UUID specification
+ * Copyright (c) 2003-2009 Johann Burkard (jb@eaio.com) http://eaio.com.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+ * NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+ * USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+package com.eaio.uuid;
+
+/**
+ * The MAC address parser attempts to find the following patterns:
+ * <ul>
+ * <li>.{1,2}:.{1,2}:.{1,2}:.{1,2}:.{1,2}:.{1,2}</li>
+ * <li>.{1,2}-.{1,2}-.{1,2}-.{1,2}-.{1,2}-.{1,2}</li>
+ * </ul>
+ *
+ * @see <a href="http://johannburkard.de/software/uuid/">UUID</a>
+ * @author <a href="mailto:jb@eaio.com">Johann Burkard</a>
+ * @version $Id: MACAddressParser.java 1888 2009-03-15 12:43:24Z johann $
+ */
+class MACAddressParser {
+
+ /**
+ * No instances needed.
+ */
+ private MACAddressParser() {
+ super();
+ }
+
+ /**
+ * Attempts to find a pattern in the given String.
+ *
+ * @param in the String, may not be <code>null</code>
+ * @return the substring that matches this pattern or <code>null</code>
+ */
+ static String parse(String in) {
+
+ String out = in;
+
+ // lanscan
+
+ int hexStart = out.indexOf("0x");
+ if (hexStart != -1 && out.indexOf("ETHER") != -1) {
+ int hexEnd = out.indexOf(' ', hexStart);
+ if (hexEnd > hexStart + 2) {
+ out = out.substring(hexStart, hexEnd);
+ }
+ }
+
+ else {
+
+ int octets = 0;
+ int lastIndex, old, end;
+
+ if (out.indexOf('-') > -1) {
+ out = out.replace('-', ':');
+ }
+
+ lastIndex = out.lastIndexOf(':');
+
+ if (lastIndex > out.length() - 2) {
+ out = null;
+ }
+ else {
+
+ end = Math.min(out.length(), lastIndex + 3);
+
+ ++octets;
+ old = lastIndex;
+ while (octets != 5 && lastIndex != -1 && lastIndex > 1) {
+ lastIndex = out.lastIndexOf(':', --lastIndex);
+ if (old - lastIndex == 3 || old - lastIndex == 2) {
+ ++octets;
+ old = lastIndex;
+ }
+ }
+
+ if (octets == 5 && lastIndex > 1) {
+ out = out.substring(lastIndex - 2, end).trim();
+ }
+ else {
+ out = null;
+ }
+
+ }
+
+ }
+
+ if (out != null && out.startsWith("0x")) {
+ out = out.substring(2);
+ }
+
+ return out;
+ }
+
+}
diff --git a/test/disabled/presentation/akka/src/com/eaio/uuid/UUID.java b/test/disabled/presentation/akka/src/com/eaio/uuid/UUID.java
new file mode 100644
index 0000000000..6c49bcd1c8
--- /dev/null
+++ b/test/disabled/presentation/akka/src/com/eaio/uuid/UUID.java
@@ -0,0 +1,311 @@
+/*
+ * UUID.java
+ *
+ * Created 07.02.2003
+ *
+ * eaio: UUID - an implementation of the UUID specification
+ * Copyright (c) 2003-2009 Johann Burkard (jb@eaio.com) http://eaio.com.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+ * NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+ * USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+package com.eaio.uuid;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+
+import org.omg.CORBA.portable.IDLEntity;
+
+import com.eaio.util.lang.Hex;
+
+/**
+ * Creates UUIDs according to the DCE Universal Token Identifier specification.
+ * <p>
+ * All you need to know:
+ * <pre>
+ * UUID u = new UUID();
+ * </pre>
+ *
+ * @see <a href="http://www.opengroup.org/onlinepubs/9629399/apdxa.htm">
+ * http://www.opengroup.org/onlinepubs/9629399/apdxa.htm
+ * </a>
+ * @see <a href="http://www.uddi.org/pubs/draft-leach-uuids-guids-01.txt">
+ * http://www.uddi.org/pubs/draft-leach-uuids-guids-01.txt
+ * </a>
+ * @see <a href="http://johannburkard.de/software/uuid/">UUID</a>
+ * @author <a href="mailto:jb@eaio.de">Johann Burkard</a>
+ * @version $Id: UUID.java 1888 2009-03-15 12:43:24Z johann $
+ */
+public class UUID implements Comparable<UUID>, Serializable, Cloneable,
+ IDLEntity {
+
+ /**
+ * Hasn't ever changed between versions.
+ */
+ static final long serialVersionUID = 7435962790062944603L;
+
+ /**
+ * The time field of the UUID.
+ *
+ * @serial
+ */
+ public long time;
+
+ /**
+ * The clock sequence and node field of the UUID.
+ *
+ * @serial
+ */
+ public long clockSeqAndNode;
+
+ /**
+ * Constructor for UUID. Constructs a new, unique UUID.
+ *
+ * @see UUIDGen#newTime()
+ * @see UUIDGen#getClockSeqAndNode()
+ */
+ public UUID() {
+ this(UUIDGen.newTime(), UUIDGen.getClockSeqAndNode());
+ }
+
+ /**
+ * Constructor for UUID. Constructs a UUID from two <code>long</code> values.
+ *
+ * @param time the upper 64 bits
+ * @param clockSeqAndNode the lower 64 bits
+ */
+ public UUID(long time, long clockSeqAndNode) {
+ this.time = time;
+ this.clockSeqAndNode = clockSeqAndNode;
+ }
+
+ /**
+ * Copy constructor for UUID. Values of the given UUID are copied.
+ *
+ * @param u the UUID, may not be <code>null</code>
+ */
+ public UUID(UUID u) {
+ this(u.time, u.clockSeqAndNode);
+ }
+
+ /**
+ * Parses a textual representation of a UUID.
+ * <p>
+ * No validation is performed. If the {@link CharSequence} is shorter than 36 characters,
+ * {@link ArrayIndexOutOfBoundsException}s will be thrown.
+ *
+ * @param s the {@link CharSequence}, may not be <code>null</code>
+ */
+ public UUID(CharSequence s) {
+ this(Hex.parseLong(s.subSequence(0, 18)), Hex.parseLong(s.subSequence(
+ 19, 36)));
+ }
+
+ /**
+ * Compares this UUID to another Object. Throws a {@link ClassCastException} if
+ * the other Object is not an instance of the UUID class. Returns a value
+ * smaller than zero if the other UUID is "larger" than this UUID and a value
+ * larger than zero if the other UUID is "smaller" than this UUID.
+ *
+ * @param t the other UUID, may not be <code>null</code>
+ * @return a value &lt; 0, 0 or a value &gt; 0
+ * @see java.lang.Comparable#compareTo(java.lang.Object)
+ * @throws ClassCastException
+ */
+ public int compareTo(UUID t) {
+ if (this == t) {
+ return 0;
+ }
+ if (time > t.time) {
+ return 1;
+ }
+ if (time < t.time) {
+ return -1;
+ }
+ if (clockSeqAndNode > t.clockSeqAndNode) {
+ return 1;
+ }
+ if (clockSeqAndNode < t.clockSeqAndNode) {
+ return -1;
+ }
+ return 0;
+ }
+
+ /**
+ * Tweaked Serialization routine.
+ *
+ * @param out the ObjectOutputStream
+ * @throws IOException
+ */
+ private void writeObject(ObjectOutputStream out) throws IOException {
+ out.writeLong(time);
+ out.writeLong(clockSeqAndNode);
+ }
+
+ /**
+ * Tweaked Serialization routine.
+ *
+ * @param in the ObjectInputStream
+ * @throws IOException
+ */
+ private void readObject(ObjectInputStream in) throws IOException {
+ time = in.readLong();
+ clockSeqAndNode = in.readLong();
+ }
+
+ /**
+ * Returns this UUID as a String.
+ *
+ * @return a String, never <code>null</code>
+ * @see java.lang.Object#toString()
+ * @see #toAppendable(Appendable)
+ */
+ @Override
+ public final String toString() {
+ return toAppendable(null).toString();
+ }
+
+ /**
+ * Appends a String representation of this to the given {@link StringBuffer} or
+ * creates a new one if none is given.
+ *
+ * @param in the StringBuffer to append to, may be <code>null</code>
+ * @return a StringBuffer, never <code>null</code>
+ * @see #toAppendable(Appendable)
+ */
+ public StringBuffer toStringBuffer(StringBuffer in) {
+ StringBuffer out = in;
+ if (out == null) {
+ out = new StringBuffer(36);
+ }
+ else {
+ out.ensureCapacity(out.length() + 36);
+ }
+ return (StringBuffer) toAppendable(out);
+ }
+
+ /**
+ * Appends a String representation of this object to the given {@link Appendable} object.
+ * <p>
+ * For reasons I'll probably never understand, Sun has decided to have a number of I/O classes implement
+ * Appendable which forced them to destroy an otherwise nice and simple interface with {@link IOException}s.
+ * <p>
+ * I decided to ignore any possible IOExceptions in this method.
+ *
+ * @param a the Appendable object, may be <code>null</code>
+ * @return an Appendable object, defaults to a {@link StringBuilder} if <code>a</code> is <code>null</code>
+ */
+ public Appendable toAppendable(Appendable a) {
+ Appendable out = a;
+ if (out == null) {
+ out = new StringBuilder(36);
+ }
+ try {
+ Hex.append(out, (int) (time >> 32)).append('-');
+ Hex.append(out, (short) (time >> 16)).append('-');
+ Hex.append(out, (short) time).append('-');
+ Hex.append(out, (short) (clockSeqAndNode >> 48)).append('-');
+ Hex.append(out, clockSeqAndNode, 12);
+ }
+ catch (IOException ex) {
+ // What were they thinking?
+ }
+ return out;
+ }
+
+ /**
+ * Returns a hash code of this UUID. The hash code is calculated by XOR'ing the
+ * upper 32 bits of the time and clockSeqAndNode fields and the lower 32 bits of
+ * the time and clockSeqAndNode fields.
+ *
+ * @return an <code>int</code> representing the hash code
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ return (int) ((time >> 32) ^ time ^ (clockSeqAndNode >> 32) ^ clockSeqAndNode);
+ }
+
+ /**
+ * Clones this UUID.
+ *
+ * @return a new UUID with identical values, never <code>null</code>
+ */
+ @Override
+ public Object clone() {
+ try {
+ return super.clone();
+ }
+ catch (CloneNotSupportedException ex) {
+ // One of Sun's most epic fails.
+ return null;
+ }
+ }
+
+ /**
+ * Returns the time field of the UUID (upper 64 bits).
+ *
+ * @return the time field
+ */
+ public final long getTime() {
+ return time;
+ }
+
+ /**
+ * Returns the clock and node field of the UUID (lower 64 bits).
+ *
+ * @return the clockSeqAndNode field
+ */
+ public final long getClockSeqAndNode() {
+ return clockSeqAndNode;
+ }
+
+ /**
+ * Compares two Objects for equality.
+ *
+ * @see java.lang.Object#equals(Object)
+ * @param obj the Object to compare this UUID with, may be <code>null</code>
+ * @return <code>true</code> if the other Object is equal to this UUID,
+ * <code>false</code> if not
+ */
+ @Override
+ public boolean equals(Object obj) {
+ if (!(obj instanceof UUID)) {
+ return false;
+ }
+ return compareTo((UUID) obj) == 0;
+ }
+
+ /**
+ * Returns the nil UUID (a UUID whose values are both set to zero).
+ * <p>
+ * Starting with version 2.0, this method does return a new UUID instance every
+ * time it is called. Earlier versions returned one instance. This has now been
+ * changed because this UUID has public, non-final instance fields. Returning a
+ * new instance is therefore more safe.
+ *
+ * @return a nil UUID, never <code>null</code>
+ */
+ public static UUID nilUUID() {
+ return new UUID(0, 0);
+ }
+
+}
diff --git a/test/disabled/presentation/akka/src/com/eaio/uuid/UUIDGen.java b/test/disabled/presentation/akka/src/com/eaio/uuid/UUIDGen.java
new file mode 100644
index 0000000000..7b63f65447
--- /dev/null
+++ b/test/disabled/presentation/akka/src/com/eaio/uuid/UUIDGen.java
@@ -0,0 +1,364 @@
+/*
+ * UUIDGen.java
+ *
+ * Created on 09.08.2003.
+ *
+ * eaio: UUID - an implementation of the UUID specification
+ * Copyright (c) 2003-2009 Johann Burkard (jb@eaio.com) http://eaio.com.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+ * NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+ * USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+package com.eaio.uuid;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.InetAddress;
+import java.net.InterfaceAddress;
+import java.net.NetworkInterface;
+import java.net.SocketException;
+import java.net.UnknownHostException;
+import java.util.Enumeration;
+
+import com.eaio.util.lang.Hex;
+
+/**
+ * This class contains methods to generate UUID fields. These methods have been
+ * refactored out of {@link com.eaio.uuid.UUID}.
+ * <p>
+ * Starting with version 2, this implementation tries to obtain the MAC address
+ * of the network card. Under Microsoft Windows, the <code>ifconfig</code>
+ * command is used which may pop up a command window in Java Virtual Machines
+ * prior to 1.4 once this class is initialized. The command window is closed
+ * automatically.
+ * <p>
+ * The MAC address code has been tested extensively in Microsoft Windows,
+ * Linux, Solaris 8, HP-UX 11, but should work in MacOS X and BSDs, too.
+ * <p>
+ * If you use JDK 6 or later, the code in {@link InterfaceAddress} will be used.
+ *
+ * @see <a href="http://johannburkard.de/software/uuid/">UUID</a>
+ * @author <a href="mailto:jb@eaio.de">Johann Burkard</a>
+ * @version $Id: UUIDGen.java 2914 2010-04-23 11:35:00Z johann $
+ * @see com.eaio.uuid.UUID
+ */
+public final class UUIDGen {
+
+ /**
+ * No instances needed.
+ */
+ private UUIDGen() {
+ super();
+ }
+
+ /**
+ * The last time value. Used to remove duplicate UUIDs.
+ */
+ private static long lastTime = Long.MIN_VALUE;
+
+ /**
+ * The cached MAC address.
+ */
+ private static String macAddress = null;
+
+ /**
+ * The current clock and node value.
+ */
+ private static long clockSeqAndNode = 0x8000000000000000L;
+
+ static {
+
+ try {
+ Class.forName("java.net.InterfaceAddress");
+ macAddress = Class.forName(
+ "com.eaio.uuid.UUIDGen$HardwareAddressLookup").newInstance().toString();
+ }
+ catch (ExceptionInInitializerError err) {
+ // Ignored.
+ }
+ catch (ClassNotFoundException ex) {
+ // Ignored.
+ }
+ catch (LinkageError err) {
+ // Ignored.
+ }
+ catch (IllegalAccessException ex) {
+ // Ignored.
+ }
+ catch (InstantiationException ex) {
+ // Ignored.
+ }
+ catch (SecurityException ex) {
+ // Ignored.
+ }
+
+ if (macAddress == null) {
+
+ Process p = null;
+ BufferedReader in = null;
+
+ try {
+ String osname = System.getProperty("os.name", "");
+
+ if (osname.startsWith("Windows")) {
+ p = Runtime.getRuntime().exec(
+ new String[] { "ipconfig", "/all" }, null);
+ }
+ // Solaris code must appear before the generic code
+ else if (osname.startsWith("Solaris")
+ || osname.startsWith("SunOS")) {
+ String hostName = getFirstLineOfCommand(
+ "uname", "-n" );
+ if (hostName != null) {
+ p = Runtime.getRuntime().exec(
+ new String[] { "/usr/sbin/arp", hostName },
+ null);
+ }
+ }
+ else if (new File("/usr/sbin/lanscan").exists()) {
+ p = Runtime.getRuntime().exec(
+ new String[] { "/usr/sbin/lanscan" }, null);
+ }
+ else if (new File("/sbin/ifconfig").exists()) {
+ p = Runtime.getRuntime().exec(
+ new String[] { "/sbin/ifconfig", "-a" }, null);
+ }
+
+ if (p != null) {
+ in = new BufferedReader(new InputStreamReader(
+ p.getInputStream()), 128);
+ String l = null;
+ while ((l = in.readLine()) != null) {
+ macAddress = MACAddressParser.parse(l);
+ if (macAddress != null
+ && Hex.parseShort(macAddress) != 0xff) {
+ break;
+ }
+ }
+ }
+
+ }
+ catch (SecurityException ex) {
+ // Ignore it.
+ }
+ catch (IOException ex) {
+ // Ignore it.
+ }
+ finally {
+ if (p != null) {
+ if (in != null) {
+ try {
+ in.close();
+ }
+ catch (IOException ex) {
+ // Ignore it.
+ }
+ }
+ try {
+ p.getErrorStream().close();
+ }
+ catch (IOException ex) {
+ // Ignore it.
+ }
+ try {
+ p.getOutputStream().close();
+ }
+ catch (IOException ex) {
+ // Ignore it.
+ }
+ p.destroy();
+ }
+ }
+
+ }
+
+ if (macAddress != null) {
+ clockSeqAndNode |= Hex.parseLong(macAddress);
+ }
+ else {
+ try {
+ byte[] local = InetAddress.getLocalHost().getAddress();
+ clockSeqAndNode |= (local[0] << 24) & 0xFF000000L;
+ clockSeqAndNode |= (local[1] << 16) & 0xFF0000;
+ clockSeqAndNode |= (local[2] << 8) & 0xFF00;
+ clockSeqAndNode |= local[3] & 0xFF;
+ }
+ catch (UnknownHostException ex) {
+ clockSeqAndNode |= (long) (Math.random() * 0x7FFFFFFF);
+ }
+ }
+
+ // Skip the clock sequence generation process and use random instead.
+
+ clockSeqAndNode |= (long) (Math.random() * 0x3FFF) << 48;
+
+ }
+
+ /**
+ * Returns the current clockSeqAndNode value.
+ *
+ * @return the clockSeqAndNode value
+ * @see UUID#getClockSeqAndNode()
+ */
+ public static long getClockSeqAndNode() {
+ return clockSeqAndNode;
+ }
+
+ /**
+ * Generates a new time field. Each time field is unique and larger than the
+ * previously generated time field.
+ *
+ * @return a new time value
+ * @see UUID#getTime()
+ */
+ public static long newTime() {
+ return createTime(System.currentTimeMillis());
+ }
+
+ /**
+ * Creates a new time field from the given timestamp. Note that even identical
+ * values of <code>currentTimeMillis</code> will produce different time fields.
+ *
+ * @param currentTimeMillis the timestamp
+ * @return a new time value
+ * @see UUID#getTime()
+ */
+ public static synchronized long createTime(long currentTimeMillis) {
+
+ long time;
+
+ // UTC time
+
+ long timeMillis = (currentTimeMillis * 10000) + 0x01B21DD213814000L;
+
+ if (timeMillis > lastTime) {
+ lastTime = timeMillis;
+ }
+ else {
+ timeMillis = ++lastTime;
+ }
+
+ // time low
+
+ time = timeMillis << 32;
+
+ // time mid
+
+ time |= (timeMillis & 0xFFFF00000000L) >> 16;
+
+ // time hi and version
+
+ time |= 0x1000 | ((timeMillis >> 48) & 0x0FFF); // version 1
+
+ return time;
+
+ }
+
+ /**
+ * Returns the MAC address. Not guaranteed to return anything.
+ *
+ * @return the MAC address, may be <code>null</code>
+ */
+ public static String getMACAddress() {
+ return macAddress;
+ }
+
+ /**
+ * Returns the first line of the shell command.
+ *
+ * @param commands the commands to run
+ * @return the first line of the command
+ * @throws IOException
+ */
+ static String getFirstLineOfCommand(String... commands) throws IOException {
+
+ Process p = null;
+ BufferedReader reader = null;
+
+ try {
+ p = Runtime.getRuntime().exec(commands);
+ reader = new BufferedReader(new InputStreamReader(
+ p.getInputStream()), 128);
+
+ return reader.readLine();
+ }
+ finally {
+ if (p != null) {
+ if (reader != null) {
+ try {
+ reader.close();
+ }
+ catch (IOException ex) {
+ // Ignore it.
+ }
+ }
+ try {
+ p.getErrorStream().close();
+ }
+ catch (IOException ex) {
+ // Ignore it.
+ }
+ try {
+ p.getOutputStream().close();
+ }
+ catch (IOException ex) {
+ // Ignore it.
+ }
+ p.destroy();
+ }
+ }
+
+ }
+
+ /**
+ * Scans MAC addresses for good ones.
+ */
+ static class HardwareAddressLookup {
+
+ /**
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ String out = null;
+ try {
+ Enumeration<NetworkInterface> ifs = NetworkInterface.getNetworkInterfaces();
+ if (ifs != null) {
+ while (ifs.hasMoreElements()) {
+ NetworkInterface iface = ifs.nextElement();
+ byte[] hardware = iface.getHardwareAddress();
+ if (hardware != null && hardware.length == 6
+ && hardware[1] != (byte) 0xff) {
+ out = Hex.append(new StringBuilder(36), hardware).toString();
+ break;
+ }
+ }
+ }
+ }
+ catch (SocketException ex) {
+ // Ignore it.
+ }
+ return out;
+ }
+
+ }
+
+}
diff --git a/test/disabled/presentation/akka/src/com/eaio/uuid/UUIDHelper.java b/test/disabled/presentation/akka/src/com/eaio/uuid/UUIDHelper.java
new file mode 100644
index 0000000000..7abbe85895
--- /dev/null
+++ b/test/disabled/presentation/akka/src/com/eaio/uuid/UUIDHelper.java
@@ -0,0 +1,86 @@
+package com.eaio.uuid;
+
+
+/**
+* com/eaio/uuid/UUIDHelper.java .
+* Generated by the IDL-to-Java compiler (portable), version "3.1"
+* from uuid.idl
+* Sonntag, 7. März 2004 21.35 Uhr CET
+*/
+
+
+/**
+ * The UUID struct.
+ */
+abstract public class UUIDHelper
+{
+ private static String _id = "IDL:com/eaio/uuid/UUID:1.0";
+
+ public static void insert (org.omg.CORBA.Any a, com.eaio.uuid.UUID that)
+ {
+ org.omg.CORBA.portable.OutputStream out = a.create_output_stream ();
+ a.type (type ());
+ write (out, that);
+ a.read_value (out.create_input_stream (), type ());
+ }
+
+ public static com.eaio.uuid.UUID extract (org.omg.CORBA.Any a)
+ {
+ return read (a.create_input_stream ());
+ }
+
+ private static org.omg.CORBA.TypeCode __typeCode = null;
+ private static boolean __active = false;
+ synchronized public static org.omg.CORBA.TypeCode type ()
+ {
+ if (__typeCode == null)
+ {
+ synchronized (org.omg.CORBA.TypeCode.class)
+ {
+ if (__typeCode == null)
+ {
+ if (__active)
+ {
+ return org.omg.CORBA.ORB.init().create_recursive_tc ( _id );
+ }
+ __active = true;
+ org.omg.CORBA.StructMember[] _members0 = new org.omg.CORBA.StructMember [2];
+ org.omg.CORBA.TypeCode _tcOf_members0 = null;
+ _tcOf_members0 = org.omg.CORBA.ORB.init ().get_primitive_tc (org.omg.CORBA.TCKind.tk_longlong);
+ _members0[0] = new org.omg.CORBA.StructMember (
+ "time",
+ _tcOf_members0,
+ null);
+ _tcOf_members0 = org.omg.CORBA.ORB.init ().get_primitive_tc (org.omg.CORBA.TCKind.tk_longlong);
+ _members0[1] = new org.omg.CORBA.StructMember (
+ "clockSeqAndNode",
+ _tcOf_members0,
+ null);
+ __typeCode = org.omg.CORBA.ORB.init ().create_struct_tc (com.eaio.uuid.UUIDHelper.id (), "UUID", _members0);
+ __active = false;
+ }
+ }
+ }
+ return __typeCode;
+ }
+
+ public static String id ()
+ {
+ return _id;
+ }
+
+ public static com.eaio.uuid.UUID read (org.omg.CORBA.portable.InputStream istream)
+ {
+ com.eaio.uuid.UUID value = new com.eaio.uuid.UUID ();
+ value.time = istream.read_longlong ();
+ value.clockSeqAndNode = istream.read_longlong ();
+ return value;
+ }
+
+ public static void write (org.omg.CORBA.portable.OutputStream ostream, com.eaio.uuid.UUID value)
+ {
+ ostream.write_longlong (value.time);
+ ostream.write_longlong (value.clockSeqAndNode);
+ }
+
+}
diff --git a/test/disabled/presentation/akka/src/com/eaio/uuid/UUIDHolder.java b/test/disabled/presentation/akka/src/com/eaio/uuid/UUIDHolder.java
new file mode 100644
index 0000000000..d5531f5e00
--- /dev/null
+++ b/test/disabled/presentation/akka/src/com/eaio/uuid/UUIDHolder.java
@@ -0,0 +1,42 @@
+package com.eaio.uuid;
+
+/**
+* com/eaio/uuid/UUIDHolder.java .
+* Generated by the IDL-to-Java compiler (portable), version "3.1"
+* from uuid.idl
+* Sonntag, 7. März 2004 21.35 Uhr CET
+*/
+
+
+/**
+ * The UUID struct.
+ */
+public final class UUIDHolder implements org.omg.CORBA.portable.Streamable
+{
+ public com.eaio.uuid.UUID value = null;
+
+ public UUIDHolder ()
+ {
+ }
+
+ public UUIDHolder (com.eaio.uuid.UUID initialValue)
+ {
+ value = initialValue;
+ }
+
+ public void _read (org.omg.CORBA.portable.InputStream i)
+ {
+ value = com.eaio.uuid.UUIDHelper.read (i);
+ }
+
+ public void _write (org.omg.CORBA.portable.OutputStream o)
+ {
+ com.eaio.uuid.UUIDHelper.write (o, value);
+ }
+
+ public org.omg.CORBA.TypeCode _type ()
+ {
+ return com.eaio.uuid.UUIDHelper.type ();
+ }
+
+}
diff --git a/test/disabled/presentation/akka/src/pi.scala b/test/disabled/presentation/akka/src/pi.scala
new file mode 100644
index 0000000000..b4c644052c
--- /dev/null
+++ b/test/disabled/presentation/akka/src/pi.scala
@@ -0,0 +1,108 @@
+
+import akka.actor.{Actor, PoisonPill}
+import Actor._
+import akka.routing.{Routing, CyclicIterator}
+import Routing._
+
+import java.util.concurrent.CountDownLatch
+
+object Pi extends App {
+
+ calculate/*#*/(nrOfWorkers = 4, nrOfElements = 10000, nrOfMessages = 10000)
+
+ // ====================
+ // ===== Messages =====
+ // ====================
+ sealed trait PiMessage
+ case object Calculate extends PiMessage/*#*/
+ case class Work(start: Int, nrOfElements: Int) extends PiMessage
+ case class Result(value: Double) extends PiMessage
+
+ // ==================
+ // ===== Worker =====
+ // ==================
+ class Worker extends Actor/*#*/ {
+
+ // define the work
+ def calculatePiFor(start: Int, nrOfElements: Int): Double = {
+ var acc = 0.0
+ for (i <- start until (start + nrOfElements))
+ acc += 4.0 * (1 - (i % 2) * 2) / (2 * i + 1)
+ acc
+ }
+
+ def receive /*?*/ = {
+ case Work(start, nrOfElements) =>
+ self reply/*#*/ Result(calculatePiFor(start, nrOfElements)) // perform the work // TODO: this currently returns wrong position for the symbol
+ }
+ }
+
+ // ==================
+ // ===== Master =====
+ // ==================
+ class Master(
+ nrOfWorkers: Int, nrOfMessages: Int, nrOfElements: Int, latch: CountDownLatch)
+ extends Actor {
+
+ var pi: Double = _
+ var nrOfResults: Int = _
+ var start: Long = _
+
+ // create the workers
+ val workers = Vector.fill(nrOfWorkers)(actorOf[Worker]./*!*/start())
+
+ // wrap them with a load-balancing router
+ val router = Routing./*!*/loadBalancerActor(CyclicIterator(workers))./*!*/start()
+
+ // message handler
+ def receive = {
+ case Calculate =>
+ // schedule work
+ //for (start <- 0 until nrOfMessages) router ! Work(start, nrOfElements)
+ for (i <- 0 until nrOfMessages) router ! Work(i * nrOfElements, nrOfElements)
+
+ // send a PoisonPill to all workers telling them to shut down themselves
+ router./*!*/!(Broadcast(PoisonPill))
+
+ // send a PoisonPill to the router, telling him to shut himself down
+ router ! PoisonPill
+
+ case Result(value) =>
+ // handle result from the worker
+ pi += value
+ nrOfResults/*#*/ += 1
+ if (nrOfResults == nrOfMessages) self./*!*/stop()
+ }
+
+ override def preStart() {
+ start = System.currentTimeMillis
+ }
+
+ override def postStop() {
+ // tell the world that the calculation is complete
+ println(
+ "\n\tPi estimate: \t\t%s\n\tCalculation time: \t%s millis"
+ .format(pi, (System.currentTimeMillis - start)))
+ latch/*#*/.countDown()
+ }
+ }
+
+ // ==================
+ // ===== Run it =====
+ // ==================
+ def calculate(nrOfWorkers: Int, nrOfElements: Int, nrOfMessages: Int) {
+
+ // this latch is only plumbing to know when the calculation is completed
+ val latch = new CountDownLatch(1)
+
+ // create the master
+ val master = actorOf(
+ new Master(nrOfWorkers, nrOfMessages, nrOfElements, latch)).start()
+
+ // start the calculation
+ master ! Calculate
+
+ // wait for master to shut down
+ latch.await()
+ }
+}
diff --git a/test/disabled/presentation/ide-bug-1000450.check b/test/disabled/presentation/ide-bug-1000450.check
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/test/disabled/presentation/ide-bug-1000450.check
diff --git a/test/disabled/presentation/ide-bug-1000450/Runner.scala b/test/disabled/presentation/ide-bug-1000450/Runner.scala
new file mode 100644
index 0000000000..7c16a57f5c
--- /dev/null
+++ b/test/disabled/presentation/ide-bug-1000450/Runner.scala
@@ -0,0 +1,6 @@
+import scala.tools.nsc.interactive.tests._
+
+import scala.tools.nsc.interactive.Response
+import scala.tools.nsc.util.Position
+
+object Test extends InteractiveTest \ No newline at end of file
diff --git a/test/disabled/presentation/ide-bug-1000450/src/Ranges.scala b/test/disabled/presentation/ide-bug-1000450/src/Ranges.scala
new file mode 100644
index 0000000000..2295d06b9f
--- /dev/null
+++ b/test/disabled/presentation/ide-bug-1000450/src/Ranges.scala
@@ -0,0 +1,5 @@
+object Ranges {
+ // (1 to 10). // (1) this works as expected
+
+ (1 to 10).toS /*!*/ // (2) this fails
+} \ No newline at end of file
diff --git a/test/disabled/presentation/ide-bug-1000508.check b/test/disabled/presentation/ide-bug-1000508.check
new file mode 100644
index 0000000000..5f4d74fea9
--- /dev/null
+++ b/test/disabled/presentation/ide-bug-1000508.check
@@ -0,0 +1,163 @@
+reload: Foo.scala
+
+askTypeCompletion at Foo.scala(2,4)
+================================================================================
+[response] aksTypeCompletion at (2,4)
+retrieved 163 members
+`lazy value numFractional[Double]`
+`method !=(x$1: Any)Boolean`
+`method !=(x$1: AnyRef)Boolean`
+`method !=(x: Byte)Boolean`
+`method !=(x: Char)Boolean`
+`method !=(x: Double)Boolean`
+`method !=(x: Float)Boolean`
+`method !=(x: Int)Boolean`
+`method !=(x: Long)Boolean`
+`method !=(x: Short)Boolean`
+`method ##()Int`
+`method %(x: Byte)Double`
+`method %(x: Char)Double`
+`method %(x: Double)Double`
+`method %(x: Float)Double`
+`method %(x: Int)Double`
+`method %(x: Long)Double`
+`method %(x: Short)Double`
+`method *(x: Byte)Double`
+`method *(x: Char)Double`
+`method *(x: Double)Double`
+`method *(x: Float)Double`
+`method *(x: Int)Double`
+`method *(x: Long)Double`
+`method *(x: Short)Double`
+`method +(x: Byte)Double`
+`method +(x: Char)Double`
+`method +(x: Double)Double`
+`method +(x: Float)Double`
+`method +(x: Int)Double`
+`method +(x: Long)Double`
+`method +(x: Short)Double`
+`method +(x: String)String`
+`method -(x: Byte)Double`
+`method -(x: Char)Double`
+`method -(x: Double)Double`
+`method -(x: Float)Double`
+`method -(x: Int)Double`
+`method -(x: Long)Double`
+`method -(x: Short)Double`
+`method ->[B](y: B)(Double, B)`
+`method /(x: Byte)Double`
+`method /(x: Char)Double`
+`method /(x: Double)Double`
+`method /(x: Float)Double`
+`method /(x: Int)Double`
+`method /(x: Long)Double`
+`method /(x: Short)Double`
+`method <(x: Byte)Boolean`
+`method <(x: Char)Boolean`
+`method <(x: Double)Boolean`
+`method <(x: Float)Boolean`
+`method <(x: Int)Boolean`
+`method <(x: Long)Boolean`
+`method <(x: Short)Boolean`
+`method <=(x: Byte)Boolean`
+`method <=(x: Char)Boolean`
+`method <=(x: Double)Boolean`
+`method <=(x: Float)Boolean`
+`method <=(x: Int)Boolean`
+`method <=(x: Long)Boolean`
+`method <=(x: Short)Boolean`
+`method ==(x$1: Any)Boolean`
+`method ==(x$1: AnyRef)Boolean`
+`method ==(x: Byte)Boolean`
+`method ==(x: Char)Boolean`
+`method ==(x: Double)Boolean`
+`method ==(x: Float)Boolean`
+`method ==(x: Int)Boolean`
+`method ==(x: Long)Boolean`
+`method ==(x: Short)Boolean`
+`method >(x: Byte)Boolean`
+`method >(x: Char)Boolean`
+`method >(x: Double)Boolean`
+`method >(x: Float)Boolean`
+`method >(x: Int)Boolean`
+`method >(x: Long)Boolean`
+`method >(x: Short)Boolean`
+`method >=(x: Byte)Boolean`
+`method >=(x: Char)Boolean`
+`method >=(x: Double)Boolean`
+`method >=(x: Float)Boolean`
+`method >=(x: Int)Boolean`
+`method >=(x: Long)Boolean`
+`method >=(x: Short)Boolean`
+`method abs=> Double`
+`method asInstanceOf[T0]=> T0`
+`method byteValue()Byte`
+`method ceil=> Double`
+`method clone()java.lang.Object`
+`method compare(y: Double)Int`
+`method compareTo(that: Double)Int`
+`method compareTo(x$1: java.lang.Double)Int`
+`method doubleValue()Double`
+`method ensuring(cond: Boolean)Double`
+`method ensuring(cond: Boolean, msg: => Any)Double`
+`method ensuring(cond: Double => Boolean)Double`
+`method ensuring(cond: Double => Boolean, msg: => Any)Double`
+`method eq(x$1: AnyRef)Boolean`
+`method equals(x$1: Any)Boolean`
+`method finalize()Unit`
+`method floatValue()Float`
+`method floor=> Double`
+`method formatted(fmtstr: String)String`
+`method hashCode()Int`
+`method intValue()Int`
+`method isInfinite()Boolean`
+`method isInfinity=> Boolean`
+`method isInstanceOf[T0]=> Boolean`
+`method isNaN()Boolean`
+`method isNegInfinity=> Boolean`
+`method isPosInfinity=> Boolean`
+`method isValidByte=> Boolean`
+`method isValidChar=> Boolean`
+`method isValidInt=> Boolean`
+`method isValidShort=> Boolean`
+`method isWhole()Boolean`
+`method longValue()Long`
+`method max(that: Double)Double`
+`method min(that: Double)Double`
+`method ne(x$1: AnyRef)Boolean`
+`method notify()Unit`
+`method notifyAll()Unit`
+`method round=> Long`
+`method shortValue()Short`
+`method signum=> Int`
+`method synchronized[T0](x$1: T0)T0`
+`method to(end: Double)Range.Partial[Double,scala.collection.immutable.NumericRange[Double]]`
+`method to(end: Double, step: Double)scala.collection.immutable.NumericRange.Inclusive[Double]`
+`method toByte=> Byte`
+`method toChar=> Char`
+`method toDegrees=> Double`
+`method toDouble=> Double`
+`method toFloat=> Float`
+`method toInt=> Int`
+`method toLong=> Long`
+`method toRadians=> Double`
+`method toShort=> Short`
+`method toString()java.lang.String`
+`method unary_+=> Double`
+`method unary_-=> Double`
+`method underlying()AnyRef`
+`method unifiedPrimitiveEquals(x: Any)Boolean`
+`method unifiedPrimitiveHashcode()Int`
+`method until(end: Double)Range.Partial[Double,scala.collection.immutable.NumericRange[Double]]`
+`method until(end: Double, step: Double)scala.collection.immutable.NumericRange.Exclusive[Double]`
+`method wait()Unit`
+`method wait(x$1: Long)Unit`
+`method wait(x$1: Long, x$2: Int)Unit`
+`method →[B](y: B)(Double, B)`
+`type ResultWithoutStepRange.Partial[Double,scala.collection.immutable.NumericRange[Double]]`
+`value integralNumNumeric.DoubleAsIfIntegral.type`
+`value ordOrdering[Double]`
+`value selfAny`
+`value selfDouble`
+`value xDouble`
+================================================================================
diff --git a/test/disabled/presentation/ide-bug-1000508/Runner.scala b/test/disabled/presentation/ide-bug-1000508/Runner.scala
new file mode 100644
index 0000000000..1ef3cf9025
--- /dev/null
+++ b/test/disabled/presentation/ide-bug-1000508/Runner.scala
@@ -0,0 +1,3 @@
+import scala.tools.nsc.interactive.tests._
+
+object Test extends InteractiveTest \ No newline at end of file
diff --git a/test/disabled/presentation/ide-bug-1000508/src/Foo.scala b/test/disabled/presentation/ide-bug-1000508/src/Foo.scala
new file mode 100644
index 0000000000..cb5d9ad5dc
--- /dev/null
+++ b/test/disabled/presentation/ide-bug-1000508/src/Foo.scala
@@ -0,0 +1,3 @@
+object Foo {
+ 1./*!*/
+} \ No newline at end of file
diff --git a/test/disabled/presentation/ide-bug-1000545.check b/test/disabled/presentation/ide-bug-1000545.check
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/test/disabled/presentation/ide-bug-1000545.check
diff --git a/test/disabled/presentation/ide-bug-1000545/Runner.scala b/test/disabled/presentation/ide-bug-1000545/Runner.scala
new file mode 100644
index 0000000000..1ef3cf9025
--- /dev/null
+++ b/test/disabled/presentation/ide-bug-1000545/Runner.scala
@@ -0,0 +1,3 @@
+import scala.tools.nsc.interactive.tests._
+
+object Test extends InteractiveTest \ No newline at end of file
diff --git a/test/disabled/presentation/ide-bug-1000545/src/CompletionFails.scala b/test/disabled/presentation/ide-bug-1000545/src/CompletionFails.scala
new file mode 100644
index 0000000000..917fd43257
--- /dev/null
+++ b/test/disabled/presentation/ide-bug-1000545/src/CompletionFails.scala
@@ -0,0 +1,25 @@
+/**
+ * Presentation compiler returns the wrong answer for this test.
+ *
+ * Below is the current result of running this test:
+ *
+ * Mircos-iMac:test mirco$ ./partest files/presentation/ticket-1000545 --show-log | sed 's/< //'
+ * Testing individual files
+ * testing: [...]/files/presentation/ticket-1000545 [FAILED]
+ * 1,8d0
+ * reload: CompletionFails.scala
+ *
+ * askTypeCompletion at CompletionFails.scala(2,19)
+ * ================================================================================
+ * [response] aksTypeCompletion at (2,19)
+ * retrieved 1 members
+ * TypeMember(method <clinit>,()Unit,false,false,<none>)
+ * ================================================================================
+ *
+ * 1 of 1 tests failed (elapsed time: 00:00:05)
+ *
+ * @note The expected result was the list of static methods for class @see java.io.Console
+ */
+object CompletionFails {
+ java.io.Console. /*!*/
+} \ No newline at end of file
diff --git a/test/disabled/presentation/ide-t1000620.check b/test/disabled/presentation/ide-t1000620.check
new file mode 100644
index 0000000000..3518d7efc6
--- /dev/null
+++ b/test/disabled/presentation/ide-t1000620.check
@@ -0,0 +1,37 @@
+reload: A.scala, B.scala
+
+askTypeCompletion at B.scala(6,6)
+================================================================================
+[response] aksTypeCompletion at (6,6)
+retrieved 36 members
+`method !=(x$1: Any)Boolean`
+`method !=(x$1: AnyRef)Boolean`
+`method ##()Int`
+`method +(other: String)java.lang.String`
+`method ->[B](y: B)(a.A, B)`
+`method ==(x$1: Any)Boolean`
+`method ==(x$1: AnyRef)Boolean`
+`method asInstanceOf[T0]=> T0`
+`method clone()java.lang.Object`
+`method ensuring(cond: Boolean)a.A`
+`method ensuring(cond: Boolean, msg: => Any)a.A`
+`method ensuring(cond: a.A => Boolean)a.A`
+`method ensuring(cond: a.A => Boolean, msg: => Any)a.A`
+`method eq(x$1: AnyRef)Boolean`
+`method equals(x$1: Any)Boolean`
+`method finalize()Unit`
+`method formatted(fmtstr: String)String`
+`method hashCode()Int`
+`method isInstanceOf[T0]=> Boolean`
+`method ne(x$1: AnyRef)Boolean`
+`method notify()Unit`
+`method notifyAll()Unit`
+`method synchronized[T0](x$1: T0)T0`
+`method toString()java.lang.String`
+`method wait()Unit`
+`method wait(x$1: Long)Unit`
+`method wait(x$1: Long, x$2: Int)Unit`
+`method →[B](y: B)(a.A, B)`
+`value selfAny`
+`value xa.A`
+================================================================================
diff --git a/test/disabled/presentation/ide-t1000620/Runner.scala b/test/disabled/presentation/ide-t1000620/Runner.scala
new file mode 100644
index 0000000000..1ef3cf9025
--- /dev/null
+++ b/test/disabled/presentation/ide-t1000620/Runner.scala
@@ -0,0 +1,3 @@
+import scala.tools.nsc.interactive.tests._
+
+object Test extends InteractiveTest \ No newline at end of file
diff --git a/test/disabled/presentation/ide-t1000620/src/a/A.scala b/test/disabled/presentation/ide-t1000620/src/a/A.scala
new file mode 100644
index 0000000000..42a9b34330
--- /dev/null
+++ b/test/disabled/presentation/ide-t1000620/src/a/A.scala
@@ -0,0 +1,5 @@
+package a
+class A {
+ private var a= 0
+ protected var b= 0
+}
diff --git a/test/disabled/presentation/ide-t1000620/src/b/B.scala b/test/disabled/presentation/ide-t1000620/src/b/B.scala
new file mode 100644
index 0000000000..b579f97d6f
--- /dev/null
+++ b/test/disabled/presentation/ide-t1000620/src/b/B.scala
@@ -0,0 +1,8 @@
+package b
+import a.A
+class B {
+ def main(args: Array[String]) {
+ val a = new A()
+ a./*!*/
+ }
+}
diff --git a/test/disabled/presentation/simple-tests.check b/test/disabled/presentation/simple-tests.check
new file mode 100644
index 0000000000..b90dfce77c
--- /dev/null
+++ b/test/disabled/presentation/simple-tests.check
@@ -0,0 +1,390 @@
+reload: Tester.scala
+askTypeCompletion at Tester.scala(16,25)
+
+================================================================================
+[response] aksTypeCompletion at (16,25)
+retreived 75 members
+TypeMember(method !=,(x$1: AnyRef)Boolean,true,true,<none>)
+TypeMember(method !=,(x$1: Any)Boolean,true,true,<none>)
+TypeMember(method ==,(x$1: AnyRef)Boolean,true,true,<none>)
+TypeMember(method ==,(x$1: Any)Boolean,true,true,<none>)
+TypeMember(method >,(that: Tester.this.settings.Setting)Boolean,true,true,<none>)
+TypeMember(method >=,(that: Tester.this.settings.Setting)Boolean,true,true,<none>)
+TypeMember(method ##,()Int,true,true,<none>)
+TypeMember(method <,(that: Tester.this.settings.Setting)Boolean,true,true,<none>)
+TypeMember(method <=,(that: Tester.this.settings.Setting)Boolean,true,true,<none>)
+TypeMember(method ->,[B](y: B)(Tester.this.settings.BooleanSetting, B),true,false,method any2ArrowAssoc)
+TypeMember(method +,(other: String)java.lang.String,true,false,method any2stringadd)
+TypeMember(method →,[B](y: B)(Tester.this.settings.BooleanSetting, B),true,false,method any2ArrowAssoc)
+TypeMember(constructor BooleanSetting,(name: String,descr: String)Tester.this.settings.BooleanSetting,true,false,<none>)
+TypeMember(constructor Object,()java.lang.Object,true,true,<none>)
+TypeMember(constructor StringAdd,(self: Any)scala.runtime.StringAdd,true,false,method any2stringadd)
+TypeMember(constructor ArrowAssoc,(x: Tester.this.settings.BooleanSetting)ArrowAssoc[Tester.this.settings.BooleanSetting],true,false,method any2ArrowAssoc)
+TypeMember(type T,Tester.this.settings.verbose.T,true,false,<none>)
+TypeMember(variable _abbreviations,List[String],false,true,<none>)
+TypeMember(variable _helpSyntax,String,false,true,<none>)
+TypeMember(variable _postSetHook,(Tester.this.settings.verbose.type) => Unit,false,true,<none>)
+TypeMember(method abbreviations,=> List[String],true,true,<none>)
+TypeMember(method asInstanceOf,[T0]=> T0,true,true,<none>)
+TypeMember(method choices,=> List[String],true,true,<none>)
+TypeMember(method clone,()java.lang.Object,false,true,<none>)
+TypeMember(method compare,(that: Tester.this.settings.Setting)Int,true,true,<none>)
+TypeMember(method compareTo,(that: Tester.this.settings.Setting)Int,true,true,<none>)
+TypeMember(method dependencies,=> List[(Tester.this.settings.Setting, String)],true,true,<none>)
+TypeMember(variable dependency,Option[(Tester.this.settings.Setting, String)],false,true,<none>)
+TypeMember(method dependsOn,(s: Tester.this.settings.Setting,value: String)Tester.this.settings.verbose.type,true,true,<none>)
+TypeMember(value descr,String,false,false,<none>)
+TypeMember(method ensuring,(cond: (Tester.this.settings.BooleanSetting) => Boolean,msg: => Any)Tester.this.settings.BooleanSetting,true,false,method any2Ensuring)
+TypeMember(method ensuring,(cond: (Tester.this.settings.BooleanSetting) => Boolean)Tester.this.settings.BooleanSetting,true,false,method any2Ensuring)
+TypeMember(method ensuring,(cond: Boolean,msg: => Any)Tester.this.settings.BooleanSetting,true,false,method any2Ensuring)
+TypeMember(method ensuring,(cond: Boolean)Tester.this.settings.BooleanSetting,true,false,method any2Ensuring)
+TypeMember(method eq,(x$1: AnyRef)Boolean,true,true,<none>)
+TypeMember(method equals,(that: Any)Boolean,true,true,<none>)
+TypeMember(method errorAndValue,[T](msg: String,x: T)T,true,true,<none>)
+TypeMember(method finalize,()Unit,false,true,<none>)
+TypeMember(method formatted,(fmtstr: String)String,true,false,method any2stringadd)
+TypeMember(method hashCode,()Int,true,true,<none>)
+TypeMember(value helpDescription,String,false,true,<none>)
+TypeMember(method helpSyntax,=> String,true,true,<none>)
+TypeMember(method isAdvanced,=> Boolean,true,true,<none>)
+TypeMember(method isDefault,=> Boolean,true,true,<none>)
+TypeMember(method isForDebug,=> Boolean,true,true,<none>)
+TypeMember(method isInstanceOf,[T0]=> Boolean,true,true,<none>)
+TypeMember(method isInternalOnly,=> Boolean,true,true,<none>)
+TypeMember(method isPrivate,=> Boolean,true,true,<none>)
+TypeMember(method isStandard,=> Boolean,true,true,<none>)
+TypeMember(value name,String,false,false,<none>)
+TypeMember(method ne,(x$1: AnyRef)Boolean,true,true,<none>)
+TypeMember(method notify,()Unit,true,true,<none>)
+TypeMember(method notifyAll,()Unit,true,true,<none>)
+TypeMember(method postSetHook,()Unit,true,true,<none>)
+TypeMember(method respondsTo,(label: String)Boolean,true,true,<none>)
+TypeMember(value self,Any,false,false,method any2stringadd)
+TypeMember(variable setByUser,Boolean,false,true,<none>)
+TypeMember(method synchronized,[T0](x$1: T0)T0,true,true,<none>)
+TypeMember(method toString,()String,true,true,<none>)
+TypeMember(method tryToSet,(args: List[String])Some[List[String]],true,false,<none>)
+TypeMember(method tryToSetColon,(args: List[String])Option[Tester.this.settings.ResultOfTryToSet],true,true,<none>)
+TypeMember(method tryToSetFromPropertyValue,(s: String)Unit,true,false,<none>)
+TypeMember(method tryToSetProperty,(args: List[String])Option[Tester.this.settings.ResultOfTryToSet],true,true,<none>)
+TypeMember(method unparse,=> List[String],true,false,<none>)
+TypeMember(variable v,Boolean,false,false,<none>)
+TypeMember(method value,=> Tester.this.settings.verbose.T,true,true,<none>)
+TypeMember(method value_=,(arg: Tester.this.settings.verbose.T)Unit,true,true,<none>)
+TypeMember(method wait,()Unit,true,true,<none>)
+TypeMember(method wait,(x$1: Long,x$2: Int)Unit,true,true,<none>)
+TypeMember(method wait,(x$1: Long)Unit,true,true,<none>)
+TypeMember(method withAbbreviation,(s: String)Tester.this.settings.verbose.type,true,true,<none>)
+TypeMember(method withHelpSyntax,(s: String)Tester.this.settings.verbose.type,true,true,<none>)
+TypeMember(method withPostSetHook,(f: (Tester.this.settings.verbose.type) => Unit)Tester.this.settings.verbose.type,true,true,<none>)
+TypeMember(value x,Tester.this.settings.BooleanSetting,false,false,method any2ArrowAssoc)
+askTypeCompletion at Tester.scala(23,24)
+
+================================================================================
+[response] aksTypeCompletion at (23,24)
+retreived 46 members
+TypeMember(method !=,(x$1: AnyRef)Boolean,true,true,<none>)
+TypeMember(method !=,(x$1: Any)Boolean,true,true,<none>)
+TypeMember(method ==,(x$1: AnyRef)Boolean,true,true,<none>)
+TypeMember(method ==,(x$1: Any)Boolean,true,true,<none>)
+TypeMember(method ##,()Int,true,true,<none>)
+TypeMember(method ->,[B](y: B)(scala.tools.nsc.interactive.Response[U], B),true,false,method any2ArrowAssoc)
+TypeMember(method +,(other: String)java.lang.String,true,false,method any2stringadd)
+TypeMember(method →,[B](y: B)(scala.tools.nsc.interactive.Response[U], B),true,false,method any2ArrowAssoc)
+TypeMember(constructor Response,()scala.tools.nsc.interactive.Response[U],true,false,<none>)
+TypeMember(constructor StringAdd,(self: Any)scala.runtime.StringAdd,true,false,method any2stringadd)
+TypeMember(constructor ArrowAssoc,(x: scala.tools.nsc.interactive.Response[U])ArrowAssoc[scala.tools.nsc.interactive.Response[U]],true,false,method any2ArrowAssoc)
+TypeMember(method asInstanceOf,[T0]=> T0,true,true,<none>)
+TypeMember(method cancel,()Unit,true,false,<none>)
+TypeMember(variable cancelled,Boolean,false,false,<none>)
+TypeMember(method clear,()Unit,true,false,<none>)
+TypeMember(method clone,()java.lang.Object,false,true,<none>)
+TypeMember(variable complete,Boolean,false,false,<none>)
+TypeMember(variable data,Option[Either[U,Throwable]],false,false,<none>)
+TypeMember(method ensuring,(cond: (scala.tools.nsc.interactive.Response[U]) => Boolean,msg: => Any)scala.tools.nsc.interactive.Response[U],true,false,method any2Ensuring)
+TypeMember(method ensuring,(cond: (scala.tools.nsc.interactive.Response[U]) => Boolean)scala.tools.nsc.interactive.Response[U],true,false,method any2Ensuring)
+TypeMember(method ensuring,(cond: Boolean,msg: => Any)scala.tools.nsc.interactive.Response[U],true,false,method any2Ensuring)
+TypeMember(method ensuring,(cond: Boolean)scala.tools.nsc.interactive.Response[U],true,false,method any2Ensuring)
+TypeMember(method eq,(x$1: AnyRef)Boolean,true,true,<none>)
+TypeMember(method equals,(x$1: Any)Boolean,true,true,<none>)
+TypeMember(method finalize,()Unit,false,true,<none>)
+TypeMember(method formatted,(fmtstr: String)String,true,false,method any2stringadd)
+TypeMember(method get,(timeout: Long)Option[Either[U,Throwable]],true,false,<none>)
+TypeMember(method get,=> Either[U,Throwable],true,false,<none>)
+TypeMember(method hashCode,()Int,true,true,<none>)
+TypeMember(method isCancelled,=> Boolean,true,false,<none>)
+TypeMember(method isComplete,=> Boolean,true,false,<none>)
+TypeMember(method isInstanceOf,[T0]=> Boolean,true,true,<none>)
+TypeMember(method ne,(x$1: AnyRef)Boolean,true,true,<none>)
+TypeMember(method notify,()Unit,true,true,<none>)
+TypeMember(method notifyAll,()Unit,true,true,<none>)
+TypeMember(method raise,(exc: Throwable)Unit,true,false,<none>)
+TypeMember(value self,Any,false,false,method any2stringadd)
+TypeMember(method set,(x: U)Unit,true,false,<none>)
+TypeMember(method setProvisionally,(x: U)Unit,true,false,<none>)
+TypeMember(method synchronized,[T0](x$1: T0)T0,true,true,<none>)
+TypeMember(method toString,()java.lang.String,true,true,<none>)
+TypeMember(method wait,()Unit,true,true,<none>)
+TypeMember(method wait,(x$1: Long,x$2: Int)Unit,true,true,<none>)
+TypeMember(method wait,(x$1: Long)Unit,true,true,<none>)
+TypeMember(value x,scala.tools.nsc.interactive.Response[U],false,false,method any2ArrowAssoc)
+askTypeCompletion at Tester.scala(27,23)
+
+================================================================================
+[response] aksTypeCompletion at (27,23)
+retreived 196 members
+TypeMember(method !=,(x$1: AnyRef)Boolean,true,true,<none>)
+TypeMember(method !=,(x$1: Any)Boolean,true,true,<none>)
+TypeMember(method ==,(x$1: AnyRef)Boolean,true,true,<none>)
+TypeMember(method ==,(x$1: Any)Boolean,true,true,<none>)
+TypeMember(method ##,()Int,true,true,<none>)
+TypeMember(method ->,[B](y: B)(scala.tools.nsc.Settings, B),true,false,method any2ArrowAssoc)
+TypeMember(method +,(other: String)java.lang.String,true,false,method any2stringadd)
+TypeMember(method →,[B](y: B)(scala.tools.nsc.Settings, B),true,false,method any2ArrowAssoc)
+TypeMember(constructor Settings,()scala.tools.nsc.Settings,true,false,<none>)
+TypeMember(constructor Settings,(errorFn: (String) => Unit)scala.tools.nsc.Settings,true,false,<none>)
+TypeMember(constructor StringAdd,(self: Any)scala.runtime.StringAdd,true,false,method any2stringadd)
+TypeMember(constructor ArrowAssoc,(x: scala.tools.nsc.Settings)ArrowAssoc[scala.tools.nsc.Settings],true,false,method any2ArrowAssoc)
+TypeMember(trait AbsSetting,Tester.this.settings.AbsSetting,true,true,<none>)
+TypeMember(trait AbsSettingValue,Tester.this.settings.AbsSettingValue,true,true,<none>)
+TypeMember(class BooleanSetting,Tester.this.settings.BooleanSetting,true,true,<none>)
+TypeMember(method BooleanSetting,(name: String,descr: String)Tester.this.settings.BooleanSetting,true,true,<none>)
+TypeMember(class ChoiceSetting,Tester.this.settings.ChoiceSetting,true,true,<none>)
+TypeMember(method ChoiceSetting,(name: String,helpArg: String,descr: String,choices: List[String],default: String)Tester.this.settings.ChoiceSetting,true,true,<none>)
+TypeMember(class IntSetting,Tester.this.settings.IntSetting,true,true,<none>)
+TypeMember(method IntSetting,(name: String,descr: String,default: Int,range: Option[(Int, Int)],parser: (String) => Option[Int])Tester.this.settings.IntSetting,true,true,<none>)
+TypeMember(trait InternalSetting,Tester.this.settings.InternalSetting,true,true,<none>)
+TypeMember(class MultiStringSetting,Tester.this.settings.MultiStringSetting,true,true,<none>)
+TypeMember(method MultiStringSetting,(name: String,arg: String,descr: String)Tester.this.settings.MultiStringSetting,true,true,<none>)
+TypeMember(class OutputDirs,Tester.this.settings.OutputDirs,true,true,<none>)
+TypeMember(class OutputSetting,Tester.this.settings.OutputSetting,true,true,<none>)
+TypeMember(method OutputSetting,(outputDirs: Tester.this.settings.OutputDirs,default: String)Tester.this.settings.OutputSetting,true,true,<none>)
+TypeMember(class PathSetting,Tester.this.settings.PathSetting,true,true,<none>)
+TypeMember(method PathSetting,(name: String,descr: String,default: String)Tester.this.settings.PathSetting,true,true,<none>)
+TypeMember(class PhasesSetting,Tester.this.settings.PhasesSetting,true,true,<none>)
+TypeMember(method PhasesSetting,(name: String,descr: String)Tester.this.settings.PhasesSetting,true,true,<none>)
+TypeMember(type ResultOfTryToSet,Tester.this.settings.ResultOfTryToSet,true,true,<none>)
+TypeMember(class Setting,Tester.this.settings.Setting,true,true,<none>)
+TypeMember(class SettingGroup,Tester.this.settings.SettingGroup,true,true,<none>)
+TypeMember(lazy value SettingOrdering,Ordering[Tester.this.settings.Setting],false,true,<none>)
+TypeMember(trait SettingValue,Tester.this.settings.SettingValue,true,true,<none>)
+TypeMember(method StringSetting,(name: String,arg: String,descr: String,default: String)Tester.this.settings.StringSetting,true,true,<none>)
+TypeMember(class StringSetting,Tester.this.settings.StringSetting,true,true,<none>)
+TypeMember(method XO,=> Tester.this.settings.BooleanSetting,true,true,<none>)
+TypeMember(value Xchecknull,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value Xcloselim,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value Xdce,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value Xexperimental,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value Xhelp,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value Xlinearizer,Tester.this.settings.ChoiceSetting,false,true,<none>)
+TypeMember(value XlogImplicits,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value Xmigration28,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value Xnojline,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value Xprint,Tester.this.settings.PhasesSetting,false,true,<none>)
+TypeMember(value Xprintpos,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value Xshowcls,Tester.this.settings.StringSetting,false,true,<none>)
+TypeMember(value Xshowobj,Tester.this.settings.StringSetting,false,true,<none>)
+TypeMember(value Xshowtrees,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value Xwarnfatal,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value Xwarninit,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value Ybuilderdebug,Tester.this.settings.ChoiceSetting,false,true,<none>)
+TypeMember(value Ybuildmanagerdebug,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value Ycompacttrees,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value Ycompletion,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value YdepMethTpes,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value Yhelp,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value Yidedebug,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value Ylogcp,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value YmethodInfer,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value Ymurmur,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value Ynogenericsig,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value Ynosqueeze,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value Ynotnull,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value Ypmatdebug,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value Ypmatnaive,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value YpresentationDebug,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value YpresentationLog,Tester.this.settings.StringSetting,false,true,<none>)
+TypeMember(value YpresentationReplay,Tester.this.settings.StringSetting,false,true,<none>)
+TypeMember(value YpresentationVerbose,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value Yprofile,Tester.this.settings.PhasesSetting,false,true,<none>)
+TypeMember(value YprofileClass,Tester.this.settings.StringSetting,false,true,<none>)
+TypeMember(value YprofileMem,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value Yrangepos,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value Yrecursion,Tester.this.settings.IntSetting,false,true,<none>)
+TypeMember(value Yrepldebug,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value YrichExes,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value Yshow,Tester.this.settings.PhasesSetting,false,true,<none>)
+TypeMember(value Ystatistics,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value Ytyperdebug,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value Yverifysigs,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value YvirtClasses,Boolean,false,true,<none>)
+TypeMember(value Ywarndeadcode,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(method add,[T <: Tester.this.settings.Setting](s: T)T,false,true,<none>)
+TypeMember(lazy value allSettings,scala.collection.mutable.HashSet[Tester.this.settings.Setting],false,true,<none>)
+TypeMember(value argfiles,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(method asInstanceOf,[T0]=> T0,true,true,<none>)
+TypeMember(value assemextdirs,Tester.this.settings.StringSetting,false,true,<none>)
+TypeMember(value assemname,Tester.this.settings.StringSetting,false,true,<none>)
+TypeMember(value assemrefs,Tester.this.settings.StringSetting,false,true,<none>)
+TypeMember(value bootclasspath,Tester.this.settings.PathSetting,false,true,<none>)
+TypeMember(value browse,Tester.this.settings.PhasesSetting,false,true,<none>)
+TypeMember(value check,Tester.this.settings.PhasesSetting,false,true,<none>)
+TypeMember(method checkDependencies,=> Boolean,true,true,<none>)
+TypeMember(value checkInit,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value classpath,Tester.this.settings.PathSetting,false,true,<none>)
+TypeMember(method clone,()java.lang.Object,false,true,<none>)
+TypeMember(method copy,()scala.tools.nsc.Settings,true,true,<none>)
+TypeMember(value d,Tester.this.settings.OutputSetting,false,true,<none>)
+TypeMember(value debug,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(method debuginfo,=> Tester.this.settings.ChoiceSetting,true,true,<none>)
+TypeMember(method dependenciesFile,=> Tester.this.settings.StringSetting,true,true,<none>)
+TypeMember(value dependencyfile,Tester.this.settings.StringSetting,false,true,<none>)
+TypeMember(value deprecation,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(method disable,(s: Tester.this.settings.Setting)scala.collection.mutable.HashSet[Tester.this.settings.Setting],true,true,<none>)
+TypeMember(value disable,Tester.this.settings.MultiStringSetting,false,true,<none>)
+TypeMember(value elidebelow,Tester.this.settings.IntSetting,false,true,<none>)
+TypeMember(method embeddedDefaults,(loader: java.lang.ClassLoader)Unit,true,true,<none>)
+TypeMember(method embeddedDefaults,[T](implicit evidence$1: Manifest[T])Unit,true,true,<none>)
+TypeMember(value encoding,Tester.this.settings.StringSetting,false,true,<none>)
+TypeMember(method ensuring,(cond: (scala.tools.nsc.Settings) => Boolean,msg: => Any)scala.tools.nsc.Settings,true,false,method any2Ensuring)
+TypeMember(method ensuring,(cond: (scala.tools.nsc.Settings) => Boolean)scala.tools.nsc.Settings,true,false,method any2Ensuring)
+TypeMember(method ensuring,(cond: Boolean,msg: => Any)scala.tools.nsc.Settings,true,false,method any2Ensuring)
+TypeMember(method ensuring,(cond: Boolean)scala.tools.nsc.Settings,true,false,method any2Ensuring)
+TypeMember(method eq,(x$1: AnyRef)Boolean,true,true,<none>)
+TypeMember(method equals,(that: Any)Boolean,true,true,<none>)
+TypeMember(value errorFn,(String) => Unit,false,false,<none>)
+TypeMember(value explaintypes,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(variable explicitParentLoader,Option[java.lang.ClassLoader],false,true,<none>)
+TypeMember(value extdirs,Tester.this.settings.PathSetting,false,true,<none>)
+TypeMember(method finalize,()Unit,false,true,<none>)
+TypeMember(method formatted,(fmtstr: String)String,true,false,method any2stringadd)
+TypeMember(value fscShutdown,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value future,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value g,Tester.this.settings.ChoiceSetting,false,true,<none>)
+TypeMember(value genPhaseGraph,Tester.this.settings.StringSetting,false,true,<none>)
+TypeMember(method getClasspath,(id: String,loader: java.lang.ClassLoader)Option[String],false,true,<none>)
+TypeMember(method hashCode,()Int,true,true,<none>)
+TypeMember(value help,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value inline,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(method isInstanceOf,[T0]=> Boolean,true,true,<none>)
+TypeMember(value javabootclasspath,Tester.this.settings.PathSetting,false,true,<none>)
+TypeMember(value javaextdirs,Tester.this.settings.PathSetting,false,true,<none>)
+TypeMember(value log,Tester.this.settings.PhasesSetting,false,true,<none>)
+TypeMember(method lookupSetting,(cmd: String)Option[Tester.this.settings.Setting],true,true,<none>)
+TypeMember(value make,Tester.this.settings.ChoiceSetting,false,true,<none>)
+TypeMember(method ne,(x$1: AnyRef)Boolean,true,true,<none>)
+TypeMember(value noCompletion,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value noForwarders,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value noSelfCheck,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value noassertions,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value noimports,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value nospecialization,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(method notify,()Unit,true,true,<none>)
+TypeMember(method notifyAll,()Unit,true,true,<none>)
+TypeMember(value nouescape,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value nowarn,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(method nowarnings,=> Tester.this.settings.BooleanSetting,true,true,<none>)
+TypeMember(value optimise,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(method outdir,=> Tester.this.settings.OutputSetting,true,true,<none>)
+TypeMember(lazy value outputDirs,Tester.this.settings.OutputDirs,false,true,<none>)
+TypeMember(method parseParams,(args: List[String])List[String],false,true,<none>)
+TypeMember(value plugin,Tester.this.settings.MultiStringSetting,false,true,<none>)
+TypeMember(value pluginOptions,Tester.this.settings.MultiStringSetting,false,true,<none>)
+TypeMember(value pluginsDir,Tester.this.settings.StringSetting,false,true,<none>)
+TypeMember(value print,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(method printLate,=> Tester.this.settings.BooleanSetting,true,true,<none>)
+TypeMember(value printtypes,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(method processArgumentString,(params: String)(Boolean, List[String]),true,true,<none>)
+TypeMember(method processArguments,(arguments: List[String],processAll: Boolean)(Boolean, List[String]),true,true,<none>)
+TypeMember(value prompt,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(method recreateArgs,=> List[String],true,true,<none>)
+TypeMember(value refinementMethodDispatch,Tester.this.settings.ChoiceSetting,false,true,<none>)
+TypeMember(value require,Tester.this.settings.MultiStringSetting,false,true,<none>)
+TypeMember(value resident,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value script,Tester.this.settings.StringSetting,false,true,<none>)
+TypeMember(value self,Any,false,false,method any2stringadd)
+TypeMember(value selfInAnnots,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value showPhases,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value showPlugins,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value skip,Tester.this.settings.PhasesSetting,false,true,<none>)
+TypeMember(value sourceReader,Tester.this.settings.StringSetting,false,true,<none>)
+TypeMember(value sourcedir,Tester.this.settings.StringSetting,false,true,<none>)
+TypeMember(value sourcepath,Tester.this.settings.PathSetting,false,true,<none>)
+TypeMember(method splitParams,(line: String)List[String],true,true,<none>)
+TypeMember(value stop,Tester.this.settings.PhasesSetting,false,true,<none>)
+TypeMember(method synchronized,[T0](x$1: T0)T0,true,true,<none>)
+TypeMember(value target,Tester.this.settings.ChoiceSetting,false,true,<none>)
+TypeMember(method toConciseString,=> String,true,true,<none>)
+TypeMember(method toString,()String,true,true,<none>)
+TypeMember(value unchecked,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value uniqid,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value usejavacp,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(method userSetSettings,=> scala.collection.Set[Tester.this.settings.Setting],true,true,<none>)
+TypeMember(value verbose,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value version,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(method visibleSettings,=> scala.collection.Set[Tester.this.settings.Setting],true,true,<none>)
+TypeMember(method wait,()Unit,true,true,<none>)
+TypeMember(method wait,(x$1: Long,x$2: Int)Unit,true,true,<none>)
+TypeMember(method wait,(x$1: Long)Unit,true,true,<none>)
+TypeMember(value writeICode,Tester.this.settings.BooleanSetting,false,true,<none>)
+TypeMember(value x,scala.tools.nsc.Settings,false,false,method any2ArrowAssoc)
+askTypeCompletion at Tester.scala(105,29)
+
+================================================================================
+[response] aksTypeCompletion at (105,29)
+retreived 50 members
+TypeMember(method !=,(x$1: AnyRef)Boolean,true,true,<none>)
+TypeMember(method !=,(x$1: Any)Boolean,true,true,<none>)
+TypeMember(method ==,(x$1: AnyRef)Boolean,true,true,<none>)
+TypeMember(method ==,(x$1: Any)Boolean,true,true,<none>)
+TypeMember(method ##,()Int,true,true,<none>)
+TypeMember(method ->,[B](y: B)(scala.tools.nsc.util.SourceFile, B),true,false,method any2ArrowAssoc)
+TypeMember(method +,(other: String)java.lang.String,true,false,method any2stringadd)
+TypeMember(method →,[B](y: B)(scala.tools.nsc.util.SourceFile, B),true,false,method any2ArrowAssoc)
+TypeMember(constructor SourceFile,()scala.tools.nsc.util.SourceFile,true,false,<none>)
+TypeMember(constructor StringAdd,(self: Any)scala.runtime.StringAdd,true,false,method any2stringadd)
+TypeMember(constructor ArrowAssoc,(x: scala.tools.nsc.util.SourceFile)ArrowAssoc[scala.tools.nsc.util.SourceFile],true,false,method any2ArrowAssoc)
+TypeMember(method asInstanceOf,[T0]=> T0,true,true,<none>)
+TypeMember(method beginsWith,(offset: Int,text: String)Boolean,true,false,<none>)
+TypeMember(method clone,()java.lang.Object,false,true,<none>)
+TypeMember(method content,=> Array[Char],true,false,<none>)
+TypeMember(method dbg,(offset: Int)java.lang.String,true,false,<none>)
+TypeMember(method ensuring,(cond: (scala.tools.nsc.util.SourceFile) => Boolean,msg: => Any)scala.tools.nsc.util.SourceFile,true,false,method any2Ensuring)
+TypeMember(method ensuring,(cond: (scala.tools.nsc.util.SourceFile) => Boolean)scala.tools.nsc.util.SourceFile,true,false,method any2Ensuring)
+TypeMember(method ensuring,(cond: Boolean,msg: => Any)scala.tools.nsc.util.SourceFile,true,false,method any2Ensuring)
+TypeMember(method ensuring,(cond: Boolean)scala.tools.nsc.util.SourceFile,true,false,method any2Ensuring)
+TypeMember(method eq,(x$1: AnyRef)Boolean,true,true,<none>)
+TypeMember(method equals,(x$1: Any)Boolean,true,true,<none>)
+TypeMember(method file,=> scala.tools.nsc.io.AbstractFile,true,false,<none>)
+TypeMember(method finalize,()Unit,false,true,<none>)
+TypeMember(method formatted,(fmtstr: String)String,true,false,method any2stringadd)
+TypeMember(method hashCode,()Int,true,true,<none>)
+TypeMember(method identifier,(pos: scala.tools.nsc.util.Position,compiler: scala.tools.nsc.Global)Option[String],true,false,<none>)
+TypeMember(method isInstanceOf,[T0]=> Boolean,true,true,<none>)
+TypeMember(method isLineBreak,(idx: Int)Boolean,true,false,<none>)
+TypeMember(method isSelfContained,=> Boolean,true,false,<none>)
+TypeMember(method length,=> Int,true,false,<none>)
+TypeMember(method lineToOffset,(index: Int)Int,true,false,<none>)
+TypeMember(method lineToString,(index: Int)String,true,false,<none>)
+TypeMember(method ne,(x$1: AnyRef)Boolean,true,true,<none>)
+TypeMember(method notify,()Unit,true,true,<none>)
+TypeMember(method notifyAll,()Unit,true,true,<none>)
+TypeMember(method offsetToLine,(offset: Int)Int,true,false,<none>)
+TypeMember(method path,=> String,true,false,<none>)
+TypeMember(method position,(line: Int,column: Int)scala.tools.nsc.util.Position,true,false,<none>)
+TypeMember(method position,(offset: Int)scala.tools.nsc.util.Position,true,false,<none>)
+TypeMember(method positionInUltimateSource,(position: scala.tools.nsc.util.Position)scala.tools.nsc.util.Position,true,false,<none>)
+TypeMember(value self,Any,false,false,method any2stringadd)
+TypeMember(method skipWhitespace,(offset: Int)Int,true,false,<none>)
+TypeMember(method synchronized,[T0](x$1: T0)T0,true,true,<none>)
+TypeMember(method toString,()String,true,false,<none>)
+TypeMember(method wait,()Unit,true,true,<none>)
+TypeMember(method wait,(x$1: Long,x$2: Int)Unit,true,true,<none>)
+TypeMember(method wait,(x$1: Long)Unit,true,true,<none>)
+TypeMember(value x,scala.tools.nsc.util.SourceFile,false,false,method any2ArrowAssoc)
+askTypeAt at Tester.scala(18,13)
+[response] askTypeAt at (18,13)
+val limit: Long = java.this.lang.System.currentTimeMillis().+(Tester.this.randomDelayMillis)
+askTypeAt at Tester.scala(19,11)
+[response] askTypeAt at (19,11)
+val res: scala.tools.nsc.interactive.Response[U] = new scala.tools.nsc.interactive.Response[U]()
diff --git a/test/disabled/presentation/simple-tests.javaopts b/test/disabled/presentation/simple-tests.javaopts
new file mode 100644
index 0000000000..4af888f9c2
--- /dev/null
+++ b/test/disabled/presentation/simple-tests.javaopts
@@ -0,0 +1 @@
+-Dfile.encoding=UTF-8 \ No newline at end of file
diff --git a/test/disabled/presentation/simple-tests.opts b/test/disabled/presentation/simple-tests.opts
new file mode 100644
index 0000000000..8529bbf1a0
--- /dev/null
+++ b/test/disabled/presentation/simple-tests.opts
@@ -0,0 +1,18 @@
+# This file contains command line options that are passed to the presentation compiler
+# Lines starting with # are stripped, and you can split arguments on several lines.
+
+# The -bootclasspath option is treated specially by the test framework: if it's not specified
+# in this file, the presentation compiler will pick up the scala-library/compiler that's on the
+# java classpath used to run this test (usually build/pack)
+
+# Any option can be passed this way, like presentation debug
+# -Ypresentation-debug
+
+# the classpath is relative to the current working directory. That means it depends where you're
+# running partest from. Run it from the root scala checkout for these files to resolve correctly
+# (by default when running 'ant test', or 'test/partest'). Paths use Unix separators, the test
+# framework translates them to the platform dependent representation.
+-bootclasspath lib/scala-compiler.jar:lib/scala-library.jar:lib/fjbg.jar
+
+# the following line would test using the quick compiler
+# -bootclasspath build/quick/classes/compiler:build/quick/classes/library:lib/fjbg.jar
diff --git a/test/disabled/presentation/simple-tests/SimpleInteractiveTest.scala b/test/disabled/presentation/simple-tests/SimpleInteractiveTest.scala
new file mode 100644
index 0000000000..014fd24b6f
--- /dev/null
+++ b/test/disabled/presentation/simple-tests/SimpleInteractiveTest.scala
@@ -0,0 +1,11 @@
+import scala.tools.nsc.interactive.tests._
+
+/** Simple test that shows how to use the InteractiveTest class. It uses the
+ * inherited runTest method that runs completion and typedAt tests on all
+ * sources found under src/
+ */
+object Test extends InteractiveTest {
+ override val runRandomTests = false
+// settings.YpresentationDebug.value = true
+// override val synchronousRequests = false
+}
diff --git a/test/disabled/presentation/simple-tests/src/Tester.scala b/test/disabled/presentation/simple-tests/src/Tester.scala
new file mode 100644
index 0000000000..b039470ae7
--- /dev/null
+++ b/test/disabled/presentation/simple-tests/src/Tester.scala
@@ -0,0 +1,204 @@
+package scala.tools.nsc
+package interactive
+package tests
+
+import util._
+import reporters._
+import io.AbstractFile
+import collection.mutable.ArrayBuffer
+
+class Tester(ntests: Int, inputs: Array[SourceFile], settings: Settings) {
+
+ val reporter = new StoreReporter
+ val compiler = new Global(settings, reporter)
+
+ def askAndListen[T, U](msg: String, arg: T, op: (T, Response[U]) => Unit) {
+ if (settings.verbose./*!*/value) print(msg+" "+arg+": ")
+ val TIMEOUT = 10 // ms
+ val limit/*?*/ = System.currentTimeMillis() + randomDelayMillis
+ val res/*?*/ = new Response[U]
+ op(arg, res)
+ while (!res.isComplete && !res.isCancelled) {
+ if (System.currentTimeMillis() > limit) {
+ print("c"); res./*!*/cancel()
+ } else res.get(TIMEOUT) match {
+ case Some(Left(t)) =>
+ /**/
+ if (settings./*!*/verbose.value) println(t)
+ case Some(Right(ex)) =>
+ ex.printStackTrace()
+ println(ex)
+ case None =>
+ }
+ }
+ }
+
+ def askReload(sfs: SourceFile*) = askAndListen("reload", sfs.toList, compiler.askReload)
+ def askTypeAt(pos: Position) = askAndListen("type at", pos, compiler.askTypeAt)
+ def askTypeCompletion(pos: Position) = askAndListen("type at", pos, compiler.askTypeCompletion)
+ def askScopeCompletion(pos: Position) = askAndListen("type at", pos, compiler.askScopeCompletion)
+
+ val rand = new java.util.Random()
+
+ private def randomInverse(n: Int) = n / (rand.nextInt(n) + 1)
+
+ private def randomDecreasing(n: Int) = {
+ var r = rand.nextInt((1 to n).sum)
+ var limit = n
+ var result = 0
+ while (r > limit) {
+ result += 1
+ r -= limit
+ limit -= 1
+ }
+ result
+ }
+
+ def randomSourceFileIdx() = rand.nextInt(inputs.length)
+
+ def randomBatchesPerSourceFile(): Int = randomDecreasing(100)
+
+ def randomChangesPerBatch(): Int = randomInverse(50)
+
+ def randomPositionIn(sf: SourceFile) = rand.nextInt(sf.content.length)
+
+ def randomNumChars() = randomInverse(100)
+
+ def randomDelayMillis = randomInverse(10000)
+
+ class Change(sfidx: Int, start: Int, nchars: Int, toLeft: Boolean) {
+
+ private var pos = start
+ private var deleted: List[Char] = List()
+
+ override def toString =
+ "In "+inputs(sfidx)+" at "+start+" take "+nchars+" to "+
+ (if (toLeft) "left" else "right")
+
+ def deleteOne() {
+ val sf = inputs(sfidx)
+ deleted = sf.content(pos) :: deleted
+ val sf1 = new BatchSourceFile(sf.file, sf.content.take(pos) ++ sf.content.drop(pos + 1))
+ inputs(sfidx) = sf1
+ askReload(sf1)
+ }
+
+ def deleteAll() {
+ print("/"+nchars)
+ for (i <- 0 until nchars) {
+ if (toLeft) {
+ if (pos > 0 && pos <= inputs(sfidx).length) {
+ pos -= 1
+ deleteOne()
+ }
+ } else {
+ if (pos < inputs(sfidx).length) {
+ deleteOne()
+ }
+ }
+ }
+ }
+
+ def insertAll() {
+ for (chr <- if (toLeft) deleted else deleted.reverse) {
+ val sf = inputs(sfidx)
+ val (pre, post) = sf./*!*/content splitAt pos
+ pos += 1
+ val sf1 = new BatchSourceFile(sf.file, pre ++ (chr +: post))
+ inputs(sfidx) = sf1
+ askReload(sf1)
+ }
+ }
+ }
+
+ val testComment = "/**/"
+
+ def testFileChanges(sfidx: Int) = {
+ lazy val testPositions: Seq[Int] = {
+ val sf = inputs(sfidx)
+ val buf = new ArrayBuffer[Int]
+ var pos = sf.content.indexOfSlice(testComment)
+ while (pos > 0) {
+ buf += pos
+ pos = sf.content.indexOfSlice(testComment, pos + 1)
+ }
+ buf
+ }
+ def otherTest() {
+ if (testPositions.nonEmpty) {
+ val pos = new OffsetPosition(inputs(sfidx), rand.nextInt(testPositions.length))
+ rand.nextInt(3) match {
+ case 0 => askTypeAt(pos)
+ case 1 => askTypeCompletion(pos)
+ case 2 => askScopeCompletion(pos)
+ }
+ }
+ }
+ for (i <- 0 until randomBatchesPerSourceFile()) {
+ val changes = Vector.fill(/**/randomChangesPerBatch()) {
+ /**/
+ new Change(sfidx, randomPositionIn(inputs(sfidx)), randomNumChars(), rand.nextBoolean())
+ }
+ doTest(sfidx, changes, testPositions, otherTest) match {
+ case Some(errortrace) =>
+ println(errortrace)
+ minimize(errortrace)
+ case None =>
+ }
+ }
+ }
+
+ def doTest(sfidx: Int, changes: Seq[Change], testPositions: Seq[Int], otherTest: () => Unit): Option[ErrorTrace] = {
+ print("new round with "+changes.length+" changes:")
+ changes foreach (_.deleteAll())
+ otherTest()
+ def errorCount() = compiler.ask(() => reporter.ERROR.count)
+// println("\nhalf test round: "+errorCount())
+ changes.view.reverse foreach (_.insertAll())
+ otherTest()
+ println("done test round: "+errorCount())
+ if (errorCount() != 0)
+ Some(ErrorTrace(sfidx, changes, reporter.infos, inputs(sfidx).content))
+ else
+ None
+ }
+
+ case class ErrorTrace(
+ sfidx: Int, changes: Seq[Change], infos: collection.Set[reporter.Info], content: Array[Char]) {
+ override def toString =
+ "Sourcefile: "+inputs(sfidx)+
+ "\nChanges:\n "+changes.mkString("\n ")+
+ "\nErrors:\n "+infos.mkString("\n ")+
+ "\nContents:\n"+content.mkString
+ }
+
+ def minimize(etrace: ErrorTrace) {}
+
+ /**/
+ def run() {
+ askReload(inputs: _*)
+ for (i <- 0 until ntests)
+ testFileChanges(randomSourceFileIdx())
+ }
+}
+
+/* A program to do presentation compiler stress tests.
+ * Usage:
+ *
+ * scala scala.tools.nsc.interactive.test.Tester <n> <files>
+ *
+ * where <n> is the number os tests to be run and <files> is the set of files to test.
+ * This will do random deletions and re-insertions in any of the files.
+ * At places where an empty comment /**/ appears it will in addition randomly
+ * do ask-types, type-completions, or scope-completions.
+ */
+object Tester {
+ def main(args: Array[String]) {
+ val settings = new Settings()
+ val (_, filenames) = settings.processArguments(args.toList.tail, true)
+ println("filenames = "+filenames)
+ val files = filenames.toArray map (str => new BatchSourceFile(AbstractFile.getFile(str)): SourceFile)
+ new Tester(args(0).toInt, files, settings).run()
+ sys.exit(0)
+ }
+}
diff --git a/test/disabled/presentation/timeofday.check b/test/disabled/presentation/timeofday.check
new file mode 100644
index 0000000000..2a09d0bcfc
--- /dev/null
+++ b/test/disabled/presentation/timeofday.check
@@ -0,0 +1,100 @@
+reload: timeofday.scala
+
+askTypeCompletion at timeofday.scala(26,33)
+================================================================================
+[response] aksTypeCompletion at (26,33)
+retrieved 45 members
+`method !=(x$1: Any)Boolean`
+`method !=(x$1: AnyRef)Boolean`
+`method ##()Int`
+`method +(other: String)String`
+`method ->[B](y: B)(timeofday.TimeOfDayVar, B)`
+`method ==(x$1: Any)Boolean`
+`method ==(x$1: AnyRef)Boolean`
+`method asInstanceOf[T0]=> T0`
+`method clone()Object`
+`method ensuring(cond: Boolean)timeofday.TimeOfDayVar`
+`method ensuring(cond: Boolean, msg: => Any)timeofday.TimeOfDayVar`
+`method ensuring(cond: timeofday.TimeOfDayVar => Boolean)timeofday.TimeOfDayVar`
+`method ensuring(cond: timeofday.TimeOfDayVar => Boolean, msg: => Any)timeofday.TimeOfDayVar`
+`method eq(x$1: AnyRef)Boolean`
+`method equals(x$1: Any)Boolean`
+`method finalize()Unit`
+`method formatted(fmtstr: String)String`
+`method hashCode()Int`
+`method hours=> Int`
+`method hours_=(h: Int)Unit`
+`method isInstanceOf[T0]=> Boolean`
+`method minutes=> Int`
+`method minutes_=(m: Int)Unit`
+`method ne(x$1: AnyRef)Boolean`
+`method notify()Unit`
+`method notifyAll()Unit`
+`method seconds=> Int`
+`method seconds_=(s: Int)Unit`
+`method synchronized[T0](x$1: T0)T0`
+`method toString()String`
+`method wait()Unit`
+`method wait(x$1: Long)Unit`
+`method wait(x$1: Long, x$2: Int)Unit`
+`method x=> timeofday.TimeOfDayVar`
+`method →[B](y: B)(timeofday.TimeOfDayVar, B)`
+`value __leftOfArrowtimeofday.TimeOfDayVar`
+`value __resultOfEnsuringtimeofday.TimeOfDayVar`
+`value selfAny`
+`variable hInt`
+`variable mInt`
+`variable sInt`
+================================================================================
+
+askTypeCompletion at timeofday.scala(32,19)
+================================================================================
+[response] aksTypeCompletion at (32,19)
+retrieved 45 members
+`method !=(x$1: Any)Boolean`
+`method !=(x$1: AnyRef)Boolean`
+`method ##()Int`
+`method +(other: String)String`
+`method ->[B](y: B)(timeofday.TimeOfDayVar, B)`
+`method ==(x$1: Any)Boolean`
+`method ==(x$1: AnyRef)Boolean`
+`method asInstanceOf[T0]=> T0`
+`method clone()Object`
+`method ensuring(cond: Boolean)timeofday.TimeOfDayVar`
+`method ensuring(cond: Boolean, msg: => Any)timeofday.TimeOfDayVar`
+`method ensuring(cond: timeofday.TimeOfDayVar => Boolean)timeofday.TimeOfDayVar`
+`method ensuring(cond: timeofday.TimeOfDayVar => Boolean, msg: => Any)timeofday.TimeOfDayVar`
+`method eq(x$1: AnyRef)Boolean`
+`method equals(x$1: Any)Boolean`
+`method finalize()Unit`
+`method formatted(fmtstr: String)String`
+`method hashCode()Int`
+`method hours=> Int`
+`method hours_=(h: Int)Unit`
+`method isInstanceOf[T0]=> Boolean`
+`method minutes=> Int`
+`method minutes_=(m: Int)Unit`
+`method ne(x$1: AnyRef)Boolean`
+`method notify()Unit`
+`method notifyAll()Unit`
+`method seconds=> Int`
+`method seconds_=(s: Int)Unit`
+`method synchronized[T0](x$1: T0)T0`
+`method toString()String`
+`method wait()Unit`
+`method wait(x$1: Long)Unit`
+`method wait(x$1: Long, x$2: Int)Unit`
+`method x=> timeofday.TimeOfDayVar`
+`method →[B](y: B)(timeofday.TimeOfDayVar, B)`
+`value __leftOfArrowtimeofday.TimeOfDayVar`
+`value __resultOfEnsuringtimeofday.TimeOfDayVar`
+`value selfAny`
+`variable hInt`
+`variable mInt`
+`variable sInt`
+================================================================================
+
+askHyperlinkPos for `hours` at (33,11) timeofday.scala
+================================================================================
+[response] found askHyperlinkPos for `hours` at (10,9) timeofday.scala
+================================================================================
diff --git a/test/disabled/presentation/timeofday/Runner.scala b/test/disabled/presentation/timeofday/Runner.scala
new file mode 100644
index 0000000000..1c03e3d5ba
--- /dev/null
+++ b/test/disabled/presentation/timeofday/Runner.scala
@@ -0,0 +1,3 @@
+import scala.tools.nsc.interactive.tests._
+
+object Test extends InteractiveTest
diff --git a/test/disabled/presentation/timeofday/src/timeofday.scala b/test/disabled/presentation/timeofday/src/timeofday.scala
new file mode 100644
index 0000000000..d6355097f1
--- /dev/null
+++ b/test/disabled/presentation/timeofday/src/timeofday.scala
@@ -0,0 +1,35 @@
+object timeofday {
+ class DateError extends Exception
+
+ /** Simulating properties in Scala
+ * (example 4.2.1 in ScalaReference.pdf)
+ */
+ class TimeOfDayVar {
+ private var h, m, s: Int = 0
+
+ def hours = h
+
+ /** A method 'ident_=' is a setter for 'ident'. 'code.ident = ...' will
+ * be translated to a call to 'ident_='
+ */
+ def hours_= (h: Int) =
+ if (0 <= h && h < 24) this.h = h
+ else throw new DateError()
+
+ def minutes = m
+ def minutes_= (m: Int) =
+ if (0 <= m && m < 60) this.m = m
+ else throw new DateError()
+
+ def seconds = s
+ def seconds_= (s: Int) =
+ if (0 <= s && s < 60) this./*!*/s = s
+ else throw new DateError()
+ }
+
+ def main(args: Array[String]) {
+ val d = new TimeOfDayVar
+ d.hours = 8; d./*!*/minutes = 30; d.seconds = 0
+ d.hours/*#*/ = 25 // throws a DateError exception
+ }
+} \ No newline at end of file
diff --git a/test/disabled/properties.check b/test/disabled/properties.check
new file mode 100644
index 0000000000..a721d49e3a
--- /dev/null
+++ b/test/disabled/properties.check
@@ -0,0 +1,158 @@
+reload: properties.scala
+
+askTypeCompletion at properties.scala(29,33)
+================================================================================
+[response] aksTypeCompletion at (29,33)
+retrieved 50 members
+`method !=(x$1: Any)Boolean`
+`method !=(x$1: AnyRef)Boolean`
+`method ##()Int`
+`method +(other: String)String`
+`method ->[B](y: B)(properties.Property[String], B)`
+`method ==(x$1: Any)Boolean`
+`method ==(x$1: AnyRef)Boolean`
+`method apply()String`
+`method asInstanceOf[T0]=> T0`
+`method canEqual(that: Any)Boolean`
+`method clone()Object`
+`method ensuring(cond: Boolean)properties.Property[String]`
+`method ensuring(cond: Boolean, msg: => Any)properties.Property[String]`
+`method ensuring(cond: properties.Property[String] => Boolean)properties.Property[String]`
+`method ensuring(cond: properties.Property[String] => Boolean, msg: => Any)properties.Property[String]`
+`method eq(x$1: AnyRef)Boolean`
+`method equals(x$1: Any)Boolean`
+`method finalize()Unit`
+`method formatted(fmtstr: String)String`
+`method get(newGetter: String => String)properties.Property[String]`
+`method hashCode()Int`
+`method isInstanceOf[T0]=> Boolean`
+`method ne(x$1: AnyRef)Boolean`
+`method notify()Unit`
+`method notifyAll()Unit`
+`method productArity=> Int`
+`method productElement(n: Int)Any`
+`method productIterator=> Iterator[Any]`
+`method productPrefix=> String`
+`method set(newSetter: String => String)properties.Property[String]`
+`method synchronized[T0](x$1: T0)T0`
+`method toString()String`
+`method update(newValue: String)Unit`
+`method wait()Unit`
+`method wait(x$1: Long)Unit`
+`method wait(x$1: Long, x$2: Int)Unit`
+`method x=> properties.Property[String]`
+`method →[B](y: B)(properties.Property[String], B)`
+`value __leftOfArrowproperties.Property[String]`
+`value __resultOfEnsuringproperties.Property[String]`
+`value initString`
+`value selfAny`
+`variable getterString => String`
+`variable setterString => String`
+`variable valueString`
+================================================================================
+
+askTypeCompletion at properties.scala(29,67)
+================================================================================
+[response] aksTypeCompletion at (29,67)
+retrieved 50 members
+`method !=(x$1: Any)Boolean`
+`method !=(x$1: AnyRef)Boolean`
+`method ##()Int`
+`method +(other: String)String`
+`method ->[B](y: B)(properties.Property[String], B)`
+`method ==(x$1: Any)Boolean`
+`method ==(x$1: AnyRef)Boolean`
+`method apply()String`
+`method asInstanceOf[T0]=> T0`
+`method canEqual(that: Any)Boolean`
+`method clone()Object`
+`method ensuring(cond: Boolean)properties.Property[String]`
+`method ensuring(cond: Boolean, msg: => Any)properties.Property[String]`
+`method ensuring(cond: properties.Property[String] => Boolean)properties.Property[String]`
+`method ensuring(cond: properties.Property[String] => Boolean, msg: => Any)properties.Property[String]`
+`method eq(x$1: AnyRef)Boolean`
+`method equals(x$1: Any)Boolean`
+`method finalize()Unit`
+`method formatted(fmtstr: String)String`
+`method get(newGetter: String => String)properties.Property[String]`
+`method hashCode()Int`
+`method isInstanceOf[T0]=> Boolean`
+`method ne(x$1: AnyRef)Boolean`
+`method notify()Unit`
+`method notifyAll()Unit`
+`method productArity=> Int`
+`method productElement(n: Int)Any`
+`method productIterator=> Iterator[Any]`
+`method productPrefix=> String`
+`method set(newSetter: String => String)properties.Property[String]`
+`method synchronized[T0](x$1: T0)T0`
+`method toString()String`
+`method update(newValue: String)Unit`
+`method wait()Unit`
+`method wait(x$1: Long)Unit`
+`method wait(x$1: Long, x$2: Int)Unit`
+`method x=> properties.Property[String]`
+`method →[B](y: B)(properties.Property[String], B)`
+`value __leftOfArrowproperties.Property[String]`
+`value __resultOfEnsuringproperties.Property[String]`
+`value initString`
+`value selfAny`
+`variable getterString => String`
+`variable setterString => String`
+`variable valueString`
+================================================================================
+
+askTypeCompletion at properties.scala(45,10)
+================================================================================
+[response] aksTypeCompletion at (45,10)
+retrieved 38 members
+`method !=(x$1: Any)Boolean`
+`method !=(x$1: AnyRef)Boolean`
+`method ##()Int`
+`method +(other: String)String`
+`method ->[B](y: B)(properties.User, B)`
+`method ==(x$1: Any)Boolean`
+`method ==(x$1: AnyRef)Boolean`
+`method asInstanceOf[T0]=> T0`
+`method clone()Object`
+`method ensuring(cond: Boolean)properties.User`
+`method ensuring(cond: Boolean, msg: => Any)properties.User`
+`method ensuring(cond: properties.User => Boolean)properties.User`
+`method ensuring(cond: properties.User => Boolean, msg: => Any)properties.User`
+`method eq(x$1: AnyRef)Boolean`
+`method equals(x$1: Any)Boolean`
+`method finalize()Unit`
+`method formatted(fmtstr: String)String`
+`method hashCode()Int`
+`method isInstanceOf[T0]=> Boolean`
+`method ne(x$1: AnyRef)Boolean`
+`method notify()Unit`
+`method notifyAll()Unit`
+`method synchronized[T0](x$1: T0)T0`
+`method toString()String`
+`method wait()Unit`
+`method wait(x$1: Long)Unit`
+`method wait(x$1: Long, x$2: Int)Unit`
+`method x=> properties.User`
+`method →[B](y: B)(properties.User, B)`
+`value __leftOfArrowproperties.User`
+`value __resultOfEnsuringproperties.User`
+`value firstnameproperties.Property[String]`
+`value lastnameproperties.Property[String]`
+`value selfAny`
+================================================================================
+
+askType at properties.scala(18,28)
+================================================================================
+[response] askTypeAt at (18,28)
+def update(newValue: T): Unit = Property.this.value_=(Property.this.setter.apply(newValue))
+================================================================================
+
+askType at properties.scala(21,31)
+================================================================================
+[response] askTypeAt at (21,31)
+def get(newGetter: T => T): properties.Property[T] = {
+ Property.this.getter_=(newGetter);
+ this
+}
+================================================================================
diff --git a/test/disabled/properties/Runner.scala b/test/disabled/properties/Runner.scala
new file mode 100644
index 0000000000..1ef3cf9025
--- /dev/null
+++ b/test/disabled/properties/Runner.scala
@@ -0,0 +1,3 @@
+import scala.tools.nsc.interactive.tests._
+
+object Test extends InteractiveTest \ No newline at end of file
diff --git a/test/disabled/properties/src/properties.scala b/test/disabled/properties/src/properties.scala
new file mode 100644
index 0000000000..35b6a92221
--- /dev/null
+++ b/test/disabled/properties/src/properties.scala
@@ -0,0 +1,54 @@
+/** Illustrate the use of custom 'apply/update' methods. */
+object properties {
+
+ /** A mutable property whose getter and setter may be customized. */
+ case class Property[T](init: T) {
+ private var value: T = init
+
+ /** The getter function, defaults to identity. */
+ private var setter: T => T = identity[T]
+
+ /** The setter function, defaults to identity. */
+ private var getter: T => T = identity[T]
+
+ /** Retrive the value held in this property. */
+ def apply(): T = getter(value)
+
+ /** Update the value held in this property, through the setter. */
+ def update(newValue: T) /*?*/ = value = setter(newValue)
+
+ /** Change the getter. */
+ def get(newGetter: T => T) /*?*/ = { getter = newGetter; this }
+
+ /** Change the setter */
+ def set(newSetter: T => T) = { setter = newSetter; this }
+ }
+
+ class User {
+ // Create a property with custom getter and setter
+ val firstname = Property("")./*!*/get { v => v.toUpperCase() }./*!*/set { v => "Mr. " + v }
+ val lastname = Property("<noname>")
+
+ /** Scala provides syntactic sugar for calling 'apply'. Simply
+ * adding a list of arguments between parenthesis (in this case,
+ * an empty list) is translated to a call to 'apply' with those
+ * arguments.
+ */
+ override def toString() = firstname() + " " + lastname()
+ }
+
+ def main(args: Array[String]) {
+ val user1 = new User
+
+ // Syntactic sugar for 'update': an assignment is translated to a
+ // call to method 'update'
+ user1./*!*/firstname() = "Robert"
+
+ val user2 = new User
+ user2.firstname() = "bob"
+ user2.lastname() = "KUZ"
+
+ println("user1: " + user1)
+ println("user2: " + user2)
+ }
+} \ No newline at end of file
diff --git a/test/disabled/run/applet-prop.scala b/test/disabled/run/applet-prop.scala
new file mode 100644
index 0000000000..9c29dfd979
--- /dev/null
+++ b/test/disabled/run/applet-prop.scala
@@ -0,0 +1,40 @@
+import scala.tools.partest._
+import java.util.PropertyPermission
+import java.security.AccessControlException
+
+class S extends javax.swing.JApplet {
+ scala.collection.Traversable
+}
+
+object Test extends SecurityTest {
+ val s = new S
+ // lazy val TestKey = sys.SystemProperties.noTraceSupression.key
+ // def hitPerm() = new Throwable with scala.util.control.ControlThrowable { }
+ //
+ // var throwing = false
+ // override def propertyCheck(p: PropertyPermission): Unit = {
+ // if (p.getName == TestKey) {
+ // println("I see " + p.getName)
+ // if (throwing)
+ // throwIt(p)
+ // }
+ // }
+ //
+ // hitPerm()
+ // securityOn()
+ // hitPerm()
+ //
+ // throwing = true
+ //
+ // val caught =
+ // try { hitPerm() ; false }
+ // catch { case _: AccessControlException => true }
+ //
+ // assert(caught, "Should have incurred exception.")
+ // throwing = false
+ // hitPerm()
+ //
+ // val xs = new Traversable[Int] { def foreach[U](f: Int => U) = 1 to 3 foreach f }
+ // xs foreach println
+}
+
diff --git a/test/disabled/run/code.check b/test/disabled/run/code.check
new file mode 100644
index 0000000000..23263600ea
--- /dev/null
+++ b/test/disabled/run/code.check
@@ -0,0 +1,18 @@
+testing: ((x: Int) => x.$plus(ys.length))
+result = ((x: Int) => x.+{(x: <?>)Int}(ys.length{Int}){Int}){Int => Int}
+testing: (() => {
+ val e: Element = new Element("someName");
+ e
+})
+result = (() => {
+ val e: Element = new Element{Element}{(name: <?>)Element}("someName"{String("someName")}){Element};
+ e{Element}
+}{Element}){() => Element}
+testing: (() => truc.elem = 6)
+result = (() => truc.elem{Int} = 6{Int(6)}{Unit}){() => Unit}
+testing: (() => truc.elem = truc.elem.$plus(6))
+result = (() => truc.elem{Int} = truc.elem.+{(x: <?>)Int}(6{Int(6)}){Int}{Unit}){() => Unit}
+testing: (() => new baz.BazElement("someName"))
+result = (() => new baz.BazElement{baz.BazElement}{(name: <?>)baz.BazElement}("someName"{String("someName")}){baz.BazElement}){() => baz.BazElement}
+testing: ((x: Int) => x.$plus(ys.length))
+result = ((x: Int) => x.+{(x: <?>)Int}(ys.length{Int}){Int}){Int => Int}
diff --git a/test/disabled/run/coder2/Coder2.scala b/test/disabled/run/coder2/Coder2.scala
new file mode 100644
index 0000000000..43b2e9bcb8
--- /dev/null
+++ b/test/disabled/run/coder2/Coder2.scala
@@ -0,0 +1,212 @@
+
+
+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 mnemnonics 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()
+
+ val memo = collection.mutable.Map[String, Set[Seq[String]]]("" -> Set(Seq()))
+ val wfnmemo = collection.mutable.Map[(String, String), Set[Seq[String]]]()
+ val subsmemo = collection.mutable.Map[(String, String, String), Set[Seq[String]]]()
+
+ /** 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)
+ val subsmapped = subs.map(rest => word +: rest)
+ subsmemo += (number, number drop split, word) -> subsmapped
+ subsmapped
+ })
+ wfnmemo += (number, number take split) -> wfn.toSet
+ wfn
+ })
+ memo += number -> r
+ r
+ }
+
+ /** Maps a number to a list of all word phrases that can
+ * represent it */
+ def translate(number: String): Set[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 mnemnonics 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, ParSeq[String]] =
+ (words groupBy wordCode).map(t => (t._1, t._2.toSeq.par)) withDefaultValue ParSeq()
+
+ val comparison = new SeqCoder(words)
+
+ /** All ways to encode a number as a list of words */
+ def encode(number: String): ParSet[ParSeq[String]] =
+ if (number.isEmpty) ParSet(ParSeq())
+ else {
+ val splits = (1 to number.length).toSet.par
+ // 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)
+ assertNumber(number drop split, subs)
+ val subsmapped = subs.map(rest => word +: rest)
+ assertSubs(number, number drop split, word, subsmapped)
+ subsmapped
+ })
+ assertWfn(number, number take split, number drop split, wfn)
+ wfn
+ })
+ assertNumber(number, r)
+ r
+ }
+
+ def assertSubs(num: String, subsfrom: String, word: String, r: ParSet[ParSeq[String]]) {
+ val m = comparison.subsmemo((num, subsfrom, word))
+ if (r != m) {
+ println("map for number from subs and word: " + num + ", " + subsfrom + ", " + word)
+ println("parset: " + r.size)
+ println("memoed: " + m.size)
+ error("r != m")
+ }
+ }
+
+ def assertWfn(num: String, split: String, dropped: String, r: ParSeq[ParSeq[String]]) {
+ val m = comparison.wfnmemo((num, split))
+ val rs = r.toSet.par
+ val words: ParSeq[String] = wordsForNum(split)
+ if (rs != m) {
+ println("flatmap for number with split: " + num + ", " + split)
+ println("words for: " + words)
+ println("parset: " + rs.size)
+ println("memoed: " + m.size)
+ println("retrying...")
+ for (i <- 0 until 30) {
+ val r2: ParSeq[ParSeq[String]] = words.flatMap(word => {
+ val subs: ParSet[ParSeq[String]] = encode(dropped)
+ println("subs size for '" + dropped + "': " + subs.size)
+ val subsmapped: ParSet[ParSeq[String]] = subs.map(rest => word +: rest)
+ println("map size: " + subsmapped.size)
+ subsmapped.toList
+ })
+ println(i + ") retry size: " + r2.size)
+ }
+ error("rs != m")
+ }
+ }
+
+ def assertNumber(num: String, r: ParSet[ParSeq[String]]) {
+ val m = comparison.memo(num)
+ if (r != m) {
+ println("for number: " + num)
+ println("parset: " + r.size)
+ println("memoed: " + m.size)
+ error("r != m")
+ }
+ }
+
+ /** Maps a number to a list of all word phrases that can
+ * represent it */
+ def translate(number: String): ParSet[String] = {
+ comparison.translate(number)
+ encode(number) map (_.seq mkString " ")
+ }
+
+ def ??? : Nothing = throw new UnsupportedOperationException
+}
+
+
+/** Test code */
+object Test {
+ val code = "2328437472947"//36262633"//837976"//"6477323986225453446"
+ //val code = "747294736262633"
+
+ /* */
+ def main(args : Array[String]) {
+ for (i <- 0 until 10) {
+ val seqcoder = new SeqCoder(Dictionary.wordlist)
+ val sts = seqcoder.translate(code)
+ //println("Translation check: " + st.size)
+
+ val parcoder = new ParCoder(Dictionary.wordlist)
+ val pts = parcoder.translate(code)
+ //println("Translation check: " + pt.size)
+
+ val st = sts.toList.sorted
+ val pt = pts.toList.sorted
+ if (st.size != pt.size) {
+ val zipped = st.zip(pt)
+ val ind = zipped.indexWhere { case (a, b) => a != b }
+ val sliced = zipped.slice(ind - 10, ind + 10)
+ //println(sliced.map(t => t._1 + "\n" + t._2 + "\n--------").mkString("\n"))
+ //println(i + ") seq vs par: " + st.size + " vs " + pt.size)
+ }
+ if (st != pt) {
+ val zipped = (st.toList.sorted zip pt.toList.sorted);
+ val diffp = zipped indexWhere { case (x, y) => x != y }
+ //println(zipped/*.slice(diffp - 10, diffp + 10)*/ mkString ("\n"))
+ //println((st.toList.sorted zip pt.toList.sorted) map { case (x, y) => (x == y) } reduceLeft(_ && _))
+ }
+ assert(st == pt)
+ }
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/disabled/run/coder2/Dictionary.scala b/test/disabled/run/coder2/Dictionary.scala
new file mode 100644
index 0000000000..7b354b9aa8
--- /dev/null
+++ b/test/disabled/run/coder2/Dictionary.scala
@@ -0,0 +1,10 @@
+
+
+
+
+
+object Dictionary {
+ val wordlist = wordlines.split(System.getProperty("line.separator")).filter(_.trim != "").toList
+ val wordarray = wordlist.toArray
+ def wordlines = scala.io.Source.fromFile("test/files/run/coder/dict.txt").mkString
+}
diff --git a/test/files/run/docgenerator.check b/test/disabled/run/docgenerator.check
index dbb7eeed28..dbb7eeed28 100644
--- a/test/files/run/docgenerator.check
+++ b/test/disabled/run/docgenerator.check
diff --git a/test/files/run/docgenerator.scala b/test/disabled/run/docgenerator.scala
index 59f90ba415..ebbc869fb1 100644
--- a/test/files/run/docgenerator.scala
+++ b/test/disabled/run/docgenerator.scala
@@ -10,7 +10,7 @@ object Test {
def main(args: Array[String]) {
// overwrites value of UrlContext.generator in file DocUtil.scala
System.setProperty("doc.generator", "scaladoc")
- var dirname = System.getProperty("scalatest.output")
+ var dirname = System.getProperty("partest.output")
if (dirname eq null) dirname = System.getProperty("java.io.tmpdir")
val tmpDir = new File(dirname)
tmpDir.mkdirs()
@@ -116,7 +116,7 @@ object Foo2 {
// when running that compiler, give it a scala-library to the classpath
docSettings.classpath.value = System.getProperty("java.class.path")
reporter = new ConsoleReporter(docSettings)
- val command = new CompilerCommand(args.toList, docSettings, error, false)
+ val command = new CompilerCommand(args.toList, docSettings)
try {
object compiler extends Global(command.settings, reporter) {
override protected def computeInternalPhases() : Unit = {
@@ -124,7 +124,7 @@ object Foo2 {
phasesSet += analyzer.namerFactory
phasesSet += analyzer.typerFactory
}
- override def onlyPresentation = true
+ override def forScaladoc = true
}
if (reporter.hasErrors) {
reporter.flush()
diff --git a/test/disabled/run/javap.check b/test/disabled/run/javap.check
new file mode 100644
index 0000000000..1985fd611d
--- /dev/null
+++ b/test/disabled/run/javap.check
@@ -0,0 +1,18 @@
+Arguments: ''
+public class Bippy extends java.lang.Object implements scala.ScalaObject{
+public scala.collection.immutable.List f(scala.collection.immutable.List);
+public Bippy();
+Arguments: '-v'
+public class Bippy extends java.lang.Object implements scala.ScalaObject
+public #28= #25 of #27; //Bippy=class Bippy of class
+public scala.collection.immutable.List f(scala.collection.immutable.List);
+public Bippy();
+Arguments: '-s'
+public class Bippy extends java.lang.Object implements scala.ScalaObject{
+public scala.collection.immutable.List f(scala.collection.immutable.List);
+public Bippy();
+Arguments: '-private'
+public class Bippy extends java.lang.Object implements scala.ScalaObject{
+private int privateMethod();
+public scala.collection.immutable.List f(scala.collection.immutable.List);
+public Bippy();
diff --git a/test/disabled/run/javap.scala b/test/disabled/run/javap.scala
new file mode 100644
index 0000000000..3704d64423
--- /dev/null
+++ b/test/disabled/run/javap.scala
@@ -0,0 +1,24 @@
+import scala.tools.nsc.interpreter._
+
+object Test {
+ def run(args: String) = {
+ println("Arguments: '" + args + "'")
+ ILoop.run("""
+ |class Bippy {
+ | private def privateMethod = 5
+ | def f[T <: List[_]](x: T): T = x
+ |}
+ |
+ |:javap %s Bippy
+ """.stripMargin.format(args)).lines map (_.trim) filter { line =>
+ (line startsWith "private") || (line startsWith "public")
+ } foreach println
+ }
+
+ def main(args: Array[String]): Unit = {
+ run("")
+ run("-v")
+ run("-s")
+ run("-private")
+ }
+}
diff --git a/test/files/run/lisp.check b/test/disabled/run/lisp.check
index 64053f26d0..64053f26d0 100644
--- a/test/files/run/lisp.check
+++ b/test/disabled/run/lisp.check
diff --git a/test/files/run/lisp.scala b/test/disabled/run/lisp.scala
index fe3941d0db..06e68f508a 100644
--- a/test/files/run/lisp.scala
+++ b/test/disabled/run/lisp.scala
@@ -12,15 +12,15 @@ class LispTokenizer(s: String) extends Iterator[String] {
while (i < s.length() && s.charAt(i) <= ' ') i += 1
i < s.length()
}
- def next: String =
+ def next: String =
if (hasNext) {
val start = i
if (isDelimiter(s charAt i)) i += 1
- else
+ else
do i = i + 1
while (!isDelimiter(s charAt i))
s.substring(start, i)
- } else error("premature end of string")
+ } else sys.error("premature end of string")
}
//############################################################################
@@ -102,7 +102,7 @@ object LispCaseClasses extends Lisp {
var indent: Int = 0
def lispError[a](msg: String): a =
- error("error: " + msg + "\n" + curexp);
+ sys.error("error: " + msg + "\n" + curexp);
trait Environment {
def lookup(n: String): Data;
@@ -201,7 +201,7 @@ object LispCaseClasses extends Lisp {
val ps: List[String] = toList(params) map {
case SYM(name) => name
- case _ => error("illegal parameter list");
+ case _ => sys.error("illegal parameter list");
}
FUN(args => eval(expr, extendEnv(env, ps, args)))
@@ -237,7 +237,7 @@ object LispCaseClasses extends Lisp {
val it = new LispTokenizer(s);
def parseExpr(token: String): Data = {
if (token == "(") parseList
- else if (token == ")") error("unbalanced parentheses")
+ else if (token == ")") sys.error("unbalanced parentheses")
else if ('0' <= token.charAt(0) && token.charAt(0) <= '9')
NUM(token.toInt)
else if (token.charAt(0) == '\"' && token.charAt(token.length()-1)=='\"')
@@ -270,7 +270,7 @@ object LispAny extends Lisp {
var indent: Int = 0;
def lispError[a](msg: String): a =
- error("error: " + msg + "\n" + curexp);
+ sys.error("error: " + msg + "\n" + curexp);
trait Environment {
def lookup(n: String): Data;
@@ -392,7 +392,7 @@ object LispAny extends Lisp {
val ps: List[String] = asList(params) map {
case Symbol(name) => name
- case _ => error("illegal parameter list");
+ case _ => sys.error("illegal parameter list");
}
Lambda(args => eval(expr, extendEnv(env, ps, args)))
@@ -428,7 +428,7 @@ object LispAny extends Lisp {
val it = new LispTokenizer(s);
def parseExpr(token: String): Data = {
if (token == "(") parseList
- else if (token == ")") error("unbalanced parentheses")
+ else if (token == ")") sys.error("unbalanced parentheses")
//else if (Character.isDigit(token.charAt(0)))
else if (token.charAt(0).isDigit)
token.toInt
diff --git a/test/disabled/run/script-positions.scala b/test/disabled/run/script-positions.scala
new file mode 100644
index 0000000000..2c80d550c0
--- /dev/null
+++ b/test/disabled/run/script-positions.scala
@@ -0,0 +1,86 @@
+import scala.tools.nsc._
+import util.stringFromStream
+
+// Testing "scripts" without the platform delights which accompany actual scripts.
+object Scripts {
+
+ val test1 =
+"""#!/bin/sh
+ exec scala $0 $@
+!#
+
+println("statement 1")
+println("statement 2".thisisborked)
+println("statement 3")
+"""
+
+ val output1 =
+"""thisisborked.scala:6: error: value thisisborked is not a member of java.lang.String
+println("statement 2".thisisborked)
+ ^
+one error found"""
+ val test2 =
+"""#!scala
+// foo
+// bar
+!#
+
+val x = "line 6"
+val y = "line 7"
+val z "line 8""""
+
+ val output2 =
+"""bob.scala:8: error: '=' expected but string literal found.
+val z "line 8"
+ ^
+bob.scala:8: error: illegal start of simple expression
+val z "line 8"
+ ^
+two errors found"""
+}
+
+object Test {
+ import Scripts._
+
+ def settings = new GenericRunnerSettings(println _)
+ settings.nocompdaemon.value = true
+
+ def runScript(code: String): String =
+ stringFromStream(stream =>
+ Console.withOut(stream) {
+ Console.withErr(stream) {
+ ScriptRunner.runCommand(settings, code, Nil)
+ }
+ }
+ )
+
+ val tests: List[(String, String)] = List(
+ test1 -> output1,
+ test2 -> output2
+ )
+ // def lines(s: String) = s split """\r\n|\r|\n""" toList
+ def lines(s: String) = s split "\\n" toList
+
+ // strip the random temp filename from error msgs
+ def stripFilename(s: String) = (s indexOf ".scala:") match {
+ case -1 => s
+ case idx => s drop (idx + 7)
+ }
+ def toLines(text: String) = lines(text) map stripFilename
+
+ def main(args: Array[String]): Unit = {
+ for ((code, expected) <- tests) {
+ val out = toLines(runScript(code))
+ val exp = toLines(expected)
+ val nomatch = out zip exp filter { case (x, y) => x != y }
+ val success = out.size == exp.size && nomatch.isEmpty
+
+ assert(
+ success,
+ "Output doesn't match expected:\n" +
+ "Expected:\n" + expected +
+ "Actual:\n" + out.mkString("\n")
+ )
+ }
+ }
+}
diff --git a/test/disabled/run/t2886.scala b/test/disabled/run/t2886.scala
new file mode 100644
index 0000000000..eb392f0c58
--- /dev/null
+++ b/test/disabled/run/t2886.scala
@@ -0,0 +1,7 @@
+object Test {
+ def test(name: String, address: String) = null
+ def main(args: Array[String]) = {
+ val tree = scala.reflect.Code.lift((x:String) => test(address=x,name=x)).tree
+ println(tree)
+ }
+}
diff --git a/test/disabled/run/t2946/Parsers.scala b/test/disabled/run/t2946/Parsers.scala
new file mode 100644
index 0000000000..c0961034c4
--- /dev/null
+++ b/test/disabled/run/t2946/Parsers.scala
@@ -0,0 +1,4 @@
+class Parser {
+ def parse(t: Any): Unit = {
+ }
+}
diff --git a/test/disabled/run/t2946/ResponseCommon.scala b/test/disabled/run/t2946/ResponseCommon.scala
new file mode 100644
index 0000000000..fa9d8acccb
--- /dev/null
+++ b/test/disabled/run/t2946/ResponseCommon.scala
@@ -0,0 +1,14 @@
+trait ResponseCommon extends Parser {
+ private[this] var paramsParser: Parser = null
+ def withParamsParser(parser: Parser) = {paramsParser = parser; this}
+
+ class Foo {
+ println(paramsParser)
+ }
+
+ override abstract def parse(t: Any): Unit = t match {
+ case ("params", value: List[_]) => value.foreach {paramsParser.parse(_)}
+ case _ => super.parse(t)
+ }
+}
+
diff --git a/test/disabled/run/t2946/Test.scala b/test/disabled/run/t2946/Test.scala
new file mode 100644
index 0000000000..e9d9896a0e
--- /dev/null
+++ b/test/disabled/run/t2946/Test.scala
@@ -0,0 +1,7 @@
+class Test extends Parser with ResponseCommon
+
+object Test {
+ def main(args: Array[String]) {
+ new Test
+ }
+}
diff --git a/test/disabled/run/t4279.scala b/test/disabled/run/t4279.scala
new file mode 100644
index 0000000000..62cc436302
--- /dev/null
+++ b/test/disabled/run/t4279.scala
@@ -0,0 +1,38 @@
+import scala.tools.partest._
+
+// Attempting to verify slice isn't 100,000x slower
+// with views than non-views.
+class Runner(num: Int, reps: Int) extends TestUtil {
+ var dummy = 0
+ val range = Array.range(0, num)
+
+ def iteratorSlice = {
+ def it = range.iterator.slice(num - 2, num)
+ for (i <- 1 to reps)
+ it foreach (dummy = _)
+ }
+ def viewSlice = {
+ val view = range.view.slice(num - 2, num)
+ for (i <- 1 to reps)
+ view foreach (dummy = _)
+ }
+ def straightSlice = {
+ val xs = range.slice(num - 2, num)
+ for (i <- 1 to reps)
+ xs foreach (dummy = _)
+ }
+ def run(multiple: Double) = {
+ verifySpeed(straightSlice, iteratorSlice, multiple)
+ verifySpeed(straightSlice, viewSlice, multiple)
+ }
+}
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ // warmup
+ { val r = new Runner(1000000, 10) ; r.straightSlice ; r.iteratorSlice ; r.viewSlice }
+
+ new Runner(10000000, 10) run 500
+ new Runner(10000000, 50) run 300
+ }
+}
diff --git a/test/disabled/run/t4532.check b/test/disabled/run/t4532.check
new file mode 100644
index 0000000000..47a9809248
--- /dev/null
+++ b/test/disabled/run/t4532.check
@@ -0,0 +1,15 @@
+Type in expressions to have them evaluated.
+Type :help for more information.
+
+scala>
+
+scala> object Bippy { class Dingus ; object Bop }
+defined module Bippy
+
+scala> :javap Bippy.Dingus
+Compiled from "<console>"public class Bippy$Dingus extends java.lang.Object implements scala.ScalaObject{ public Bippy$Dingus();}
+scala> :javap Bippy.Bop
+Compiled from "<console>"public final class Bippy$Bop$ extends java.lang.Object implements scala.ScalaObject{ public static final Bippy$Bop$ MODULE$; public static {}; public Bippy$Bop$();}
+scala>
+
+scala>
diff --git a/test/disabled/run/t4532.scala b/test/disabled/run/t4532.scala
new file mode 100644
index 0000000000..0dabd2dca4
--- /dev/null
+++ b/test/disabled/run/t4532.scala
@@ -0,0 +1,34 @@
+import scala.tools.partest.ReplTest
+import scala.tools.util.Javap
+
+object Test extends ReplTest {
+
+ // ugh, windows
+ def expectedOutput =
+"""Type in expressions to have them evaluated.
+Type :help for more information.
+
+scala>
+
+scala> object Bippy { class Dingus ; object Bop }
+defined module Bippy
+
+scala> :javap Bippy.Dingus
+Compiled from "<console>"public class Bippy$Dingus extends java.lang.Object implements scala.ScalaObject{ public Bippy$Dingus();}
+scala> :javap Bippy.Bop
+Compiled from "<console>"public final class Bippy$Bop$ extends java.lang.Object implements scala.ScalaObject{ public static final Bippy$Bop$ MODULE$; public static {}; public Bippy$Bop$();}
+scala>
+
+scala>
+"""
+
+ override def eval() =
+ if (Javap.isAvailable()) super.eval()
+ else expectedOutput.lines
+
+ def code = """
+ |object Bippy { class Dingus ; object Bop }
+ |:javap Bippy.Dingus
+ |:javap Bippy.Bop
+ """.stripMargin
+}
diff --git a/test/disabled/scalacheck/HashTrieSplit.scala b/test/disabled/scalacheck/HashTrieSplit.scala
new file mode 100644
index 0000000000..cbf565095c
--- /dev/null
+++ b/test/disabled/scalacheck/HashTrieSplit.scala
@@ -0,0 +1,47 @@
+
+
+
+
+
+import collection._
+
+
+
+
+// checks whether hash tries split their iterators correctly
+// even after some elements have been traversed
+object Test {
+ def main(args: Array[String]) {
+ doesSplitOk
+ }
+
+ def doesSplitOk = {
+ val sz = 2000
+ var ht = new parallel.immutable.ParHashMap[Int, Int]
+ // println("creating trie")
+ for (i <- 0 until sz) ht += ((i + sz, i))
+ // println("created trie")
+ for (n <- 0 until (sz - 1)) {
+ // println("---------> n = " + n)
+ val pit = ht.parallelIterator
+ val pit2 = ht.parallelIterator
+ var i = 0
+ while (i < n) {
+ pit.next
+ pit2.next
+ i += 1
+ }
+ // println("splitting")
+ val pits = pit.split
+ val fst = pits(0).toSet
+ val snd = pits(1).toSet
+ val orig = pit2.toSet
+ if (orig.size != (fst.size + snd.size) || orig != (fst ++ snd)) {
+ println("Original: " + orig)
+ println("First: " + fst)
+ println("Second: " + snd)
+ assert(false)
+ }
+ }
+ }
+}
diff --git a/test/files/script/fact.args b/test/disabled/script/fact.args
index 7ed6ff82de..7ed6ff82de 100644
--- a/test/files/script/fact.args
+++ b/test/disabled/script/fact.args
diff --git a/test/files/script/fact.bat b/test/disabled/script/fact.bat
index bee0ba25c6..bee0ba25c6 100755
--- a/test/files/script/fact.bat
+++ b/test/disabled/script/fact.bat
diff --git a/test/files/script/fact.check b/test/disabled/script/fact.check
index 22aa60821e..22aa60821e 100644
--- a/test/files/script/fact.check
+++ b/test/disabled/script/fact.check
diff --git a/test/files/script/fact.scala b/test/disabled/script/fact.scala
index d48dac6f0f..d48dac6f0f 100644..100755
--- a/test/files/script/fact.scala
+++ b/test/disabled/script/fact.scala
diff --git a/test/files/script/second.bat b/test/disabled/script/second.bat
index 0d7085954d..0d7085954d 100755
--- a/test/files/script/second.bat
+++ b/test/disabled/script/second.bat
diff --git a/test/files/script/second.check b/test/disabled/script/second.check
index a105b862a1..a105b862a1 100644
--- a/test/files/script/second.check
+++ b/test/disabled/script/second.check
diff --git a/test/files/script/second.scala b/test/disabled/script/second.scala
index 48b8d73815..48b8d73815 100755
--- a/test/files/script/second.scala
+++ b/test/disabled/script/second.scala
diff --git a/test/files/script/t1015.bat b/test/disabled/script/t1015.bat
index 7475313d7e..7475313d7e 100755
--- a/test/files/script/t1015.bat
+++ b/test/disabled/script/t1015.bat
diff --git a/test/files/script/t1015.scala b/test/disabled/script/t1015.scala
index 52d67bd6cc..52d67bd6cc 100755
--- a/test/files/script/t1015.scala
+++ b/test/disabled/script/t1015.scala
diff --git a/test/files/script/t1017.bat b/test/disabled/script/t1017.bat
index 369dbd2aca..369dbd2aca 100755
--- a/test/files/script/t1017.bat
+++ b/test/disabled/script/t1017.bat
diff --git a/test/files/script/t1017.scala b/test/disabled/script/t1017.scala
index d1b43ea923..2600f4f553 100755
--- a/test/files/script/t1017.scala
+++ b/test/disabled/script/t1017.scala
@@ -23,7 +23,7 @@ exec scala -nocompdaemon "$SOURCE" "$@"
def foo = {
bar
}
-
+
var x = 1
-
+
def bar = 1
diff --git a/test/files/ant/README b/test/files/ant/README
new file mode 100644
index 0000000000..8cd8745970
--- /dev/null
+++ b/test/files/ant/README
@@ -0,0 +1,42 @@
+README
+======
+
+Test cases in directory test/files/ant/ are executed by invoking an
+Ant script whose name ends with "build.xml" (eg. "fsc001-build.xml").
+
+The Scala Ant tasks fsc/scalac/scaladoc are instantiated from various
+binaries (quick/pack/latest/installed) and are executed with different
+combinations of Ant attributes/elements:
+
+ +---------------------------+--------------------------+
+ | Attributes | Nested elements |
+------------+---------------------------+--------------------------+
+fsc001 | srcdir,classpath (1) | compilerarg |
+fsc002 | srcref,classpathref (1) | compilerarg |
+fsc003 | (2) | compilerarg,src,include |
+------------+---------------------------+--------------------------+
+scalac001 | srcdir,classpath (1) | |
+scalac002 | srcref,classpathref (1) | |
+scalac003 | (2) | src,include |
+scalac004 | deprecation,unchecked (3) | |
+------------+---------------------------+--------------------------+
+scaladoc | srcdir,classpathref | |
+------------+---------------------------+--------------------------+
+
+Other attributes:
+(1) includes,destdir
+(2) destdir,classpathref
+(3) srcdir,includes,destdir,classpath
+
+
+The above test cases can also be run from the command prompt using one of
+the following shell commands:
+
+1) For quick/pack/latest binaries (-Dbinary=quick|pack|latest)
+
+$ ant -Dbinary=quick -Dproject.dir=$HOME/workspace/scala -f scalac001-build.xml
+
+2) For installed binaries (-Dbinary=installed)
+
+$ ant -Dbinary=installed -Dinstalled.dir=/opt/scala -f scalac001-build.xml
+
diff --git a/test/files/ant/fsc-build.xml b/test/files/ant/fsc-build.xml
deleted file mode 100644
index 9323be1c82..0000000000
--- a/test/files/ant/fsc-build.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<project name="fsc" default="run" basedir=".">
-
- <import file="${basedir}/imported.xml"/>
-
-<!-- ===========================================================================
-BUILD
-============================================================================ -->
-
- <target name="build" depends="init">
- <echo level="verbose" message="build.dir=${build.dir}"/>
- <mkdir dir="${build.dir}"/>
- <fsc
- srcdir="${source.dir}"
- includes="**/${ant.project.name}*.scala"
- deprecation="yes" unchecked="yes"
- destdir="${build.dir}"
- classpathref="build.classpath"
- />
- <dirname property="log.dir" file="${build.dir}"/>
- <echo level="verbose" message="log.dir=${log.dir}"/>
- <replace
- file="${log.dir}/${ant.project.name}-ant.log"
- token="${log.dir}"
- value="[...]/files/ant"
- />
- </target>
-
-</project>
-
diff --git a/test/files/ant/fsc.check b/test/files/ant/fsc.check
deleted file mode 100644
index d6c4f9078f..0000000000
--- a/test/files/ant/fsc.check
+++ /dev/null
@@ -1,13 +0,0 @@
-Buildfile: [...]/files/ant/fsc-build.xml
-
-quick.init:
-
-latest.init:
-
-installed.init:
-
-init:
-
-build:
- [mkdir] Created dir: [...]/files/ant/fsc-ant.obj
- [fsc] Compiling 1 source file to [...]/files/ant/fsc-ant.obj
diff --git a/test/files/ant/fsc001-build.check b/test/files/ant/fsc001-build.check
new file mode 100644
index 0000000000..b5141f587b
--- /dev/null
+++ b/test/files/ant/fsc001-build.check
@@ -0,0 +1,14 @@
+
+quick.init:
+
+pack.init:
+
+latest.init:
+
+installed.init:
+
+init:
+
+build:
+ [mkdir] Created dir: [...]/files/ant/fsc001-ant.obj
+ [fsc] Compiling 1 source file to [...]/files/ant/fsc001-ant.obj
diff --git a/test/files/ant/fsc001-build.xml b/test/files/ant/fsc001-build.xml
new file mode 100644
index 0000000000..0130f3615c
--- /dev/null
+++ b/test/files/ant/fsc001-build.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project name="fsc001" default="run">
+
+ <import file="${basedir}/imported.xml"/>
+
+<!-- ===========================================================================
+BUILD
+============================================================================ -->
+
+ <target name="build" depends="init">
+ <echo level="verbose" message="build.dir=${build.dir}"/>
+ <mkdir dir="${build.dir}"/>
+ <pathconvert property="classpath" refid="build.classpath"/>
+ <fsc
+ srcdir="${source.dir}"
+ includes="**/${ant.project.name}*.scala"
+ destdir="${build.dir}"
+ classpath="${classpath}">
+ </fsc>
+ <echo level="verbose" message="log.file=${log.file}"/>
+ <replace file="${log.file}" token="${log.dir}" value="[...]/files/ant"/>
+ </target>
+
+</project>
+
diff --git a/test/files/ant/fsc001.scala b/test/files/ant/fsc001.scala
new file mode 100644
index 0000000000..6ede5981ce
--- /dev/null
+++ b/test/files/ant/fsc001.scala
@@ -0,0 +1,7 @@
+package test
+
+object Main {
+ def main(args: Array[String]) {
+ println(args mkString " ")
+ }
+}
diff --git a/test/files/ant/fsc002-build.check b/test/files/ant/fsc002-build.check
new file mode 100644
index 0000000000..0c9c30dbfa
--- /dev/null
+++ b/test/files/ant/fsc002-build.check
@@ -0,0 +1,14 @@
+
+quick.init:
+
+pack.init:
+
+latest.init:
+
+installed.init:
+
+init:
+
+build:
+ [mkdir] Created dir: [...]/files/ant/fsc002-ant.obj
+ [fsc] Compiling 1 source file to [...]/files/ant/fsc002-ant.obj
diff --git a/test/files/ant/fsc002-build.xml b/test/files/ant/fsc002-build.xml
new file mode 100644
index 0000000000..db91070fa1
--- /dev/null
+++ b/test/files/ant/fsc002-build.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project name="fsc002" default="run">
+
+ <import file="${basedir}/imported.xml"/>
+
+<!-- ===========================================================================
+BUILD
+============================================================================ -->
+
+ <target name="build" depends="init">
+ <echo level="verbose" message="build.dir=${build.dir}"/>
+ <mkdir dir="${build.dir}"/>
+ <path id="source.ref">
+ <pathelement location="${source.dir}"/>
+ </path>
+ <fsc
+ srcref="source.ref"
+ includes="**/${ant.project.name}*.scala"
+ destdir="${build.dir}"
+ classpathref="build.classpath">
+ </fsc>
+ <echo level="verbose" message="log.file=${log.file}"/>
+ <replace file="${log.file}" token="${log.dir}" value="[...]/files/ant"/>
+ </target>
+
+</project>
+
diff --git a/test/files/ant/fsc.scala b/test/files/ant/fsc002.scala
index 47131daac6..47131daac6 100644
--- a/test/files/ant/fsc.scala
+++ b/test/files/ant/fsc002.scala
diff --git a/test/files/ant/fsc003-build.check b/test/files/ant/fsc003-build.check
new file mode 100644
index 0000000000..c8c9ed857e
--- /dev/null
+++ b/test/files/ant/fsc003-build.check
@@ -0,0 +1,14 @@
+
+quick.init:
+
+pack.init:
+
+latest.init:
+
+installed.init:
+
+init:
+
+build:
+ [mkdir] Created dir: [...]/files/ant/fsc003-ant.obj
+ [fsc] Compiling 1 source file to [...]/files/ant/fsc003-ant.obj
diff --git a/test/files/ant/fsc003-build.xml b/test/files/ant/fsc003-build.xml
new file mode 100644
index 0000000000..5f71770bf2
--- /dev/null
+++ b/test/files/ant/fsc003-build.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project name="fsc003" default="run">
+
+ <import file="${basedir}/imported.xml"/>
+
+<!-- ===========================================================================
+BUILD
+============================================================================ -->
+
+ <target name="build" depends="init">
+ <echo level="verbose" message="build.dir=${build.dir}"/>
+ <mkdir dir="${build.dir}"/>
+ <fsc
+ destdir="${build.dir}"
+ classpathref="build.classpath">
+ <src path="${source.dir}"/>
+ <include name="**/${ant.project.name}*.scala"/>
+ </fsc>
+ <echo level="verbose" message="log.file=${log.file}"/>
+ <replace file="${log.file}" token="${log.dir}" value="[...]/files/ant"/>
+ </target>
+
+</project>
+
diff --git a/test/files/ant/fsc003.scala b/test/files/ant/fsc003.scala
new file mode 100644
index 0000000000..6ede5981ce
--- /dev/null
+++ b/test/files/ant/fsc003.scala
@@ -0,0 +1,7 @@
+package test
+
+object Main {
+ def main(args: Array[String]) {
+ println(args mkString " ")
+ }
+}
diff --git a/test/files/ant/imported.xml b/test/files/ant/imported.xml
index 9e2a3ffa1f..5a4dfc319b 100644
--- a/test/files/ant/imported.xml
+++ b/test/files/ant/imported.xml
@@ -1,6 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
-<project name="imported" default="run" basedir=".">
+<project name="imported">
+
+ <!-- This file is imported by the main Ant script. -->
<!-- Prevents system classpath from being used -->
<property name="build.sysclasspath" value="ignore"/>
@@ -11,11 +13,19 @@ PROPERTIES
<property name="source.dir" value="${basedir}"/>
- <property file="./build.properties"/>
+ <property file="${basedir}/build.properties"/>
+
+ <property name="build.dir" location="${source.dir}/${ant.project.name}-ant.obj"/>
+ <property name="log.dir" location="${source.dir}"/>
+ <property name="log.file" value="${log.dir}/${ant.project.name}-build-ant.log"/>
+ <property name="project.dir" value="../../.."/>
<condition property="quick.binary">
<equals arg1="${binary}" arg2="quick"/>
</condition>
+ <condition property="pack.binary">
+ <equals arg1="${binary}" arg2="pack"/>
+ </condition>
<condition property="latest.binary">
<equals arg1="${binary}" arg2="latest"/>
</condition>
@@ -23,16 +33,15 @@ PROPERTIES
<equals arg1="${binary}" arg2="installed"/>
</condition>
- <fail message="Property 'binary' must be set to either 'quick', 'lastest' or 'installed'.">
+ <fail message="Property 'binary' must be set to either 'quick', 'pack', 'latest' or 'installed'.">
<condition><not><or>
<isset property="quick.binary"/>
+ <isset property="pack.binary"/>
<isset property="latest.binary"/>
<isset property="installed.binary"/>
</or></not></condition>
</fail>
<echo level="verbose" message="binary=${binary}"/>
-
- <property name="build.dir" value="${java.io.tmpdir}/classes-${user.name}"/>
<echo level="verbose" message="build.dir=${build.dir}"/>
<!-- ===========================================================================
@@ -40,25 +49,32 @@ INITIALISATION
============================================================================ -->
<target name="quick.init" if="quick.binary">
- <property name="quick.dir" value="../../../build/quick"/>
- <available file="${quick.dir}" property="quick.present"/>
- <fail
- message="Quick build could not be found."
- unless="quick.present"
- />
+ <property name="quick.dir" value="${project.dir}/build/quick"/>
+ <fail message="Quick build could not be found.">
+ <condition><not><available file="${quick.dir}"/></not></condition>
+ </fail>
<property name="scala.dir" value="${quick.dir}"/>
- <property name="scala-library.lib" value="${scala.dir}/lib/library/"/>
- <property name="scala-compiler.lib" value="${scala.dir}/lib/compiler/"/>
- <property name="fjbg.lib" value="${scala.dir}/lib/fjbg.jar"/>
+ <property name="scala-library.lib" value="${scala.dir}/classes/library/"/>
+ <property name="scala-compiler.lib" value="${scala.dir}/classes/compiler/"/>
+ <property name="fjbg.lib" value="${project.dir}/lib/fjbg.jar"/>
+ </target>
+
+ <target name="pack.init" if="pack.binary">
+ <property name="pack.dir" value="${project.dir}/build/pack"/>
+ <fail message="Pack build could not be found.">
+ <condition><not><available file="${pack.dir}"/></not></condition>
+ </fail>
+ <property name="scala.dir" value="${pack.dir}"/>
+ <property name="scala-library.lib" value="${scala.dir}/lib/scala-library.jar"/>
+ <property name="scala-compiler.lib" value="${scala.dir}/lib/scala-compiler.jar"/>
+ <property name="fjbg.lib" value=""/>
</target>
<target name="latest.init" if="latest.binary">
- <property name="latest.dir" value="../../../dists/latest"/>
- <available file="${latest.dir}" property="latest.present"/>
- <fail
- message="Latest build could not be found."
- unless="latest.present"
- />
+ <property name="latest.dir" value="${project.dir}/dists/latest"/>
+ <fail message="Latest build could not be found.">
+ <condition><not><available file="${latest.dir}"/></not></condition>
+ </fail>
<property name="scala.dir" value="${latest.dir}"/>
<property name="scala-library.lib" value="${scala.dir}/lib/scala-library.jar"/>
<property name="scala-compiler.lib" value="${scala.dir}/lib/scala-compiler.jar"/>
@@ -66,55 +82,52 @@ INITIALISATION
</target>
<target name="installed.init" if="installed.binary">
- <property name="installed.dir" value="/home/linuxsoft/apps/scala/share/scala"/>
- <available file="${installed.dir}" property="installed.present"/>
- <fail
- message="Installed distribution could not be found."
- unless="installed.present"
- />
+ <property name="installed.dir" value="/opt/scala"/>
+ <fail message="Installed distribution could not be found.">
+ <condition><not><available file="${installed.dir}"/></not></condition>
+ </fail>
<property name="scala.dir" value="${installed.dir}"/>
<property name="scala-library.lib" value="${scala.dir}/lib/scala-library.jar"/>
<property name="scala-compiler.lib" value="${scala.dir}/lib/scala-compiler.jar"/>
<property name="fjbg.lib" value=""/>
</target>
- <target name="init" depends="quick.init, latest.init, installed.init">
+ <target name="init" depends="quick.init, pack.init, latest.init, installed.init">
<echo level="verbose" message="scala.dir=${scala.dir}"/>
- <fail message="Scala library '${scala-library.lib}' is not available">
+
+ <path id="scala.classpath">
+ <pathelement location="${scala-library.lib}"/>
+ <pathelement location="${scala-compiler.lib}"/>
+ <pathelement location="${fjbg.lib}"/> <!-- only present for 'quick' -->
+ </path>
+
+ <fail message="Scala library '${scala-library.lib}' or '${scala-compiler.lib}' is missing/broken">
<condition><not><and>
<available classname="scala.Predef"
- classpath="${scala-library.lib}"/>
- <available classname="scala.List"
- classpath="${scala-library.lib}"/>
+ classpathref="scala.classpath"/>
+ <available classname="scala.Option"
+ classpathref="scala.classpath"/>
<available classname="scala.runtime.ObjectRef"
- classpath="${scala-library.lib}"/>
- </and></not></condition>
- </fail>
- <fail message="Scala library '${scala-compiler.lib}' is not available">
- <condition><not><and>
+ classpathref="scala.classpath"/>
<available classname="scala.tools.ant.Scalac"
- classpath="${scala-compiler.lib}"/>
+ classpathref="scala.classpath"/>
<available classname="scala.tools.nsc.Main"
- classpath="${scala-compiler.lib}"/>
+ classpathref="scala.classpath"/>
<available classname="scala.tools.util.StringOps"
- classpath="${scala-compiler.lib}"/>
+ classpathref="scala.classpath"/>
</and></not></condition>
</fail>
- <path id="scala.classpath">
- <pathelement location="${scala-library.lib}"/>
- <pathelement location="${scala-compiler.lib}"/>
- <pathelement location="${fjbg.lib}"/> <!-- only present for 'quick' -->
- </path>
- <taskdef resource="scala/tools/ant/antlib.xml">
- <classpath>
- <path refid="scala.classpath"/>
- </classpath>
- </taskdef>
+ <taskdef resource="scala/tools/ant/antlib.xml" classpathref="scala.classpath"/>
+
<path id="build.classpath">
<!--<pathelement location="${scala-actors.lib}"/>-->
<pathelement location="${scala-library.lib}"/>
<pathelement location="${build.dir}"/>
</path>
+
+ <!-- make sure the log file exists when the Ant build scripts -->
+ <!-- are run manually from the command prompt -->
+ <touch file="${log.file}"/>
</target>
<!-- ===========================================================================
diff --git a/test/files/ant/scalac-build.xml b/test/files/ant/scalac-build.xml
deleted file mode 100644
index 0276124852..0000000000
--- a/test/files/ant/scalac-build.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<project name="scalac" default="run" basedir=".">
-
- <import file="${basedir}/imported.xml"/>
-
-<!-- ===========================================================================
-BUILD
-============================================================================ -->
-
- <target name="build" depends="init">
- <echo level="verbose" message="build.dir=${build.dir}"/>
- <mkdir dir="${build.dir}"/>
- <scalac
- srcdir="${source.dir}"
- includes="**/${ant.project.name}*.scala"
- deprecation="yes" unchecked="yes"
- destdir="${build.dir}"
- classpathref="build.classpath"
- />
- <dirname property="log.dir" file="${build.dir}"/>
- <echo level="verbose" message="log.dir=${log.dir}"/>
- <replace
- file="${log.dir}/${ant.project.name}-ant.log"
- token="${log.dir}"
- value="[...]/files/ant"
- />
- </target>
-
-</project>
-
diff --git a/test/files/ant/scalac.check b/test/files/ant/scalac.check
deleted file mode 100644
index c7bd156484..0000000000
--- a/test/files/ant/scalac.check
+++ /dev/null
@@ -1,13 +0,0 @@
-Buildfile: [...]/files/ant/scalac-build.xml
-
-quick.init:
-
-latest.init:
-
-installed.init:
-
-init:
-
-build:
- [mkdir] Created dir: [...]/files/ant/scalac-ant.obj
- [scalac] Compiling 1 source file to [...]/files/ant/scalac-ant.obj
diff --git a/test/files/ant/scalac001-build.check b/test/files/ant/scalac001-build.check
new file mode 100644
index 0000000000..05a43ba572
--- /dev/null
+++ b/test/files/ant/scalac001-build.check
@@ -0,0 +1,14 @@
+
+quick.init:
+
+pack.init:
+
+latest.init:
+
+installed.init:
+
+init:
+
+build:
+ [mkdir] Created dir: [...]/files/ant/scalac001-ant.obj
+ [scalac] Compiling 1 source file to [...]/files/ant/scalac001-ant.obj
diff --git a/test/files/ant/scalac001-build.xml b/test/files/ant/scalac001-build.xml
new file mode 100644
index 0000000000..4ec7fc833c
--- /dev/null
+++ b/test/files/ant/scalac001-build.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project name="scalac001" default="run">
+
+ <import file="${basedir}/imported.xml"/>
+
+<!-- ===========================================================================
+BUILD
+============================================================================ -->
+
+ <target name="build" depends="init">
+ <echo level="verbose" message="build.dir=${build.dir}"/>
+ <mkdir dir="${build.dir}"/>
+ <pathconvert property="classpath" refid="build.classpath"/>
+ <scalac
+ srcdir="${source.dir}"
+ includes="**/${ant.project.name}*.scala"
+ destdir="${build.dir}"
+ classpath="${classpath}"
+ />
+ <echo level="verbose" message="log.file=${log.file}"/>
+ <replace file="${log.file}" token="${log.dir}" value="[...]/files/ant"/>
+ </target>
+
+</project>
+
diff --git a/test/files/ant/scalac.scala b/test/files/ant/scalac001.scala
index 47131daac6..47131daac6 100644
--- a/test/files/ant/scalac.scala
+++ b/test/files/ant/scalac001.scala
diff --git a/test/files/ant/scalac002-build.check b/test/files/ant/scalac002-build.check
new file mode 100644
index 0000000000..e7b3670a0c
--- /dev/null
+++ b/test/files/ant/scalac002-build.check
@@ -0,0 +1,14 @@
+
+quick.init:
+
+pack.init:
+
+latest.init:
+
+installed.init:
+
+init:
+
+build:
+ [mkdir] Created dir: [...]/files/ant/scalac002-ant.obj
+ [scalac] Compiling 1 source file to [...]/files/ant/scalac002-ant.obj
diff --git a/test/files/ant/scalac002-build.xml b/test/files/ant/scalac002-build.xml
new file mode 100644
index 0000000000..07628afa64
--- /dev/null
+++ b/test/files/ant/scalac002-build.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project name="scalac002" default="run">
+
+ <import file="${basedir}/imported.xml"/>
+
+<!-- ===========================================================================
+BUILD
+============================================================================ -->
+
+ <target name="build" depends="init">
+ <echo level="verbose" message="build.dir=${build.dir}"/>
+ <mkdir dir="${build.dir}"/>
+ <path id="source.ref">
+ <pathelement location="${source.dir}"/>
+ </path>
+ <scalac
+ srcref="source.ref"
+ includes="**/${ant.project.name}*.scala"
+ destdir="${build.dir}"
+ classpathref="build.classpath"
+ />
+ <echo level="verbose" message="log.file=${log.file}"/>
+ <replace file="${log.file}" token="${log.dir}" value="[...]/files/ant"/>
+ </target>
+
+</project>
+
diff --git a/test/files/ant/scalac002.scala b/test/files/ant/scalac002.scala
new file mode 100644
index 0000000000..6ede5981ce
--- /dev/null
+++ b/test/files/ant/scalac002.scala
@@ -0,0 +1,7 @@
+package test
+
+object Main {
+ def main(args: Array[String]) {
+ println(args mkString " ")
+ }
+}
diff --git a/test/files/ant/scalac003-build.check b/test/files/ant/scalac003-build.check
new file mode 100644
index 0000000000..7b0d3367ed
--- /dev/null
+++ b/test/files/ant/scalac003-build.check
@@ -0,0 +1,14 @@
+
+quick.init:
+
+pack.init:
+
+latest.init:
+
+installed.init:
+
+init:
+
+build:
+ [mkdir] Created dir: [...]/files/ant/scalac003-ant.obj
+ [scalac] Compiling 1 source file to [...]/files/ant/scalac003-ant.obj
diff --git a/test/files/ant/scalac003-build.xml b/test/files/ant/scalac003-build.xml
new file mode 100644
index 0000000000..1d70aa115e
--- /dev/null
+++ b/test/files/ant/scalac003-build.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project name="scalac003" default="run">
+
+ <import file="${basedir}/imported.xml"/>
+
+<!-- ===========================================================================
+BUILD
+============================================================================ -->
+
+ <target name="build" depends="init">
+ <echo level="verbose" message="build.dir=${build.dir}"/>
+ <mkdir dir="${build.dir}"/>
+ <scalac
+ destdir="${build.dir}"
+ classpathref="build.classpath">
+ <src path="${source.dir}"/>
+ <include name="**/${ant.project.name}*.scala"/>
+ </scalac>
+ <echo level="verbose" message="log.file=${log.file}"/>
+ <replace file="${log.file}" token="${log.dir}" value="[...]/files/ant"/>
+ </target>
+
+</project>
+
diff --git a/test/files/ant/scalac003.scala b/test/files/ant/scalac003.scala
new file mode 100644
index 0000000000..6ede5981ce
--- /dev/null
+++ b/test/files/ant/scalac003.scala
@@ -0,0 +1,7 @@
+package test
+
+object Main {
+ def main(args: Array[String]) {
+ println(args mkString " ")
+ }
+}
diff --git a/test/files/ant/scalac004-build.check b/test/files/ant/scalac004-build.check
new file mode 100644
index 0000000000..ffe9e8c79a
--- /dev/null
+++ b/test/files/ant/scalac004-build.check
@@ -0,0 +1,24 @@
+
+quick.init:
+
+pack.init:
+
+latest.init:
+
+installed.init:
+
+init:
+
+build:
+ [mkdir] Created dir: [...]/files/ant/scalac004-ant.obj
+ [scalac] Compiling 1 source file to [...]/files/ant/scalac004-ant.obj
+ [scalac] [...]/files/ant/scalac004.scala:9: warning: method exit in object Predef is deprecated: Use sys.exit(status) instead
+ [scalac] Predef.exit(0) //deprecated in 2.9.0
+ [scalac] ^
+ [scalac] [...]/files/ant/scalac004.scala:6: warning: match is not exhaustive!
+ [scalac] missing combination Nil
+ [scalac]
+ [scalac] xs match { //(xs: @unchecked) match {
+ [scalac] ^
+ [scalac] two warnings found
+ [scalac] Compile succeeded with 2 warnings; see the compiler output for details.
diff --git a/test/files/ant/scalac004-build.xml b/test/files/ant/scalac004-build.xml
new file mode 100644
index 0000000000..66c19a39fb
--- /dev/null
+++ b/test/files/ant/scalac004-build.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project name="scalac004" default="run">
+
+ <import file="${basedir}/imported.xml"/>
+
+<!-- ===========================================================================
+BUILD
+============================================================================ -->
+
+ <target name="build" depends="init">
+ <echo level="verbose" message="build.dir=${build.dir}"/>
+ <mkdir dir="${build.dir}"/>
+ <scalac
+ deprecation="yes" unchecked="yes"
+ srcdir="${source.dir}"
+ includes="**/${ant.project.name}*.scala"
+ destdir="${build.dir}"
+ classpathref="build.classpath"
+ />
+ <echo level="verbose" message="log.file=${log.file}"/>
+ <replace file="${log.file}" token="${log.dir}" value="[...]/files/ant"/>
+ </target>
+
+</project>
+
diff --git a/test/files/ant/scalac004.scala b/test/files/ant/scalac004.scala
new file mode 100644
index 0000000000..66b2ba7985
--- /dev/null
+++ b/test/files/ant/scalac004.scala
@@ -0,0 +1,11 @@
+package test
+
+object Main {
+ def main(args: Array[String]) {
+ val xs = List(1, 2, 3, 4)
+ xs match { //(xs: @unchecked) match {
+ case x::xs => println(x)
+ }
+ Predef.exit(0) //deprecated in 2.9.0
+ }
+}
diff --git a/test/files/ant/scaladoc-build.check b/test/files/ant/scaladoc-build.check
new file mode 100644
index 0000000000..1c82456ad0
--- /dev/null
+++ b/test/files/ant/scaladoc-build.check
@@ -0,0 +1,15 @@
+
+quick.init:
+
+pack.init:
+
+latest.init:
+
+installed.init:
+
+init:
+
+build:
+ [mkdir] Created dir: [...]/files/ant/scaladoc-ant.obj
+ [scaladoc] Documenting 1 source file to [...]/files/ant/scaladoc-ant.obj
+ [scaladoc] model contains 3 documentable templates
diff --git a/test/files/ant/scaladoc-build.xml b/test/files/ant/scaladoc-build.xml
index 839c7bde21..fb4dc6fe69 100644
--- a/test/files/ant/scaladoc-build.xml
+++ b/test/files/ant/scaladoc-build.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
-<project name="scaladoc" default="run" basedir=".">
+<project name="scaladoc" default="run">
<import file="${basedir}/imported.xml"/>
@@ -18,13 +18,8 @@ BUILD
destdir="${build.dir}"
classpathref="build.classpath"
/>
- <dirname property="log.dir" file="${build.dir}"/>
- <echo level="verbose" message="log.dir=${log.dir}"/>
- <replace
- file="${log.dir}/${ant.project.name}-ant.log"
- token="${log.dir}"
- value="[...]/files/ant"
- />
+ <echo level="verbose" message="log.file=${log.file}"/>
+ <replace file="${log.file}" token="${log.dir}" value="[...]/files/ant"/>
</target>
</project>
diff --git a/test/files/ant/scaladoc.check b/test/files/ant/scaladoc.check
deleted file mode 100644
index a404edce45..0000000000
--- a/test/files/ant/scaladoc.check
+++ /dev/null
@@ -1,13 +0,0 @@
-Buildfile: [...]/files/ant/scaladoc-build.xml
-
-quick.init:
-
-latest.init:
-
-installed.init:
-
-init:
-
-build:
- [mkdir] Created dir: [...]/files/ant/scaladoc-ant.obj
- [scaladoc] Documenting 1 source file to [...]/files/ant/scaladoc-ant.obj
diff --git a/test/files/ant/scaladoc.scala b/test/files/ant/scaladoc.scala
index 47131daac6..6ede5981ce 100644
--- a/test/files/ant/scaladoc.scala
+++ b/test/files/ant/scaladoc.scala
@@ -1,6 +1,7 @@
package test
object Main {
- def main(args: Array[String]): Unit =
- Console.println(args.toList)
+ def main(args: Array[String]) {
+ println(args mkString " ")
+ }
}
diff --git a/test/files/bench/equality/eq.scala b/test/files/bench/equality/eq.scala
new file mode 100755
index 0000000000..8ac5b5ef5c
--- /dev/null
+++ b/test/files/bench/equality/eq.scala
@@ -0,0 +1,34 @@
+object eq extends testing.Benchmark {
+
+ def eqtest[T](creator: Int => T, n: Int): Int = {
+ val elems = Array.tabulate[AnyRef](n)(i => creator(i % 2).asInstanceOf[AnyRef])
+
+ var sum = 0
+ var i = 0
+ while (i < n) {
+ var j = 0
+ while (j < n) {
+ if (elems(i) eq elems(j)) sum += 1
+ j += 1
+ }
+ i += 1
+ }
+ sum
+ }
+
+ val obj1 = new Object
+ val obj2 = new Object
+
+ def run() {
+ var sum = 0
+ sum += eqtest(x => if (x == 0) obj1 else obj2, 2000)
+ sum += eqtest(x => x, 1000)
+ sum += eqtest(x => x.toChar, 550)
+ sum += eqtest(x => x.toByte, 550)
+ sum += eqtest(x => x.toLong, 550)
+ sum += eqtest(x => x.toShort, 100)
+ sum += eqtest(x => x.toFloat, 100)
+ sum += eqtest(x => x.toDouble, 100)
+ assert(sum == 2958950)
+ }
+}
diff --git a/test/files/bench/equality/eqeq.eqlog b/test/files/bench/equality/eqeq.eqlog
new file mode 100644
index 0000000000..d1e27aceed
--- /dev/null
+++ b/test/files/bench/equality/eqeq.eqlog
@@ -0,0 +1,42 @@
+Banchmark results for testing equality operations:
+eq.scala: Base case, use eq equality only
+eqeq.scala: Test case, use == instead of eq.
+All tests run on Thinkpad T400, 1.6.0_12 client VM.
+Test command: java eq 5 5
+ java eqeq 5 5
+eq.scala, no -optimise
+eq$ 109 78 79 63 63
+eq$ 94 63 63 78 78
+eq$ 94 62 62 62 78
+eq$ 94 78 78 78 78
+eq$ 94 78 78 78 78
+eq.scala, with -optimise
+eq$ 421 63 62 47 63
+eq$ 406 62 62 63 62
+eq$ 407 62 62 78 63
+eq$ 406 63 63 62 62
+eq$ 407 62 62 63 47
+eqeq.scala with version of BoxesRuntime as of Nov 13th, no -optimise
+eqeq$ 562 516 516 516 515
+eqeq$ 547 515 515 531 532
+eqeq$ 532 516 516 515 516
+eqeq$ 547 531 531 516 531
+eqeq$ 547 515 515 516 516
+eqeq.scala with version of BoxesRuntime as of Nov 13th, with -optimise
+eqeq$ 1031 390 391 391 391
+eqeq$ 1031 391 391 391 390
+eqeq$ 1031 390 390 391 391
+eqeq$ 1031 406 407 391 390
+eqeq$ 1031 390 390 391 391
+eqeq.scala with 1st optimized of Nov 14th, no -optimise
+eqeq$ 484 421 438 438 437
+eqeq$ 484 438 437 437 438
+eqeq$ 469 437 453 454 438
+eqeq$ 468 437 438 468 438
+eqeq$ 485 437 437 422 438
+eqeq.scala with 1st optimized of Nov 14th, with -optimise
+eqeq$ 1016 375 391 375 375
+eqeq$ 1016 375 391 390 375
+eqeq$ 1016 390 391 375 375
+eqeq$ 1015 375 391 390 375
+eqeq$ 1016 390 375 375 375
diff --git a/test/files/bench/equality/eqeq.scala b/test/files/bench/equality/eqeq.scala
new file mode 100755
index 0000000000..afccece88a
--- /dev/null
+++ b/test/files/bench/equality/eqeq.scala
@@ -0,0 +1,46 @@
+/** benchmark for testing equality.
+ * Mix: == between non-numbers ith Object.equals as equality: 66%
+ * 50% of these are tests where eq is true.
+ * == between boxed integers: 17%
+ * == between boxed characters: 5%
+ * == between boxed bytes: 5%
+ * == between boxed longs: 5%
+ * == between boxed shorts: < 1%
+ * == between boxed floats: < 1%
+ * == between boxed doubles: < 1%
+ * In all cases 50% of the tests return true.
+ */
+object eqeq extends testing.Benchmark {
+
+ def eqeqtest[T](creator: Int => T, n: Int): Int = {
+ val elems = Array.tabulate[AnyRef](n)(i => creator(i % 2).asInstanceOf[AnyRef])
+
+ var sum = 0
+ var i = 0
+ while (i < n) {
+ var j = 0
+ while (j < n) {
+ if (elems(i) == elems(j)) sum += 1
+ j += 1
+ }
+ i += 1
+ }
+ sum
+ }
+
+ val obj1 = new Object
+ val obj2 = new Object
+
+ def run() {
+ var sum = 0
+ sum += eqeqtest(x => if (x == 0) obj1 else obj2, 2000)
+ sum += eqeqtest(x => x, 1000)
+ sum += eqeqtest(x => x.toChar, 550)
+ sum += eqeqtest(x => x.toByte, 550)
+ sum += eqeqtest(x => x.toLong, 550)
+ sum += eqeqtest(x => x.toShort, 100)
+ sum += eqeqtest(x => x.toFloat, 100)
+ sum += eqeqtest(x => x.toDouble, 100)
+ assert(sum == 2968750)
+ }
+}
diff --git a/test/files/buildmanager/annotated/A.scala b/test/files/buildmanager/annotated/A.scala
new file mode 100644
index 0000000000..4130cf21ec
--- /dev/null
+++ b/test/files/buildmanager/annotated/A.scala
@@ -0,0 +1 @@
+case class A[T](x: String, y: T)
diff --git a/test/files/buildmanager/annotated/annotated.check b/test/files/buildmanager/annotated/annotated.check
new file mode 100644
index 0000000000..ce92c9a294
--- /dev/null
+++ b/test/files/buildmanager/annotated/annotated.check
@@ -0,0 +1,6 @@
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map()
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map(class A -> List(), object A -> List())
diff --git a/test/files/buildmanager/annotated/annotated.test b/test/files/buildmanager/annotated/annotated.test
new file mode 100644
index 0000000000..392e0d365f
--- /dev/null
+++ b/test/files/buildmanager/annotated/annotated.test
@@ -0,0 +1,2 @@
+>>compile A.scala
+>>compile A.scala
diff --git a/test/files/buildmanager/freshnames/A.scala b/test/files/buildmanager/freshnames/A.scala
new file mode 100644
index 0000000000..e8ab26ca1e
--- /dev/null
+++ b/test/files/buildmanager/freshnames/A.scala
@@ -0,0 +1,16 @@
+abstract class A {
+
+ var t: List[B]
+
+ def foo(n: String): Option[B] = {
+ t.reverse find (_.names contains n)
+ }
+
+ def bar(n: Int): Option[B] = {
+ t.reverse find (_.names contains n)
+ }
+}
+
+//class A
+case class B(names: List[String])
+
diff --git a/test/files/buildmanager/freshnames/B.scala b/test/files/buildmanager/freshnames/B.scala
new file mode 100644
index 0000000000..d700225c08
--- /dev/null
+++ b/test/files/buildmanager/freshnames/B.scala
@@ -0,0 +1,4 @@
+abstract class C extends A {
+ def test(n: Int) = bar(n)
+}
+
diff --git a/test/files/buildmanager/freshnames/freshnames.check b/test/files/buildmanager/freshnames/freshnames.check
new file mode 100644
index 0000000000..9f05fb8a36
--- /dev/null
+++ b/test/files/buildmanager/freshnames/freshnames.check
@@ -0,0 +1,6 @@
+builder > B.scala A.scala
+compiling Set(A.scala, B.scala)
+Changes: Map()
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map(class A -> List(), class B -> List(), object B -> List())
diff --git a/test/files/buildmanager/freshnames/freshnames.test b/test/files/buildmanager/freshnames/freshnames.test
new file mode 100644
index 0000000000..20b20298f9
--- /dev/null
+++ b/test/files/buildmanager/freshnames/freshnames.test
@@ -0,0 +1,2 @@
+>>compile B.scala A.scala
+>>compile A.scala
diff --git a/test/files/buildmanager/infer/A.scala b/test/files/buildmanager/infer/A.scala
new file mode 100644
index 0000000000..46b5391609
--- /dev/null
+++ b/test/files/buildmanager/infer/A.scala
@@ -0,0 +1,16 @@
+class Foo(flag: Boolean) {
+ val classpath =
+ if (flag)
+ new AClasspath
+ else
+ new BClasspath
+}
+
+class AClasspath extends MergedClasspath[A]
+
+class BClasspath extends MergedClasspath[B]
+
+abstract class MergedClasspath[T]
+
+class A
+class B
diff --git a/test/files/buildmanager/infer/infer.check b/test/files/buildmanager/infer/infer.check
new file mode 100644
index 0000000000..1f736977ff
--- /dev/null
+++ b/test/files/buildmanager/infer/infer.check
@@ -0,0 +1,6 @@
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map()
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map(class A -> List(), class AClasspath -> List(), class B -> List(), class BClasspath -> List(), class Foo -> List(), class MergedClasspath -> List())
diff --git a/test/files/buildmanager/infer/infer.test b/test/files/buildmanager/infer/infer.test
new file mode 100644
index 0000000000..392e0d365f
--- /dev/null
+++ b/test/files/buildmanager/infer/infer.test
@@ -0,0 +1,2 @@
+>>compile A.scala
+>>compile A.scala
diff --git a/test/files/buildmanager/namesdefaults/defparam-use.scala b/test/files/buildmanager/namesdefaults/defparam-use.scala
new file mode 100644
index 0000000000..5b5bbb3f4e
--- /dev/null
+++ b/test/files/buildmanager/namesdefaults/defparam-use.scala
@@ -0,0 +1,5 @@
+
+object Test extends App {
+ val outer = new Outer
+ new outer.Inner
+}
diff --git a/test/files/buildmanager/namesdefaults/defparam.scala b/test/files/buildmanager/namesdefaults/defparam.scala
new file mode 100644
index 0000000000..d817c719ab
--- /dev/null
+++ b/test/files/buildmanager/namesdefaults/defparam.scala
@@ -0,0 +1,7 @@
+class Outer {
+
+ class Inner(val x: List[Int] = Nil)
+
+// lazy val Inner = "abc"
+}
+
diff --git a/test/files/buildmanager/namesdefaults/namesdefaults.check b/test/files/buildmanager/namesdefaults/namesdefaults.check
new file mode 100644
index 0000000000..4a94d1fb55
--- /dev/null
+++ b/test/files/buildmanager/namesdefaults/namesdefaults.check
@@ -0,0 +1,9 @@
+builder > defparam.scala defparam-use.scala
+compiling Set(defparam-use.scala, defparam.scala)
+Changes: Map()
+builder > defparam-use.scala
+compiling Set(defparam-use.scala)
+Changes: Map(class Test$delayedInit$body -> List(), object Test -> List())
+builder > defparam-use.scala
+compiling Set(defparam-use.scala)
+Changes: Map(class Test$delayedInit$body -> List(), object Test -> List())
diff --git a/test/files/buildmanager/namesdefaults/namesdefaults.test b/test/files/buildmanager/namesdefaults/namesdefaults.test
new file mode 100644
index 0000000000..84ccc36bc3
--- /dev/null
+++ b/test/files/buildmanager/namesdefaults/namesdefaults.test
@@ -0,0 +1,3 @@
+>>compile defparam.scala defparam-use.scala
+>>compile defparam-use.scala
+>>compile defparam-use.scala
diff --git a/test/files/buildmanager/overloaded_1/A.scala b/test/files/buildmanager/overloaded_1/A.scala
new file mode 100644
index 0000000000..33b63b8006
--- /dev/null
+++ b/test/files/buildmanager/overloaded_1/A.scala
@@ -0,0 +1,11 @@
+trait As {
+ trait C extends D {
+ override def foo = this /// Shouldn't cause the change
+ override def foo(act: List[D]) = this
+ }
+
+ abstract class D{
+ def foo: D = this
+ def foo(act: List[D]) = this
+ }
+}
diff --git a/test/files/buildmanager/overloaded_1/overloaded_1.check b/test/files/buildmanager/overloaded_1/overloaded_1.check
new file mode 100644
index 0000000000..4d643ce6b4
--- /dev/null
+++ b/test/files/buildmanager/overloaded_1/overloaded_1.check
@@ -0,0 +1,6 @@
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map()
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map(class As$D -> List(), object As$C$class -> List(), object As$class -> List(), trait As -> List(), trait As$C -> List())
diff --git a/test/files/buildmanager/overloaded_1/overloaded_1.test b/test/files/buildmanager/overloaded_1/overloaded_1.test
new file mode 100644
index 0000000000..392e0d365f
--- /dev/null
+++ b/test/files/buildmanager/overloaded_1/overloaded_1.test
@@ -0,0 +1,2 @@
+>>compile A.scala
+>>compile A.scala
diff --git a/test/files/buildmanager/simpletest/A.scala b/test/files/buildmanager/simpletest/A.scala
new file mode 100644
index 0000000000..ef704706bb
--- /dev/null
+++ b/test/files/buildmanager/simpletest/A.scala
@@ -0,0 +1,3 @@
+class A {
+ def foo = 2
+}
diff --git a/test/files/buildmanager/simpletest/B.scala b/test/files/buildmanager/simpletest/B.scala
new file mode 100644
index 0000000000..364dc6e4cb
--- /dev/null
+++ b/test/files/buildmanager/simpletest/B.scala
@@ -0,0 +1,3 @@
+class B extends A {
+ override def foo = 2
+}
diff --git a/test/files/buildmanager/simpletest/simpletest.changes/A1.scala b/test/files/buildmanager/simpletest/simpletest.changes/A1.scala
new file mode 100644
index 0000000000..83d15dc739
--- /dev/null
+++ b/test/files/buildmanager/simpletest/simpletest.changes/A1.scala
@@ -0,0 +1 @@
+class A
diff --git a/test/files/buildmanager/simpletest/simpletest.check b/test/files/buildmanager/simpletest/simpletest.check
new file mode 100644
index 0000000000..95ea2c4c0d
--- /dev/null
+++ b/test/files/buildmanager/simpletest/simpletest.check
@@ -0,0 +1,11 @@
+builder > A.scala B.scala
+compiling Set(A.scala, B.scala)
+Changes: Map()
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map(class A -> List(Removed(Definition(A.foo))))
+invalidate B.scala because inherited method removed [Removed(Definition(A.foo))]
+compiling Set(B.scala)
+B.scala:2: error: method foo overrides nothing
+ override def foo = 2
+ ^
diff --git a/test/files/buildmanager/simpletest/simpletest.test b/test/files/buildmanager/simpletest/simpletest.test
new file mode 100644
index 0000000000..2c0be1502f
--- /dev/null
+++ b/test/files/buildmanager/simpletest/simpletest.test
@@ -0,0 +1,3 @@
+>>compile A.scala B.scala
+>>update A.scala=>A1.scala
+>>compile A.scala
diff --git a/test/files/buildmanager/t2280/A.scala b/test/files/buildmanager/t2280/A.scala
new file mode 100644
index 0000000000..5febadeb06
--- /dev/null
+++ b/test/files/buildmanager/t2280/A.scala
@@ -0,0 +1 @@
+class A extends B
diff --git a/test/files/buildmanager/t2280/B.java b/test/files/buildmanager/t2280/B.java
new file mode 100644
index 0000000000..aef8e106e9
--- /dev/null
+++ b/test/files/buildmanager/t2280/B.java
@@ -0,0 +1,2 @@
+public class B {}
+
diff --git a/test/files/buildmanager/t2280/t2280.check b/test/files/buildmanager/t2280/t2280.check
new file mode 100644
index 0000000000..7ea7511c63
--- /dev/null
+++ b/test/files/buildmanager/t2280/t2280.check
@@ -0,0 +1,6 @@
+builder > A.scala B.java
+compiling Set(A.scala, B.java)
+Changes: Map()
+builder > B.java
+compiling Set(B.java)
+Changes: Map(class B -> List())
diff --git a/test/files/buildmanager/t2280/t2280.test b/test/files/buildmanager/t2280/t2280.test
new file mode 100644
index 0000000000..2eda777853
--- /dev/null
+++ b/test/files/buildmanager/t2280/t2280.test
@@ -0,0 +1,2 @@
+>>compile A.scala B.java
+>>compile B.java
diff --git a/test/files/buildmanager/t2556_1/A.scala b/test/files/buildmanager/t2556_1/A.scala
new file mode 100644
index 0000000000..c6e200b217
--- /dev/null
+++ b/test/files/buildmanager/t2556_1/A.scala
@@ -0,0 +1,3 @@
+class A {
+ def x(i: Int) = i+"3"
+}
diff --git a/test/files/buildmanager/t2556_1/B.scala b/test/files/buildmanager/t2556_1/B.scala
new file mode 100644
index 0000000000..8529587b56
--- /dev/null
+++ b/test/files/buildmanager/t2556_1/B.scala
@@ -0,0 +1,3 @@
+class B extends A {
+ def x(s: String) = s+"5"
+}
diff --git a/test/files/buildmanager/t2556_1/t2556_1.changes/A2.scala b/test/files/buildmanager/t2556_1/t2556_1.changes/A2.scala
new file mode 100644
index 0000000000..4ac1045e13
--- /dev/null
+++ b/test/files/buildmanager/t2556_1/t2556_1.changes/A2.scala
@@ -0,0 +1,4 @@
+class A {
+ def x(i: String) = i+"3"
+}
+
diff --git a/test/files/buildmanager/t2556_1/t2556_1.check b/test/files/buildmanager/t2556_1/t2556_1.check
new file mode 100644
index 0000000000..2e501c8f6f
--- /dev/null
+++ b/test/files/buildmanager/t2556_1/t2556_1.check
@@ -0,0 +1,12 @@
+builder > A.scala B.scala
+compiling Set(A.scala, B.scala)
+Changes: Map()
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map(class A -> List(Changed(Definition(A.x))[method x changed from (i: Int)String to (i: String)String flags: <method>]))
+invalidate B.scala because inherited method changed [Changed(Definition(A.x))[method x changed from (i: Int)String to (i: String)String flags: <method>]]
+compiling Set(B.scala)
+B.scala:2: error: overriding method x in class A of type (i: String)String;
+ method x needs `override' modifier
+ def x(s: String) = s+"5"
+ ^
diff --git a/test/files/buildmanager/t2556_1/t2556_1.test b/test/files/buildmanager/t2556_1/t2556_1.test
new file mode 100644
index 0000000000..6f3bd03361
--- /dev/null
+++ b/test/files/buildmanager/t2556_1/t2556_1.test
@@ -0,0 +1,3 @@
+>>compile A.scala B.scala
+>>update A.scala=>A2.scala
+>>compile A.scala
diff --git a/test/files/buildmanager/t2556_2/A.scala b/test/files/buildmanager/t2556_2/A.scala
new file mode 100644
index 0000000000..b8da5c8fb1
--- /dev/null
+++ b/test/files/buildmanager/t2556_2/A.scala
@@ -0,0 +1,4 @@
+class A {
+ def x(i: Int) = i+"3"
+}
+
diff --git a/test/files/buildmanager/t2556_2/B.scala b/test/files/buildmanager/t2556_2/B.scala
new file mode 100644
index 0000000000..80ff25d0ca
--- /dev/null
+++ b/test/files/buildmanager/t2556_2/B.scala
@@ -0,0 +1,2 @@
+class B extends A
+
diff --git a/test/files/buildmanager/t2556_2/C.scala b/test/files/buildmanager/t2556_2/C.scala
new file mode 100644
index 0000000000..0ab13e3757
--- /dev/null
+++ b/test/files/buildmanager/t2556_2/C.scala
@@ -0,0 +1,4 @@
+class C extends B {
+ def x(s: String) = s+"5"
+}
+
diff --git a/test/files/buildmanager/t2556_2/t2556_2.changes/A2.scala b/test/files/buildmanager/t2556_2/t2556_2.changes/A2.scala
new file mode 100644
index 0000000000..4ac1045e13
--- /dev/null
+++ b/test/files/buildmanager/t2556_2/t2556_2.changes/A2.scala
@@ -0,0 +1,4 @@
+class A {
+ def x(i: String) = i+"3"
+}
+
diff --git a/test/files/buildmanager/t2556_2/t2556_2.check b/test/files/buildmanager/t2556_2/t2556_2.check
new file mode 100644
index 0000000000..cae4f72212
--- /dev/null
+++ b/test/files/buildmanager/t2556_2/t2556_2.check
@@ -0,0 +1,13 @@
+builder > A.scala B.scala C.scala
+compiling Set(A.scala, B.scala, C.scala)
+Changes: Map()
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map(class A -> List(Changed(Definition(A.x))[method x changed from (i: Int)String to (i: String)String flags: <method>]))
+invalidate B.scala because inherited method changed [Changed(Definition(A.x))[method x changed from (i: Int)String to (i: String)String flags: <method>]]
+invalidate C.scala because inherited method changed [Changed(Definition(A.x))[method x changed from (i: Int)String to (i: String)String flags: <method>]]
+compiling Set(B.scala, C.scala)
+C.scala:2: error: overriding method x in class A of type (i: String)String;
+ method x needs `override' modifier
+ def x(s: String) = s+"5"
+ ^
diff --git a/test/files/buildmanager/t2556_2/t2556_2.test b/test/files/buildmanager/t2556_2/t2556_2.test
new file mode 100644
index 0000000000..9f31bb6409
--- /dev/null
+++ b/test/files/buildmanager/t2556_2/t2556_2.test
@@ -0,0 +1,3 @@
+>>compile A.scala B.scala C.scala
+>>update A.scala=>A2.scala
+>>compile A.scala
diff --git a/test/files/buildmanager/t2556_3/A.scala b/test/files/buildmanager/t2556_3/A.scala
new file mode 100644
index 0000000000..089a05f493
--- /dev/null
+++ b/test/files/buildmanager/t2556_3/A.scala
@@ -0,0 +1,5 @@
+class A {
+ def x = 3
+}
+class B extends A
+
diff --git a/test/files/buildmanager/t2556_3/B.scala b/test/files/buildmanager/t2556_3/B.scala
new file mode 100644
index 0000000000..0ec5ae4b55
--- /dev/null
+++ b/test/files/buildmanager/t2556_3/B.scala
@@ -0,0 +1,5 @@
+object E {
+ def main(args: Array[String]) =
+ println( (new C).x )
+}
+
diff --git a/test/files/buildmanager/t2556_3/C.scala b/test/files/buildmanager/t2556_3/C.scala
new file mode 100644
index 0000000000..403df8455e
--- /dev/null
+++ b/test/files/buildmanager/t2556_3/C.scala
@@ -0,0 +1,2 @@
+class C extends B
+
diff --git a/test/files/buildmanager/t2556_3/t2556_3.changes/A2.scala b/test/files/buildmanager/t2556_3/t2556_3.changes/A2.scala
new file mode 100644
index 0000000000..21cb2779f9
--- /dev/null
+++ b/test/files/buildmanager/t2556_3/t2556_3.changes/A2.scala
@@ -0,0 +1,5 @@
+class A {
+ def x = 3
+}
+class B
+
diff --git a/test/files/buildmanager/t2556_3/t2556_3.check b/test/files/buildmanager/t2556_3/t2556_3.check
new file mode 100644
index 0000000000..bf26602494
--- /dev/null
+++ b/test/files/buildmanager/t2556_3/t2556_3.check
@@ -0,0 +1,18 @@
+builder > A.scala B.scala C.scala
+compiling Set(A.scala, B.scala, C.scala)
+Changes: Map()
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map(class A -> List(), class B -> List(Changed(Class(B))[List((A,Object), (ScalaObject,ScalaObject))]))
+invalidate C.scala because parents have changed [Changed(Class(B))[List((A,Object), (ScalaObject,ScalaObject))]]
+invalidate B.scala because it references invalid (no longer inherited) definition [ParentChanged(Class(C))]
+compiling Set(B.scala, C.scala)
+B.scala:3: error: type mismatch;
+ found : C
+ required: ?{val x: ?}
+Note that implicit conversions are not applicable because they are ambiguous:
+ both method any2Ensuring in object Predef of type [A](x: A)Ensuring[A]
+ and method any2ArrowAssoc in object Predef of type [A](x: A)ArrowAssoc[A]
+ are possible conversion functions from C to ?{val x: ?}
+ println( (new C).x )
+ ^
diff --git a/test/files/buildmanager/t2556_3/t2556_3.test b/test/files/buildmanager/t2556_3/t2556_3.test
new file mode 100644
index 0000000000..9f31bb6409
--- /dev/null
+++ b/test/files/buildmanager/t2556_3/t2556_3.test
@@ -0,0 +1,3 @@
+>>compile A.scala B.scala C.scala
+>>update A.scala=>A2.scala
+>>compile A.scala
diff --git a/test/files/buildmanager/t2557/A.scala b/test/files/buildmanager/t2557/A.scala
new file mode 100644
index 0000000000..3be55f19a6
--- /dev/null
+++ b/test/files/buildmanager/t2557/A.scala
@@ -0,0 +1,4 @@
+trait A {
+ def x = 3
+}
+
diff --git a/test/files/buildmanager/t2557/B.scala b/test/files/buildmanager/t2557/B.scala
new file mode 100644
index 0000000000..ea86a90079
--- /dev/null
+++ b/test/files/buildmanager/t2557/B.scala
@@ -0,0 +1,4 @@
+trait B extends A {
+ override def x = super.x * 2
+}
+
diff --git a/test/files/buildmanager/t2557/C.scala b/test/files/buildmanager/t2557/C.scala
new file mode 100644
index 0000000000..dd575ac38d
--- /dev/null
+++ b/test/files/buildmanager/t2557/C.scala
@@ -0,0 +1,3 @@
+trait C extends A {
+ override def x = super.x + 5
+}
diff --git a/test/files/buildmanager/t2557/D.scala b/test/files/buildmanager/t2557/D.scala
new file mode 100644
index 0000000000..4e662a80ce
--- /dev/null
+++ b/test/files/buildmanager/t2557/D.scala
@@ -0,0 +1 @@
+trait D extends C with B
diff --git a/test/files/buildmanager/t2557/E.scala b/test/files/buildmanager/t2557/E.scala
new file mode 100644
index 0000000000..2aee552675
--- /dev/null
+++ b/test/files/buildmanager/t2557/E.scala
@@ -0,0 +1 @@
+trait E extends D
diff --git a/test/files/buildmanager/t2557/F.scala b/test/files/buildmanager/t2557/F.scala
new file mode 100644
index 0000000000..e1996704e7
--- /dev/null
+++ b/test/files/buildmanager/t2557/F.scala
@@ -0,0 +1,4 @@
+object F extends E {
+ def main(args: Array[String]) =
+ println(x)
+}
diff --git a/test/files/buildmanager/t2557/t2557.changes/D2.scala b/test/files/buildmanager/t2557/t2557.changes/D2.scala
new file mode 100644
index 0000000000..67295f8e6d
--- /dev/null
+++ b/test/files/buildmanager/t2557/t2557.changes/D2.scala
@@ -0,0 +1,2 @@
+trait D extends B with C
+
diff --git a/test/files/buildmanager/t2557/t2557.check b/test/files/buildmanager/t2557/t2557.check
new file mode 100644
index 0000000000..736ef3645e
--- /dev/null
+++ b/test/files/buildmanager/t2557/t2557.check
@@ -0,0 +1,10 @@
+builder > A.scala B.scala C.scala D.scala E.scala F.scala
+compiling Set(A.scala, B.scala, C.scala, D.scala, E.scala, F.scala)
+Changes: Map()
+builder > D.scala
+compiling Set(D.scala)
+Changes: Map(trait D -> List(Changed(Class(D))[List((Object,Object), (C,B), (B,C))]))
+invalidate E.scala because parents have changed [Changed(Class(D))[List((Object,Object), (C,B), (B,C))]]
+invalidate F.scala because parents have changed [Changed(Class(D))[List((Object,Object), (C,B), (B,C))]]
+compiling Set(E.scala, F.scala)
+Changes: Map(object F -> List(), trait E -> List())
diff --git a/test/files/buildmanager/t2557/t2557.test b/test/files/buildmanager/t2557/t2557.test
new file mode 100644
index 0000000000..6b0103092f
--- /dev/null
+++ b/test/files/buildmanager/t2557/t2557.test
@@ -0,0 +1,3 @@
+>>compile A.scala B.scala C.scala D.scala E.scala F.scala
+>>update D.scala=>D2.scala
+>>compile D.scala
diff --git a/test/files/buildmanager/t2559/A.scala b/test/files/buildmanager/t2559/A.scala
new file mode 100644
index 0000000000..fb4f6e3545
--- /dev/null
+++ b/test/files/buildmanager/t2559/A.scala
@@ -0,0 +1,5 @@
+sealed trait A
+class B extends A
+class C extends A
+//class E extends A
+
diff --git a/test/files/buildmanager/t2559/D.scala b/test/files/buildmanager/t2559/D.scala
new file mode 100644
index 0000000000..906b69a3e7
--- /dev/null
+++ b/test/files/buildmanager/t2559/D.scala
@@ -0,0 +1,8 @@
+object D {
+ def x(a: A) =
+ a match {
+ case _: B => ()
+ case _: C => ()
+ }
+}
+
diff --git a/test/files/buildmanager/t2559/t2559.changes/A2.scala b/test/files/buildmanager/t2559/t2559.changes/A2.scala
new file mode 100644
index 0000000000..8e90594e2c
--- /dev/null
+++ b/test/files/buildmanager/t2559/t2559.changes/A2.scala
@@ -0,0 +1,5 @@
+sealed trait A
+class B extends A
+class C extends A
+class E extends A
+
diff --git a/test/files/buildmanager/t2559/t2559.check b/test/files/buildmanager/t2559/t2559.check
new file mode 100644
index 0000000000..752278fbe8
--- /dev/null
+++ b/test/files/buildmanager/t2559/t2559.check
@@ -0,0 +1,14 @@
+builder > A.scala D.scala
+compiling Set(A.scala, D.scala)
+Changes: Map()
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map(class B -> List(), class C -> List(), class E -> List(Changed(Class(A))[class E extends a sealed trait A]), trait A -> List())
+invalidate D.scala because it references changed class [Changed(Class(A))[class E extends a sealed trait A]]
+compiling Set(D.scala)
+D.scala:3: warning: match is not exhaustive!
+missing combination E
+
+ a match {
+ ^
+Changes: Map(object D -> List())
diff --git a/test/files/buildmanager/t2559/t2559.test b/test/files/buildmanager/t2559/t2559.test
new file mode 100644
index 0000000000..b787c5b39f
--- /dev/null
+++ b/test/files/buildmanager/t2559/t2559.test
@@ -0,0 +1,3 @@
+>>compile A.scala D.scala
+>>update A.scala=>A2.scala
+>>compile A.scala
diff --git a/test/files/buildmanager/t2562/A.scala b/test/files/buildmanager/t2562/A.scala
new file mode 100644
index 0000000000..740cd1e868
--- /dev/null
+++ b/test/files/buildmanager/t2562/A.scala
@@ -0,0 +1,7 @@
+object A
+{
+ def x0 = B.x0
+ def x1 = B.x1
+ def x2 = B.x2
+ def x3 = 3
+}
diff --git a/test/files/buildmanager/t2562/B.scala b/test/files/buildmanager/t2562/B.scala
new file mode 100644
index 0000000000..a524e5cc84
--- /dev/null
+++ b/test/files/buildmanager/t2562/B.scala
@@ -0,0 +1,8 @@
+object B
+{
+ def x0 = A.x1
+ def x1 = A.x2
+ def x2 = A.x3
+}
+
+
diff --git a/test/files/buildmanager/t2562/t2562.changes/A2.scala b/test/files/buildmanager/t2562/t2562.changes/A2.scala
new file mode 100644
index 0000000000..c560e1e816
--- /dev/null
+++ b/test/files/buildmanager/t2562/t2562.changes/A2.scala
@@ -0,0 +1,8 @@
+object A
+{
+ def x0 = B.x0
+ def x1 = B.x1
+ def x2 = B.x2
+ def x3 = "3"
+}
+
diff --git a/test/files/buildmanager/t2562/t2562.check b/test/files/buildmanager/t2562/t2562.check
new file mode 100644
index 0000000000..390bbb9986
--- /dev/null
+++ b/test/files/buildmanager/t2562/t2562.check
@@ -0,0 +1,12 @@
+builder > A.scala B.scala
+compiling Set(A.scala, B.scala)
+Changes: Map()
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map(object A -> List(Changed(Definition(A.x3))[method x3 changed from ()Int to ()String flags: <method>]))
+invalidate B.scala because it references changed definition [Changed(Definition(A.x3))[method x3 changed from ()Int to ()String flags: <method>]]
+compiling Set(B.scala)
+Changes: Map(object B -> List(Changed(Definition(B.x2))[method x2 changed from ()Int to ()String flags: <method>]))
+invalidate A.scala because it references changed definition [Changed(Definition(B.x2))[method x2 changed from ()Int to ()String flags: <method>]]
+compiling Set(A.scala, B.scala)
+Changes: Map(object A -> List(Changed(Definition(A.x0))[method x0 changed from ()Int to ()String flags: <method>], Changed(Definition(A.x1))[method x1 changed from ()Int to ()String flags: <method>], Changed(Definition(A.x2))[method x2 changed from ()Int to ()String flags: <method>]), object B -> List(Changed(Definition(B.x0))[method x0 changed from ()Int to ()String flags: <method>], Changed(Definition(B.x1))[method x1 changed from ()Int to ()String flags: <method>]))
diff --git a/test/files/buildmanager/t2562/t2562.test b/test/files/buildmanager/t2562/t2562.test
new file mode 100644
index 0000000000..6f3bd03361
--- /dev/null
+++ b/test/files/buildmanager/t2562/t2562.test
@@ -0,0 +1,3 @@
+>>compile A.scala B.scala
+>>update A.scala=>A2.scala
+>>compile A.scala
diff --git a/test/files/buildmanager/t2649/A.scala b/test/files/buildmanager/t2649/A.scala
new file mode 100644
index 0000000000..86cc3f2c15
--- /dev/null
+++ b/test/files/buildmanager/t2649/A.scala
@@ -0,0 +1,3 @@
+object A {
+ def x(zz: Int, yy: Int) = yy - zz
+}
diff --git a/test/files/buildmanager/t2649/B.scala b/test/files/buildmanager/t2649/B.scala
new file mode 100644
index 0000000000..26c89518cb
--- /dev/null
+++ b/test/files/buildmanager/t2649/B.scala
@@ -0,0 +1,4 @@
+object B {
+ def main(args: Array[String]): Unit =
+ println( A.x(zz = 3, yy = 4) )
+}
diff --git a/test/files/buildmanager/t2649/t2649.changes/A2.scala b/test/files/buildmanager/t2649/t2649.changes/A2.scala
new file mode 100644
index 0000000000..9a6309fca3
--- /dev/null
+++ b/test/files/buildmanager/t2649/t2649.changes/A2.scala
@@ -0,0 +1,4 @@
+object A {
+ def x(yy: Int, zz: Int) = yy - zz
+}
+
diff --git a/test/files/buildmanager/t2649/t2649.check b/test/files/buildmanager/t2649/t2649.check
new file mode 100644
index 0000000000..390f284fd3
--- /dev/null
+++ b/test/files/buildmanager/t2649/t2649.check
@@ -0,0 +1,9 @@
+builder > A.scala B.scala
+compiling Set(A.scala, B.scala)
+Changes: Map()
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map(object A -> List(Changed(Definition(A.x))[method x changed from (zz: Int, yy: Int)Int to (yy: Int, zz: Int)Int flags: <method>]))
+invalidate B.scala because it references changed definition [Changed(Definition(A.x))[method x changed from (zz: Int, yy: Int)Int to (yy: Int, zz: Int)Int flags: <method>]]
+compiling Set(B.scala)
+Changes: Map(object B -> List())
diff --git a/test/files/buildmanager/t2649/t2649.test b/test/files/buildmanager/t2649/t2649.test
new file mode 100644
index 0000000000..6f3bd03361
--- /dev/null
+++ b/test/files/buildmanager/t2649/t2649.test
@@ -0,0 +1,3 @@
+>>compile A.scala B.scala
+>>update A.scala=>A2.scala
+>>compile A.scala
diff --git a/test/files/buildmanager/t2650_1/A.scala b/test/files/buildmanager/t2650_1/A.scala
new file mode 100644
index 0000000000..74714a3c47
--- /dev/null
+++ b/test/files/buildmanager/t2650_1/A.scala
@@ -0,0 +1,4 @@
+trait A {
+ type S[_]
+}
+
diff --git a/test/files/buildmanager/t2650_1/B.scala b/test/files/buildmanager/t2650_1/B.scala
new file mode 100644
index 0000000000..80f0e30259
--- /dev/null
+++ b/test/files/buildmanager/t2650_1/B.scala
@@ -0,0 +1,3 @@
+trait B extends A {
+ type F = S[Int]
+}
diff --git a/test/files/buildmanager/t2650_1/t2650_1.changes/A2.scala b/test/files/buildmanager/t2650_1/t2650_1.changes/A2.scala
new file mode 100644
index 0000000000..2b8ead4ff1
--- /dev/null
+++ b/test/files/buildmanager/t2650_1/t2650_1.changes/A2.scala
@@ -0,0 +1,3 @@
+trait A {
+ type S
+}
diff --git a/test/files/buildmanager/t2650_1/t2650_1.check b/test/files/buildmanager/t2650_1/t2650_1.check
new file mode 100644
index 0000000000..ecddb33620
--- /dev/null
+++ b/test/files/buildmanager/t2650_1/t2650_1.check
@@ -0,0 +1,11 @@
+builder > A.scala B.scala
+compiling Set(A.scala, B.scala)
+Changes: Map()
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map(trait A -> List(Changed(Definition(A.S))[type S changed from A.this.S[_] to A.this.S flags: <deferred>]))
+invalidate B.scala because inherited method changed [Changed(Definition(A.S))[type S changed from A.this.S[_] to A.this.S flags: <deferred>]]
+compiling Set(B.scala)
+B.scala:2: error: B.this.S does not take type parameters
+ type F = S[Int]
+ ^
diff --git a/test/files/buildmanager/t2650_1/t2650_1.test b/test/files/buildmanager/t2650_1/t2650_1.test
new file mode 100644
index 0000000000..6f3bd03361
--- /dev/null
+++ b/test/files/buildmanager/t2650_1/t2650_1.test
@@ -0,0 +1,3 @@
+>>compile A.scala B.scala
+>>update A.scala=>A2.scala
+>>compile A.scala
diff --git a/test/files/buildmanager/t2650_2/A.scala b/test/files/buildmanager/t2650_2/A.scala
new file mode 100644
index 0000000000..bcea634485
--- /dev/null
+++ b/test/files/buildmanager/t2650_2/A.scala
@@ -0,0 +1,3 @@
+trait A {
+ type S = Int
+}
diff --git a/test/files/buildmanager/t2650_2/B.scala b/test/files/buildmanager/t2650_2/B.scala
new file mode 100644
index 0000000000..22a3a9a48e
--- /dev/null
+++ b/test/files/buildmanager/t2650_2/B.scala
@@ -0,0 +1,4 @@
+trait B extends A {
+ def x: S
+ def y: Int = x
+}
diff --git a/test/files/buildmanager/t2650_2/t2650_2.changes/A2.scala b/test/files/buildmanager/t2650_2/t2650_2.changes/A2.scala
new file mode 100644
index 0000000000..8274c1b62d
--- /dev/null
+++ b/test/files/buildmanager/t2650_2/t2650_2.changes/A2.scala
@@ -0,0 +1,4 @@
+trait A {
+ type S = Long
+}
+
diff --git a/test/files/buildmanager/t2650_2/t2650_2.check b/test/files/buildmanager/t2650_2/t2650_2.check
new file mode 100644
index 0000000000..53a0287dfc
--- /dev/null
+++ b/test/files/buildmanager/t2650_2/t2650_2.check
@@ -0,0 +1,14 @@
+builder > A.scala B.scala
+compiling Set(A.scala, B.scala)
+Changes: Map()
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map(trait A -> List(Changed(Definition(A.S))[type S changed from A.this.S to A.this.S flags: ]))
+invalidate B.scala because inherited method changed [Changed(Definition(A.S))[type S changed from A.this.S to A.this.S flags: ]]
+compiling Set(B.scala)
+B.scala:3: error: type mismatch;
+ found : B.this.S
+ (which expands to) Long
+ required: Int
+ def y: Int = x
+ ^
diff --git a/test/files/buildmanager/t2650_2/t2650_2.test b/test/files/buildmanager/t2650_2/t2650_2.test
new file mode 100644
index 0000000000..6f3bd03361
--- /dev/null
+++ b/test/files/buildmanager/t2650_2/t2650_2.test
@@ -0,0 +1,3 @@
+>>compile A.scala B.scala
+>>update A.scala=>A2.scala
+>>compile A.scala
diff --git a/test/files/buildmanager/t2650_3/A.scala b/test/files/buildmanager/t2650_3/A.scala
new file mode 100644
index 0000000000..cd13843eb9
--- /dev/null
+++ b/test/files/buildmanager/t2650_3/A.scala
@@ -0,0 +1,4 @@
+trait A {
+ type T = Int
+ def x: T
+}
diff --git a/test/files/buildmanager/t2650_3/B.scala b/test/files/buildmanager/t2650_3/B.scala
new file mode 100644
index 0000000000..46a8cf270a
--- /dev/null
+++ b/test/files/buildmanager/t2650_3/B.scala
@@ -0,0 +1,3 @@
+object B {
+ def x(a: A): Int = a.x
+}
diff --git a/test/files/buildmanager/t2650_3/t2650_3.changes/A2.scala b/test/files/buildmanager/t2650_3/t2650_3.changes/A2.scala
new file mode 100644
index 0000000000..e5667b2539
--- /dev/null
+++ b/test/files/buildmanager/t2650_3/t2650_3.changes/A2.scala
@@ -0,0 +1,4 @@
+trait A {
+ type T = Long
+ def x: T
+}
diff --git a/test/files/buildmanager/t2650_3/t2650_3.check b/test/files/buildmanager/t2650_3/t2650_3.check
new file mode 100644
index 0000000000..c109800d9c
--- /dev/null
+++ b/test/files/buildmanager/t2650_3/t2650_3.check
@@ -0,0 +1,15 @@
+builder > A.scala B.scala
+compiling Set(A.scala, B.scala)
+Changes: Map()
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map(trait A -> List(Changed(Definition(A.T))[type T changed from A.this.T to A.this.T flags: ]))
+invalidate B.scala because it references changed definition [Changed(Definition(A.T))[type T changed from A.this.T to A.this.T flags: ]]
+compiling Set(B.scala)
+B.scala:2: error: type mismatch;
+ found : a.T
+ (which expands to) Long
+ required: Int
+ possible cause: missing arguments for method or constructor
+ def x(a: A): Int = a.x
+ ^
diff --git a/test/files/buildmanager/t2650_3/t2650_3.test b/test/files/buildmanager/t2650_3/t2650_3.test
new file mode 100644
index 0000000000..6f3bd03361
--- /dev/null
+++ b/test/files/buildmanager/t2650_3/t2650_3.test
@@ -0,0 +1,3 @@
+>>compile A.scala B.scala
+>>update A.scala=>A2.scala
+>>compile A.scala
diff --git a/test/files/buildmanager/t2650_4/A.scala b/test/files/buildmanager/t2650_4/A.scala
new file mode 100644
index 0000000000..b9a519eb48
--- /dev/null
+++ b/test/files/buildmanager/t2650_4/A.scala
@@ -0,0 +1,5 @@
+trait A {
+ type T = Int
+ type T2 = T
+ def x: T2
+}
diff --git a/test/files/buildmanager/t2650_4/B.scala b/test/files/buildmanager/t2650_4/B.scala
new file mode 100644
index 0000000000..46a8cf270a
--- /dev/null
+++ b/test/files/buildmanager/t2650_4/B.scala
@@ -0,0 +1,3 @@
+object B {
+ def x(a: A): Int = a.x
+}
diff --git a/test/files/buildmanager/t2650_4/t2650_4.changes/A2.scala b/test/files/buildmanager/t2650_4/t2650_4.changes/A2.scala
new file mode 100644
index 0000000000..0220e7b7bc
--- /dev/null
+++ b/test/files/buildmanager/t2650_4/t2650_4.changes/A2.scala
@@ -0,0 +1,5 @@
+trait A {
+ type T = Long
+ type T2 = T
+ def x: T2
+}
diff --git a/test/files/buildmanager/t2650_4/t2650_4.check b/test/files/buildmanager/t2650_4/t2650_4.check
new file mode 100644
index 0000000000..89536776bd
--- /dev/null
+++ b/test/files/buildmanager/t2650_4/t2650_4.check
@@ -0,0 +1,15 @@
+builder > A.scala B.scala
+compiling Set(A.scala, B.scala)
+Changes: Map()
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map(trait A -> List(Changed(Definition(A.T))[type T changed from A.this.T to A.this.T flags: ]))
+invalidate B.scala because it references changed definition [Changed(Definition(A.T))[type T changed from A.this.T to A.this.T flags: ]]
+compiling Set(B.scala)
+B.scala:2: error: type mismatch;
+ found : a.T2
+ (which expands to) Long
+ required: Int
+ possible cause: missing arguments for method or constructor
+ def x(a: A): Int = a.x
+ ^
diff --git a/test/files/buildmanager/t2650_4/t2650_4.test b/test/files/buildmanager/t2650_4/t2650_4.test
new file mode 100644
index 0000000000..6f3bd03361
--- /dev/null
+++ b/test/files/buildmanager/t2650_4/t2650_4.test
@@ -0,0 +1,3 @@
+>>compile A.scala B.scala
+>>update A.scala=>A2.scala
+>>compile A.scala
diff --git a/test/files/buildmanager/t2651_2/A.scala b/test/files/buildmanager/t2651_2/A.scala
new file mode 100644
index 0000000000..d712f6febe
--- /dev/null
+++ b/test/files/buildmanager/t2651_2/A.scala
@@ -0,0 +1 @@
+trait A[T]
diff --git a/test/files/buildmanager/t2651_2/t2651_2.changes/A2.scala b/test/files/buildmanager/t2651_2/t2651_2.changes/A2.scala
new file mode 100644
index 0000000000..7fb573e077
--- /dev/null
+++ b/test/files/buildmanager/t2651_2/t2651_2.changes/A2.scala
@@ -0,0 +1 @@
+trait A[S]
diff --git a/test/files/buildmanager/t2651_2/t2651_2.check b/test/files/buildmanager/t2651_2/t2651_2.check
new file mode 100644
index 0000000000..dd789b7565
--- /dev/null
+++ b/test/files/buildmanager/t2651_2/t2651_2.check
@@ -0,0 +1,6 @@
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map()
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map(trait A -> List())
diff --git a/test/files/buildmanager/t2651_2/t2651_2.test b/test/files/buildmanager/t2651_2/t2651_2.test
new file mode 100644
index 0000000000..d0614473ce
--- /dev/null
+++ b/test/files/buildmanager/t2651_2/t2651_2.test
@@ -0,0 +1,3 @@
+>>compile A.scala
+>>update A.scala=>A2.scala
+>>compile A.scala
diff --git a/test/files/buildmanager/t2651_3/A.scala b/test/files/buildmanager/t2651_3/A.scala
new file mode 100644
index 0000000000..14f9e4662f
--- /dev/null
+++ b/test/files/buildmanager/t2651_3/A.scala
@@ -0,0 +1,3 @@
+trait A[T, S] {
+ def x: T
+}
diff --git a/test/files/buildmanager/t2651_3/t2651_3.changes/A2.scala b/test/files/buildmanager/t2651_3/t2651_3.changes/A2.scala
new file mode 100644
index 0000000000..51bf27d1fa
--- /dev/null
+++ b/test/files/buildmanager/t2651_3/t2651_3.changes/A2.scala
@@ -0,0 +1,3 @@
+trait A[T, S] {
+ def x: S
+}
diff --git a/test/files/buildmanager/t2651_3/t2651_3.check b/test/files/buildmanager/t2651_3/t2651_3.check
new file mode 100644
index 0000000000..d4bac196e9
--- /dev/null
+++ b/test/files/buildmanager/t2651_3/t2651_3.check
@@ -0,0 +1,6 @@
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map()
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map(trait A -> List(Changed(Definition(A.x))[method x changed from ()T to ()S flags: <deferred> <method>]))
diff --git a/test/files/buildmanager/t2651_3/t2651_3.test b/test/files/buildmanager/t2651_3/t2651_3.test
new file mode 100644
index 0000000000..d0614473ce
--- /dev/null
+++ b/test/files/buildmanager/t2651_3/t2651_3.test
@@ -0,0 +1,3 @@
+>>compile A.scala
+>>update A.scala=>A2.scala
+>>compile A.scala
diff --git a/test/files/buildmanager/t2651_4/A.scala b/test/files/buildmanager/t2651_4/A.scala
new file mode 100644
index 0000000000..63f2a1643e
--- /dev/null
+++ b/test/files/buildmanager/t2651_4/A.scala
@@ -0,0 +1,5 @@
+trait A[T, S] {
+ def x: T
+ def y(a: T)
+ def z[B <: T]
+}
diff --git a/test/files/buildmanager/t2651_4/B.scala b/test/files/buildmanager/t2651_4/B.scala
new file mode 100644
index 0000000000..b33dbde676
--- /dev/null
+++ b/test/files/buildmanager/t2651_4/B.scala
@@ -0,0 +1,3 @@
+trait B extends A[Int, String] {
+ def x = 3
+}
diff --git a/test/files/buildmanager/t2651_4/t2651_4.changes/A2.scala b/test/files/buildmanager/t2651_4/t2651_4.changes/A2.scala
new file mode 100644
index 0000000000..f155129d13
--- /dev/null
+++ b/test/files/buildmanager/t2651_4/t2651_4.changes/A2.scala
@@ -0,0 +1,5 @@
+trait A[S, T] {
+ def x: T
+ def y(a: T)
+ def z[B <: T]
+}
diff --git a/test/files/buildmanager/t2651_4/t2651_4.check b/test/files/buildmanager/t2651_4/t2651_4.check
new file mode 100644
index 0000000000..c4ce382b5f
--- /dev/null
+++ b/test/files/buildmanager/t2651_4/t2651_4.check
@@ -0,0 +1,13 @@
+builder > A.scala B.scala
+compiling Set(A.scala, B.scala)
+Changes: Map()
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map(trait A -> List(Changed(Definition(A.x))[method x changed from ()T to ()T flags: <deferred> <method>], Changed(Definition(A.y))[method y changed from (a: T)Unit to (a: T)Unit flags: <deferred> <method>], Changed(Definition(A.z))[method z changed from [B <: T]()Unit to [B <: T]()Unit flags: <deferred> <method>]))
+invalidate B.scala because inherited method changed [Changed(Definition(A.x))[method x changed from ()T to ()T flags: <deferred> <method>]]
+compiling Set(B.scala)
+B.scala:2: error: type mismatch;
+ found : Int(3)
+ required: String
+ def x = 3
+ ^
diff --git a/test/files/buildmanager/t2651_4/t2651_4.test b/test/files/buildmanager/t2651_4/t2651_4.test
new file mode 100644
index 0000000000..6f3bd03361
--- /dev/null
+++ b/test/files/buildmanager/t2651_4/t2651_4.test
@@ -0,0 +1,3 @@
+>>compile A.scala B.scala
+>>update A.scala=>A2.scala
+>>compile A.scala
diff --git a/test/files/buildmanager/t2652/A.scala b/test/files/buildmanager/t2652/A.scala
new file mode 100644
index 0000000000..a62506e890
--- /dev/null
+++ b/test/files/buildmanager/t2652/A.scala
@@ -0,0 +1,3 @@
+class A {
+ def x[T](t: T) = t
+}
diff --git a/test/files/buildmanager/t2652/B.scala b/test/files/buildmanager/t2652/B.scala
new file mode 100644
index 0000000000..86d08f0d3d
--- /dev/null
+++ b/test/files/buildmanager/t2652/B.scala
@@ -0,0 +1,4 @@
+object B {
+ val y = (new A).x(3)
+}
+
diff --git a/test/files/buildmanager/t2652/t2652.changes/A2.scala b/test/files/buildmanager/t2652/t2652.changes/A2.scala
new file mode 100644
index 0000000000..29135c0e94
--- /dev/null
+++ b/test/files/buildmanager/t2652/t2652.changes/A2.scala
@@ -0,0 +1,4 @@
+class A {
+ def x[@specialized T](t: T) = t
+}
+
diff --git a/test/files/buildmanager/t2652/t2652.check b/test/files/buildmanager/t2652/t2652.check
new file mode 100644
index 0000000000..f517f9e95a
--- /dev/null
+++ b/test/files/buildmanager/t2652/t2652.check
@@ -0,0 +1,9 @@
+builder > A.scala B.scala
+compiling Set(A.scala, B.scala)
+Changes: Map()
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map(class A -> List(Added(Definition(A.x$mBc$sp)), Added(Definition(A.x$mCc$sp)), Added(Definition(A.x$mDc$sp)), Added(Definition(A.x$mFc$sp)), Added(Definition(A.x$mIc$sp)), Added(Definition(A.x$mJc$sp)), Added(Definition(A.x$mSc$sp)), Added(Definition(A.x$mVc$sp)), Added(Definition(A.x$mZc$sp)), Changed(Definition(A.x))[method x changed from [T](t: T)T to [T](t: T)T flags: <method>]))
+invalidate B.scala because it references changed definition [Changed(Definition(A.x))[method x changed from [T](t: T)T to [T](t: T)T flags: <method>]]
+compiling Set(B.scala)
+Changes: Map(object B -> List())
diff --git a/test/files/buildmanager/t2652/t2652.test b/test/files/buildmanager/t2652/t2652.test
new file mode 100644
index 0000000000..6f3bd03361
--- /dev/null
+++ b/test/files/buildmanager/t2652/t2652.test
@@ -0,0 +1,3 @@
+>>compile A.scala B.scala
+>>update A.scala=>A2.scala
+>>compile A.scala
diff --git a/test/files/buildmanager/t2653/A.scala b/test/files/buildmanager/t2653/A.scala
new file mode 100644
index 0000000000..fb17a158c7
--- /dev/null
+++ b/test/files/buildmanager/t2653/A.scala
@@ -0,0 +1,2 @@
+class A[+T]
+
diff --git a/test/files/buildmanager/t2653/B.scala b/test/files/buildmanager/t2653/B.scala
new file mode 100644
index 0000000000..8f55a88e05
--- /dev/null
+++ b/test/files/buildmanager/t2653/B.scala
@@ -0,0 +1,3 @@
+object B {
+ val a: A[Any] = new A[Int]
+}
diff --git a/test/files/buildmanager/t2653/t2653.changes/A2.scala b/test/files/buildmanager/t2653/t2653.changes/A2.scala
new file mode 100644
index 0000000000..51d13cce6e
--- /dev/null
+++ b/test/files/buildmanager/t2653/t2653.changes/A2.scala
@@ -0,0 +1,2 @@
+class A[T]
+
diff --git a/test/files/buildmanager/t2653/t2653.check b/test/files/buildmanager/t2653/t2653.check
new file mode 100644
index 0000000000..6a4fc0e982
--- /dev/null
+++ b/test/files/buildmanager/t2653/t2653.check
@@ -0,0 +1,15 @@
+builder > A.scala B.scala
+compiling Set(A.scala, B.scala)
+Changes: Map()
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map(class A -> List(Changed(Class(A))[ tparams: List((type T,type T))], Changed(Definition(A.<init>))[constructor A changed from ()A[T] to ()A[T] flags: <method>]))
+invalidate B.scala because it references changed class [Changed(Class(A))[ tparams: List((type T,type T))]]
+compiling Set(B.scala)
+B.scala:2: error: type mismatch;
+ found : A[Int]
+ required: A[Any]
+Note: Int <: Any, but class A is invariant in type T.
+You may wish to define T as +T instead. (SLS 4.5)
+ val a: A[Any] = new A[Int]
+ ^
diff --git a/test/files/buildmanager/t2653/t2653.test b/test/files/buildmanager/t2653/t2653.test
new file mode 100644
index 0000000000..6f3bd03361
--- /dev/null
+++ b/test/files/buildmanager/t2653/t2653.test
@@ -0,0 +1,3 @@
+>>compile A.scala B.scala
+>>update A.scala=>A2.scala
+>>compile A.scala
diff --git a/test/files/buildmanager/t2654/A.scala b/test/files/buildmanager/t2654/A.scala
new file mode 100644
index 0000000000..75f396d039
--- /dev/null
+++ b/test/files/buildmanager/t2654/A.scala
@@ -0,0 +1,2 @@
+class A
+
diff --git a/test/files/buildmanager/t2654/B.scala b/test/files/buildmanager/t2654/B.scala
new file mode 100644
index 0000000000..a18aec3dbe
--- /dev/null
+++ b/test/files/buildmanager/t2654/B.scala
@@ -0,0 +1 @@
+class B extends A
diff --git a/test/files/buildmanager/t2654/t2654.changes/A2.scala b/test/files/buildmanager/t2654/t2654.changes/A2.scala
new file mode 100644
index 0000000000..c302edbd85
--- /dev/null
+++ b/test/files/buildmanager/t2654/t2654.changes/A2.scala
@@ -0,0 +1,4 @@
+class A {
+ private def x = 5
+}
+
diff --git a/test/files/buildmanager/t2654/t2654.check b/test/files/buildmanager/t2654/t2654.check
new file mode 100644
index 0000000000..68f6e8efc0
--- /dev/null
+++ b/test/files/buildmanager/t2654/t2654.check
@@ -0,0 +1,6 @@
+builder > A.scala B.scala
+compiling Set(A.scala, B.scala)
+Changes: Map()
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map(class A -> List())
diff --git a/test/files/buildmanager/t2654/t2654.test b/test/files/buildmanager/t2654/t2654.test
new file mode 100644
index 0000000000..6f3bd03361
--- /dev/null
+++ b/test/files/buildmanager/t2654/t2654.test
@@ -0,0 +1,3 @@
+>>compile A.scala B.scala
+>>update A.scala=>A2.scala
+>>compile A.scala
diff --git a/test/files/buildmanager/t2655/A.scala b/test/files/buildmanager/t2655/A.scala
new file mode 100644
index 0000000000..b2c54ac47d
--- /dev/null
+++ b/test/files/buildmanager/t2655/A.scala
@@ -0,0 +1,4 @@
+object A {
+ def x(i: => String) = ()
+}
+
diff --git a/test/files/buildmanager/t2655/B.scala b/test/files/buildmanager/t2655/B.scala
new file mode 100644
index 0000000000..6c1918c0fb
--- /dev/null
+++ b/test/files/buildmanager/t2655/B.scala
@@ -0,0 +1,3 @@
+object B {
+ val x = A.x("3")
+}
diff --git a/test/files/buildmanager/t2655/t2655.changes/A2.scala b/test/files/buildmanager/t2655/t2655.changes/A2.scala
new file mode 100644
index 0000000000..0d6a7c69bb
--- /dev/null
+++ b/test/files/buildmanager/t2655/t2655.changes/A2.scala
@@ -0,0 +1,4 @@
+object A {
+ def x(i: Function0[String]) = ()
+}
+
diff --git a/test/files/buildmanager/t2655/t2655.check b/test/files/buildmanager/t2655/t2655.check
new file mode 100644
index 0000000000..c473e9fd6e
--- /dev/null
+++ b/test/files/buildmanager/t2655/t2655.check
@@ -0,0 +1,13 @@
+builder > A.scala B.scala
+compiling Set(A.scala, B.scala)
+Changes: Map()
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map(object A -> List(Changed(Definition(A.x))[method x changed from (i: Function0)Unit to (i: Function0)Unit flags: <method>]))
+invalidate B.scala because it references changed definition [Changed(Definition(A.x))[method x changed from (i: Function0)Unit to (i: Function0)Unit flags: <method>]]
+compiling Set(B.scala)
+B.scala:2: error: type mismatch;
+ found : String("3")
+ required: () => String
+ val x = A.x("3")
+ ^
diff --git a/test/files/buildmanager/t2655/t2655.test b/test/files/buildmanager/t2655/t2655.test
new file mode 100644
index 0000000000..6f3bd03361
--- /dev/null
+++ b/test/files/buildmanager/t2655/t2655.test
@@ -0,0 +1,3 @@
+>>compile A.scala B.scala
+>>update A.scala=>A2.scala
+>>compile A.scala
diff --git a/test/files/buildmanager/t2657/A.scala b/test/files/buildmanager/t2657/A.scala
new file mode 100644
index 0000000000..2a6c62d29c
--- /dev/null
+++ b/test/files/buildmanager/t2657/A.scala
@@ -0,0 +1,3 @@
+class A {
+ implicit def y(i: Int): String = i.toString
+}
diff --git a/test/files/buildmanager/t2657/B.scala b/test/files/buildmanager/t2657/B.scala
new file mode 100644
index 0000000000..77869890db
--- /dev/null
+++ b/test/files/buildmanager/t2657/B.scala
@@ -0,0 +1,4 @@
+object B extends A {
+ val x: String = 3
+}
+
diff --git a/test/files/buildmanager/t2657/t2657.changes/A2.scala b/test/files/buildmanager/t2657/t2657.changes/A2.scala
new file mode 100644
index 0000000000..7dc99d425e
--- /dev/null
+++ b/test/files/buildmanager/t2657/t2657.changes/A2.scala
@@ -0,0 +1,3 @@
+class A {
+ def y(i: Int): String = i.toString
+}
diff --git a/test/files/buildmanager/t2657/t2657.check b/test/files/buildmanager/t2657/t2657.check
new file mode 100644
index 0000000000..3fd0e0666d
--- /dev/null
+++ b/test/files/buildmanager/t2657/t2657.check
@@ -0,0 +1,13 @@
+builder > A.scala B.scala
+compiling Set(A.scala, B.scala)
+Changes: Map()
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map(class A -> List(Changed(Definition(A.y))[method y changed from (i: Int)String to (i: Int)String flags: implicit <method>]))
+invalidate B.scala because inherited method changed [Changed(Definition(A.y))[method y changed from (i: Int)String to (i: Int)String flags: implicit <method>]]
+compiling Set(B.scala)
+B.scala:2: error: type mismatch;
+ found : Int(3)
+ required: String
+ val x: String = 3
+ ^
diff --git a/test/files/buildmanager/t2657/t2657.test b/test/files/buildmanager/t2657/t2657.test
new file mode 100644
index 0000000000..6f3bd03361
--- /dev/null
+++ b/test/files/buildmanager/t2657/t2657.test
@@ -0,0 +1,3 @@
+>>compile A.scala B.scala
+>>update A.scala=>A2.scala
+>>compile A.scala
diff --git a/test/files/buildmanager/t2789/A.scala b/test/files/buildmanager/t2789/A.scala
new file mode 100644
index 0000000000..08d5bc840c
--- /dev/null
+++ b/test/files/buildmanager/t2789/A.scala
@@ -0,0 +1,5 @@
+class A {
+ implicit def e: E = new E
+ def x(i: Int)(implicit y: E): String = ""
+}
+class E
diff --git a/test/files/buildmanager/t2789/B.scala b/test/files/buildmanager/t2789/B.scala
new file mode 100644
index 0000000000..dcefbeec1b
--- /dev/null
+++ b/test/files/buildmanager/t2789/B.scala
@@ -0,0 +1,3 @@
+object B extends A {
+ val y = x(3)
+}
diff --git a/test/files/buildmanager/t2789/t2789.changes/A2.scala b/test/files/buildmanager/t2789/t2789.changes/A2.scala
new file mode 100644
index 0000000000..4ba3814e71
--- /dev/null
+++ b/test/files/buildmanager/t2789/t2789.changes/A2.scala
@@ -0,0 +1,5 @@
+class A {
+ def e: E = new E
+ def x(i: Int)(implicit y: E): String = ""
+}
+class E
diff --git a/test/files/buildmanager/t2789/t2789.check b/test/files/buildmanager/t2789/t2789.check
new file mode 100644
index 0000000000..78c5119355
--- /dev/null
+++ b/test/files/buildmanager/t2789/t2789.check
@@ -0,0 +1,11 @@
+builder > A.scala B.scala
+compiling Set(A.scala, B.scala)
+Changes: Map()
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map(class A -> List(Changed(Definition(A.e))[method e changed from ()E to ()E flags: implicit <method>]), class E -> List())
+invalidate B.scala because inherited method changed [Changed(Definition(A.e))[method e changed from ()E to ()E flags: implicit <method>]]
+compiling Set(B.scala)
+B.scala:2: error: could not find implicit value for parameter y: E
+ val y = x(3)
+ ^
diff --git a/test/files/buildmanager/t2789/t2789.test b/test/files/buildmanager/t2789/t2789.test
new file mode 100644
index 0000000000..6f3bd03361
--- /dev/null
+++ b/test/files/buildmanager/t2789/t2789.test
@@ -0,0 +1,3 @@
+>>compile A.scala B.scala
+>>update A.scala=>A2.scala
+>>compile A.scala
diff --git a/test/files/buildmanager/t2790/A.scala b/test/files/buildmanager/t2790/A.scala
new file mode 100644
index 0000000000..6e9c1a90db
--- /dev/null
+++ b/test/files/buildmanager/t2790/A.scala
@@ -0,0 +1,5 @@
+object A {
+ def x(f: String, g: Int): Int = g
+ def x(f: Int, g: Int = 3): Int = g
+}
+
diff --git a/test/files/buildmanager/t2790/B.scala b/test/files/buildmanager/t2790/B.scala
new file mode 100644
index 0000000000..441055ca12
--- /dev/null
+++ b/test/files/buildmanager/t2790/B.scala
@@ -0,0 +1,4 @@
+object B {
+ val y = A.x(5)
+}
+
diff --git a/test/files/buildmanager/t2790/t2790.changes/A2.scala b/test/files/buildmanager/t2790/t2790.changes/A2.scala
new file mode 100644
index 0000000000..704ef4e96e
--- /dev/null
+++ b/test/files/buildmanager/t2790/t2790.changes/A2.scala
@@ -0,0 +1,4 @@
+object A {
+ def x(f: String, g: Int = 3): Int = g
+ def x(f: Int, g: Int): Int = g
+}
diff --git a/test/files/buildmanager/t2790/t2790.check b/test/files/buildmanager/t2790/t2790.check
new file mode 100644
index 0000000000..4e41db4e49
--- /dev/null
+++ b/test/files/buildmanager/t2790/t2790.check
@@ -0,0 +1,14 @@
+builder > A.scala B.scala
+compiling Set(A.scala, B.scala)
+Changes: Map()
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map(object A -> List(Added(Definition(A.x)), Changed(Definition(A.x))[value x changed from (f: String, g: Int)Int to (f: String, g: Int)Int <and> (f: Int, g: Int)Int flags: <method>]))
+invalidate B.scala because it references changed definition [Changed(Definition(A.x))[value x changed from (f: String, g: Int)Int to (f: String, g: Int)Int <and> (f: Int, g: Int)Int flags: <method>]]
+compiling Set(B.scala)
+B.scala:2: error: type mismatch;
+ found : Int(5)
+ required: String
+Error occurred in an application involving default arguments.
+ val y = A.x(5)
+ ^
diff --git a/test/files/buildmanager/t2790/t2790.test b/test/files/buildmanager/t2790/t2790.test
new file mode 100644
index 0000000000..6f3bd03361
--- /dev/null
+++ b/test/files/buildmanager/t2790/t2790.test
@@ -0,0 +1,3 @@
+>>compile A.scala B.scala
+>>update A.scala=>A2.scala
+>>compile A.scala
diff --git a/test/files/buildmanager/t2792/A1.scala b/test/files/buildmanager/t2792/A1.scala
new file mode 100644
index 0000000000..96dc0ef933
--- /dev/null
+++ b/test/files/buildmanager/t2792/A1.scala
@@ -0,0 +1,3 @@
+object A {
+ val x = new C
+}
diff --git a/test/files/buildmanager/t2792/A2.scala b/test/files/buildmanager/t2792/A2.scala
new file mode 100644
index 0000000000..e55e681c76
--- /dev/null
+++ b/test/files/buildmanager/t2792/A2.scala
@@ -0,0 +1,4 @@
+object B {
+ import A.x.y
+ val z = y
+}
diff --git a/test/files/buildmanager/t2792/A3.scala b/test/files/buildmanager/t2792/A3.scala
new file mode 100644
index 0000000000..cd083cdb34
--- /dev/null
+++ b/test/files/buildmanager/t2792/A3.scala
@@ -0,0 +1,3 @@
+class C {
+ val y = 4
+}
diff --git a/test/files/buildmanager/t2792/t2792.changes/A1_1.scala b/test/files/buildmanager/t2792/t2792.changes/A1_1.scala
new file mode 100644
index 0000000000..00ee05f273
--- /dev/null
+++ b/test/files/buildmanager/t2792/t2792.changes/A1_1.scala
@@ -0,0 +1,3 @@
+object A {
+ var x = new C
+}
diff --git a/test/files/buildmanager/t2792/t2792.check b/test/files/buildmanager/t2792/t2792.check
new file mode 100644
index 0000000000..68e14c6386
--- /dev/null
+++ b/test/files/buildmanager/t2792/t2792.check
@@ -0,0 +1,11 @@
+builder > A1.scala A2.scala A3.scala
+compiling Set(A1.scala, A2.scala, A3.scala)
+Changes: Map()
+builder > A1.scala
+compiling Set(A1.scala)
+Changes: Map(object A -> List(Added(Definition(A.x_$eq)), Changed(Definition(A.x))[value x changed to variable x]))
+invalidate A2.scala because it references changed definition [Changed(Definition(A.x))[value x changed to variable x]]
+compiling Set(A2.scala)
+A2.scala:2: error: stable identifier required, but A.x found.
+ import A.x.y
+ ^
diff --git a/test/files/buildmanager/t2792/t2792.test b/test/files/buildmanager/t2792/t2792.test
new file mode 100644
index 0000000000..f199950bba
--- /dev/null
+++ b/test/files/buildmanager/t2792/t2792.test
@@ -0,0 +1,3 @@
+>>compile A1.scala A2.scala A3.scala
+>>update A1.scala=>A1_1.scala
+>>compile A1.scala
diff --git a/test/files/buildmanager/t3045/A.java b/test/files/buildmanager/t3045/A.java
new file mode 100644
index 0000000000..d1acb00cd6
--- /dev/null
+++ b/test/files/buildmanager/t3045/A.java
@@ -0,0 +1,7 @@
+public interface A {
+ public class C implements A {}
+}
+
+class B {
+ static class C {}
+}
diff --git a/test/files/buildmanager/t3045/t3045.check b/test/files/buildmanager/t3045/t3045.check
new file mode 100644
index 0000000000..5e4e71e045
--- /dev/null
+++ b/test/files/buildmanager/t3045/t3045.check
@@ -0,0 +1,3 @@
+builder > A.java
+compiling Set(A.java)
+Changes: Map()
diff --git a/test/files/buildmanager/t3045/t3045.test b/test/files/buildmanager/t3045/t3045.test
new file mode 100644
index 0000000000..6cf7e35543
--- /dev/null
+++ b/test/files/buildmanager/t3045/t3045.test
@@ -0,0 +1 @@
+>>compile A.java
diff --git a/test/files/buildmanager/t3054/bar/Bar.java b/test/files/buildmanager/t3054/bar/Bar.java
new file mode 100644
index 0000000000..e1b056d4e5
--- /dev/null
+++ b/test/files/buildmanager/t3054/bar/Bar.java
@@ -0,0 +1,7 @@
+package bar;
+import foo.Foo$;
+
+
+public class Bar {
+ void bar() { Foo$.MODULE$.foo(); }
+}
diff --git a/test/files/buildmanager/t3054/foo/Foo.scala b/test/files/buildmanager/t3054/foo/Foo.scala
new file mode 100644
index 0000000000..c0fcd97390
--- /dev/null
+++ b/test/files/buildmanager/t3054/foo/Foo.scala
@@ -0,0 +1,5 @@
+package foo
+
+class Foo {
+ def foo() = println("foo")
+}
diff --git a/test/files/buildmanager/t3054/t3054.check b/test/files/buildmanager/t3054/t3054.check
new file mode 100644
index 0000000000..97cca8862e
--- /dev/null
+++ b/test/files/buildmanager/t3054/t3054.check
@@ -0,0 +1,3 @@
+builder > bar/Bar.java foo/Foo.scala
+compiling Set(bar/Bar.java, foo/Foo.scala)
+Changes: Map()
diff --git a/test/files/buildmanager/t3054/t3054.test b/test/files/buildmanager/t3054/t3054.test
new file mode 100644
index 0000000000..903df24b13
--- /dev/null
+++ b/test/files/buildmanager/t3054/t3054.test
@@ -0,0 +1 @@
+>>compile bar/Bar.java foo/Foo.scala
diff --git a/test/files/buildmanager/t3059/A.scala b/test/files/buildmanager/t3059/A.scala
new file mode 100644
index 0000000000..0dd25f6647
--- /dev/null
+++ b/test/files/buildmanager/t3059/A.scala
@@ -0,0 +1,4 @@
+class A extends B {
+ private def getBar = List(1,2,3)
+ lazy val bar: List[Int] = getBar
+}
diff --git a/test/files/buildmanager/t3059/B.scala b/test/files/buildmanager/t3059/B.scala
new file mode 100644
index 0000000000..46596870ac
--- /dev/null
+++ b/test/files/buildmanager/t3059/B.scala
@@ -0,0 +1,4 @@
+abstract class B {
+ private def getFoo = 12
+ lazy val foo: Int = getFoo
+}
diff --git a/test/files/buildmanager/t3059/t3059.check b/test/files/buildmanager/t3059/t3059.check
new file mode 100644
index 0000000000..4a8076aae1
--- /dev/null
+++ b/test/files/buildmanager/t3059/t3059.check
@@ -0,0 +1,6 @@
+builder > A.scala B.scala
+compiling Set(A.scala, B.scala)
+Changes: Map()
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map(class A -> List()) \ No newline at end of file
diff --git a/test/files/buildmanager/t3059/t3059.test b/test/files/buildmanager/t3059/t3059.test
new file mode 100644
index 0000000000..6f3749dc4b
--- /dev/null
+++ b/test/files/buildmanager/t3059/t3059.test
@@ -0,0 +1,2 @@
+>>compile A.scala B.scala
+>>compile A.scala \ No newline at end of file
diff --git a/test/files/buildmanager/t3133/A.java b/test/files/buildmanager/t3133/A.java
new file mode 100644
index 0000000000..c4e7f3af0e
--- /dev/null
+++ b/test/files/buildmanager/t3133/A.java
@@ -0,0 +1,7 @@
+public class A {
+ class Foo {}
+
+ public A(Foo a) {}
+
+ private void bar(Foo z) {}
+}
diff --git a/test/files/buildmanager/t3133/t3133.check b/test/files/buildmanager/t3133/t3133.check
new file mode 100644
index 0000000000..5e4e71e045
--- /dev/null
+++ b/test/files/buildmanager/t3133/t3133.check
@@ -0,0 +1,3 @@
+builder > A.java
+compiling Set(A.java)
+Changes: Map()
diff --git a/test/files/buildmanager/t3133/t3133.test b/test/files/buildmanager/t3133/t3133.test
new file mode 100644
index 0000000000..6cf7e35543
--- /dev/null
+++ b/test/files/buildmanager/t3133/t3133.test
@@ -0,0 +1 @@
+>>compile A.java
diff --git a/test/files/buildmanager/t3140/A.scala b/test/files/buildmanager/t3140/A.scala
new file mode 100644
index 0000000000..f7768044d1
--- /dev/null
+++ b/test/files/buildmanager/t3140/A.scala
@@ -0,0 +1,8 @@
+class As {
+ trait A {
+ def foo(parents: String): A = {
+ (() => parents)
+ null
+ }
+ }
+}
diff --git a/test/files/buildmanager/t3140/t3140.check b/test/files/buildmanager/t3140/t3140.check
new file mode 100644
index 0000000000..008d5a9618
--- /dev/null
+++ b/test/files/buildmanager/t3140/t3140.check
@@ -0,0 +1,6 @@
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map()
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map(class As -> List(), object As$A$class -> List(), trait As$A -> List())
diff --git a/test/files/buildmanager/t3140/t3140.test b/test/files/buildmanager/t3140/t3140.test
new file mode 100644
index 0000000000..392e0d365f
--- /dev/null
+++ b/test/files/buildmanager/t3140/t3140.test
@@ -0,0 +1,2 @@
+>>compile A.scala
+>>compile A.scala
diff --git a/test/files/buildmanager/t4215/A.scala b/test/files/buildmanager/t4215/A.scala
new file mode 100644
index 0000000000..9db40b0fee
--- /dev/null
+++ b/test/files/buildmanager/t4215/A.scala
@@ -0,0 +1,5 @@
+class A {
+ def B() {
+ object C
+ }
+}
diff --git a/test/files/buildmanager/t4215/t4215.check b/test/files/buildmanager/t4215/t4215.check
new file mode 100644
index 0000000000..d9ec9a743a
--- /dev/null
+++ b/test/files/buildmanager/t4215/t4215.check
@@ -0,0 +1,6 @@
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map()
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map(class A -> List(), object A$C$2 -> List())
diff --git a/test/files/buildmanager/t4215/t4215.test b/test/files/buildmanager/t4215/t4215.test
new file mode 100644
index 0000000000..392e0d365f
--- /dev/null
+++ b/test/files/buildmanager/t4215/t4215.test
@@ -0,0 +1,2 @@
+>>compile A.scala
+>>compile A.scala
diff --git a/test/files/buildmanager/t4245/A.scala b/test/files/buildmanager/t4245/A.scala
new file mode 100644
index 0000000000..7c4efe1b4b
--- /dev/null
+++ b/test/files/buildmanager/t4245/A.scala
@@ -0,0 +1,3 @@
+class A {
+ class B(val a: Int)
+}
diff --git a/test/files/buildmanager/t4245/t4245.check b/test/files/buildmanager/t4245/t4245.check
new file mode 100644
index 0000000000..3d3898c671
--- /dev/null
+++ b/test/files/buildmanager/t4245/t4245.check
@@ -0,0 +1,6 @@
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map()
+builder > A.scala
+compiling Set(A.scala)
+Changes: Map(class A -> List(), class A$B -> List())
diff --git a/test/files/buildmanager/t4245/t4245.test b/test/files/buildmanager/t4245/t4245.test
new file mode 100644
index 0000000000..392e0d365f
--- /dev/null
+++ b/test/files/buildmanager/t4245/t4245.test
@@ -0,0 +1,2 @@
+>>compile A.scala
+>>compile A.scala
diff --git a/test/files/continuations-neg/function0.check b/test/files/continuations-neg/function0.check
new file mode 100644
index 0000000000..0a66763a0f
--- /dev/null
+++ b/test/files/continuations-neg/function0.check
@@ -0,0 +1,6 @@
+function0.scala:11: error: type mismatch;
+ found : () => Int @scala.util.continuations.cpsParam[Int,Int]
+ required: () => Int
+ val g: () => Int = f
+ ^
+one error found
diff --git a/test/files/continuations-neg/function0.scala b/test/files/continuations-neg/function0.scala
new file mode 100644
index 0000000000..6ef0d98b90
--- /dev/null
+++ b/test/files/continuations-neg/function0.scala
@@ -0,0 +1,16 @@
+// $Id$
+
+import scala.util.continuations._
+
+
+object Test {
+
+ def main(args: Array[String]): Any = {
+
+ val f = () => shift { k: (Int=>Int) => k(7) }
+ val g: () => Int = f
+
+ println(reset(g()))
+ }
+
+} \ No newline at end of file
diff --git a/test/files/continuations-neg/function2.check b/test/files/continuations-neg/function2.check
new file mode 100644
index 0000000000..82b81c1444
--- /dev/null
+++ b/test/files/continuations-neg/function2.check
@@ -0,0 +1,6 @@
+function2.scala:11: error: type mismatch;
+ found : () => Int
+ required: () => Int @util.continuations.cps[Int]
+ val g: () => Int @cps[Int] = f
+ ^
+one error found
diff --git a/test/files/continuations-neg/function2.scala b/test/files/continuations-neg/function2.scala
new file mode 100644
index 0000000000..402c6dcad8
--- /dev/null
+++ b/test/files/continuations-neg/function2.scala
@@ -0,0 +1,16 @@
+// $Id$
+
+import scala.util.continuations._
+
+
+object Test {
+
+ def main(args: Array[String]): Any = {
+
+ val f = () => 7
+ val g: () => Int @cps[Int] = f
+
+ println(reset(g()))
+ }
+
+} \ No newline at end of file
diff --git a/test/files/continuations-neg/function3.check b/test/files/continuations-neg/function3.check
new file mode 100644
index 0000000000..4705ad9ed9
--- /dev/null
+++ b/test/files/continuations-neg/function3.check
@@ -0,0 +1,6 @@
+function3.scala:10: error: type mismatch;
+ found : Int @scala.util.continuations.cpsParam[Int,Int]
+ required: Int
+ val g: () => Int = () => shift { k: (Int=>Int) => k(7) }
+ ^
+one error found
diff --git a/test/files/continuations-neg/function3.scala b/test/files/continuations-neg/function3.scala
new file mode 100644
index 0000000000..c4acc4c2e9
--- /dev/null
+++ b/test/files/continuations-neg/function3.scala
@@ -0,0 +1,15 @@
+// $Id$
+
+import scala.util.continuations._
+
+
+object Test {
+
+ def main(args: Array[String]): Any = {
+
+ val g: () => Int = () => shift { k: (Int=>Int) => k(7) }
+
+ println(reset(g()))
+ }
+
+} \ No newline at end of file
diff --git a/test/files/continuations-neg/infer0.check b/test/files/continuations-neg/infer0.check
new file mode 100644
index 0000000000..1dd072ef09
--- /dev/null
+++ b/test/files/continuations-neg/infer0.check
@@ -0,0 +1,4 @@
+infer0.scala:11: error: cannot cps-transform expression 8: type arguments [Int(8),String,Int] do not conform to method shiftUnit's type parameter bounds [A,B,C >: B]
+ test(8)
+ ^
+one error found
diff --git a/test/files/continuations-neg/infer0.scala b/test/files/continuations-neg/infer0.scala
new file mode 100644
index 0000000000..9cf69c5d35
--- /dev/null
+++ b/test/files/continuations-neg/infer0.scala
@@ -0,0 +1,14 @@
+// $Id$
+
+import scala.util.continuations._
+
+
+object Test {
+
+ def test(x: => Int @cpsParam[String,Int]) = 7
+
+ def main(args: Array[String]): Any = {
+ test(8)
+ }
+
+} \ No newline at end of file
diff --git a/test/files/continuations-neg/infer2.check b/test/files/continuations-neg/infer2.check
new file mode 100644
index 0000000000..59eb670bc3
--- /dev/null
+++ b/test/files/continuations-neg/infer2.check
@@ -0,0 +1,4 @@
+infer2.scala:14: error: illegal answer type modification: scala.util.continuations.cpsParam[String,Int] andThen scala.util.continuations.cpsParam[String,Int]
+ test { sym(); sym() }
+ ^
+one error found
diff --git a/test/files/continuations-neg/infer2.scala b/test/files/continuations-neg/infer2.scala
new file mode 100644
index 0000000000..eaffbc17fc
--- /dev/null
+++ b/test/files/continuations-neg/infer2.scala
@@ -0,0 +1,19 @@
+// $Id$
+
+import scala.util.continuations._
+
+
+object Test {
+
+ def test(x: => Int @cpsParam[String,Int]) = 7
+
+ def sym() = shift { k: (Int => String) => 9 }
+
+
+ def main(args: Array[String]): Any = {
+ test { sym(); sym() }
+ }
+
+}
+
+
diff --git a/test/files/continuations-neg/lazy.check b/test/files/continuations-neg/lazy.check
new file mode 100644
index 0000000000..b8c6887409
--- /dev/null
+++ b/test/files/continuations-neg/lazy.check
@@ -0,0 +1,6 @@
+lazy.scala:5: error: type mismatch;
+ found : Unit @scala.util.continuations.cpsParam[Unit,Unit]
+ required: Unit
+ def foo() = {
+ ^
+one error found
diff --git a/test/files/continuations-neg/lazy.scala b/test/files/continuations-neg/lazy.scala
new file mode 100644
index 0000000000..a2fad83be8
--- /dev/null
+++ b/test/files/continuations-neg/lazy.scala
@@ -0,0 +1,16 @@
+import scala.util.continuations._
+
+object Test {
+
+ def foo() = {
+ lazy val x = shift((k:Unit=>Unit)=>k())
+ println(x)
+ }
+
+ def main(args: Array[String]) {
+ reset {
+ foo()
+ }
+ }
+
+} \ No newline at end of file
diff --git a/test/files/continuations-neg/t1929.check b/test/files/continuations-neg/t1929.check
new file mode 100644
index 0000000000..b04a5b977d
--- /dev/null
+++ b/test/files/continuations-neg/t1929.check
@@ -0,0 +1,6 @@
+t1929.scala:8: error: type mismatch;
+ found : Int @scala.util.continuations.cpsParam[String,String] @scala.util.continuations.cpsSynth
+ required: Int @scala.util.continuations.cpsParam[Int,String]
+ reset {
+ ^
+one error found
diff --git a/test/files/continuations-neg/t1929.scala b/test/files/continuations-neg/t1929.scala
new file mode 100644
index 0000000000..02eda9170d
--- /dev/null
+++ b/test/files/continuations-neg/t1929.scala
@@ -0,0 +1,17 @@
+// $Id$
+
+import scala.util.continuations._
+
+
+object Test {
+ def main(args : Array[String]) {
+ reset {
+ println("up")
+ val x = shift((k:Int=>String) => k(8) + k(2))
+ println("down " + x)
+ val y = shift((k:Int=>String) => k(3))
+ println("down2 " + y)
+ y + x
+ }
+ }
+} \ No newline at end of file
diff --git a/test/files/continuations-neg/t2285.check b/test/files/continuations-neg/t2285.check
new file mode 100644
index 0000000000..d5dff6a4f2
--- /dev/null
+++ b/test/files/continuations-neg/t2285.check
@@ -0,0 +1,6 @@
+t2285.scala:9: error: type mismatch;
+ found : Int @scala.util.continuations.cpsParam[String,String] @scala.util.continuations.cpsSynth
+ required: Int @scala.util.continuations.cpsParam[Int,String]
+ def foo() = reset { bar(); 7 }
+ ^
+one error found
diff --git a/test/files/continuations-neg/t2285.scala b/test/files/continuations-neg/t2285.scala
new file mode 100644
index 0000000000..b906dc455a
--- /dev/null
+++ b/test/files/continuations-neg/t2285.scala
@@ -0,0 +1,11 @@
+// $Id$
+
+import scala.util.continuations._
+
+object Test {
+
+ def bar() = shift { k: (String => String) => k("1") }
+
+ def foo() = reset { bar(); 7 }
+
+}
diff --git a/test/files/continuations-neg/t2949.check b/test/files/continuations-neg/t2949.check
new file mode 100644
index 0000000000..dd9768807c
--- /dev/null
+++ b/test/files/continuations-neg/t2949.check
@@ -0,0 +1,6 @@
+t2949.scala:13: error: type mismatch;
+ found : Int
+ required: ? @scala.util.continuations.cpsParam[List[?],Any]
+ x * y
+ ^
+one error found
diff --git a/test/files/continuations-neg/t2949.scala b/test/files/continuations-neg/t2949.scala
new file mode 100644
index 0000000000..2d426a4d89
--- /dev/null
+++ b/test/files/continuations-neg/t2949.scala
@@ -0,0 +1,15 @@
+// $Id$
+
+import scala.util.continuations._
+
+object Test {
+
+ def reflect[A,B](xs : List[A]) = shift{ xs.flatMap[B, List[B]] }
+ def reify[A, B](x : A @cpsParam[List[A], B]) = reset{ List(x) }
+
+ def main(args: Array[String]): Unit = println(reify {
+ val x = reflect[Int, Int](List(1,2,3))
+ val y = reflect[Int, Int](List(2,4,8))
+ x * y
+ })
+}
diff --git a/test/files/continuations-neg/t3628.check b/test/files/continuations-neg/t3628.check
new file mode 100644
index 0000000000..6e390558ef
--- /dev/null
+++ b/test/files/continuations-neg/t3628.check
@@ -0,0 +1,4 @@
+t3628.scala:4: error: not found: type Actor
+ val impl: Actor = actor {
+ ^
+one error found
diff --git a/test/files/continuations-neg/t3628.scala b/test/files/continuations-neg/t3628.scala
new file mode 100644
index 0000000000..3fdd32a034
--- /dev/null
+++ b/test/files/continuations-neg/t3628.scala
@@ -0,0 +1,11 @@
+import scala.actors.Actor._
+
+object Test {
+ val impl: Actor = actor {
+ loop {
+ react {
+ case 1 => impl ! 2
+ }
+ }
+ }
+}
diff --git a/test/files/continuations-neg/trycatch2.check b/test/files/continuations-neg/trycatch2.check
new file mode 100644
index 0000000000..5ff2838bad
--- /dev/null
+++ b/test/files/continuations-neg/trycatch2.check
@@ -0,0 +1,7 @@
+trycatch2.scala:11: error: only simple cps types allowed in try/catch blocks (found: Int @scala.util.continuations.cpsParam[String,Int])
+ def foo1 = try {
+ ^
+trycatch2.scala:19: error: only simple cps types allowed in try/catch blocks (found: Int @scala.util.continuations.cpsParam[String,Int])
+ def foo2 = try {
+ ^
+two errors found
diff --git a/test/files/continuations-neg/trycatch2.scala b/test/files/continuations-neg/trycatch2.scala
new file mode 100644
index 0000000000..d61419169b
--- /dev/null
+++ b/test/files/continuations-neg/trycatch2.scala
@@ -0,0 +1,33 @@
+// $Id$
+
+import scala.util.continuations._
+
+object Test {
+
+ def fatal[T]: T = throw new Exception
+ def cpsIntStringInt = shift { k:(Int=>String) => k(3); 7 }
+ def cpsIntIntString = shift { k:(Int=>Int) => k(3); "7" }
+
+ def foo1 = try {
+ fatal[Int]
+ cpsIntStringInt
+ } catch {
+ case ex =>
+ cpsIntStringInt
+ }
+
+ def foo2 = try {
+ fatal[Int]
+ cpsIntStringInt
+ } catch {
+ case ex =>
+ cpsIntStringInt
+ }
+
+
+ def main(args: Array[String]): Unit = {
+ println(reset { foo1; "3" })
+ println(reset { foo2; "3" })
+ }
+
+} \ No newline at end of file
diff --git a/test/files/continuations-run/basics.check b/test/files/continuations-run/basics.check
new file mode 100755
index 0000000000..54c059fdcb
--- /dev/null
+++ b/test/files/continuations-run/basics.check
@@ -0,0 +1,2 @@
+28
+28 \ No newline at end of file
diff --git a/test/files/continuations-run/basics.scala b/test/files/continuations-run/basics.scala
new file mode 100755
index 0000000000..b63710bc64
--- /dev/null
+++ b/test/files/continuations-run/basics.scala
@@ -0,0 +1,23 @@
+// $Id$
+
+import scala.util.continuations._
+
+
+object Test {
+
+ def m0() = {
+ shift((k:Int => Int) => k(k(7))) * 2
+ }
+
+ def m1() = {
+ 2 * shift((k:Int => Int) => k(k(7)))
+ }
+
+ def main(args: Array[String]) = {
+
+ println(reset(m0()))
+ println(reset(m1()))
+
+ }
+
+}
diff --git a/test/files/continuations-run/function1.check b/test/files/continuations-run/function1.check
new file mode 100644
index 0000000000..7f8f011eb7
--- /dev/null
+++ b/test/files/continuations-run/function1.check
@@ -0,0 +1 @@
+7
diff --git a/test/files/continuations-run/function1.scala b/test/files/continuations-run/function1.scala
new file mode 100644
index 0000000000..fbd413ed9d
--- /dev/null
+++ b/test/files/continuations-run/function1.scala
@@ -0,0 +1,16 @@
+// $Id$
+
+import scala.util.continuations._
+
+
+object Test {
+
+ def main(args: Array[String]): Any = {
+
+ val f = () => shift { k: (Int=>Int) => k(7) }
+ val g: () => Int @cps[Int] = f
+
+ println(reset(g()))
+ }
+
+} \ No newline at end of file
diff --git a/test/files/continuations-run/function4.check b/test/files/continuations-run/function4.check
new file mode 100644
index 0000000000..c7930257df
--- /dev/null
+++ b/test/files/continuations-run/function4.check
@@ -0,0 +1 @@
+7 \ No newline at end of file
diff --git a/test/files/continuations-run/function4.scala b/test/files/continuations-run/function4.scala
new file mode 100644
index 0000000000..2ccd0b4ff2
--- /dev/null
+++ b/test/files/continuations-run/function4.scala
@@ -0,0 +1,15 @@
+// $Id$
+
+import scala.util.continuations._
+
+
+object Test {
+
+ def main(args: Array[String]): Any = {
+
+ val g: () => Int @cps[Int] = () => shift { k: (Int=>Int) => k(7) }
+
+ println(reset(g()))
+ }
+
+} \ No newline at end of file
diff --git a/test/files/continuations-run/function5.check b/test/files/continuations-run/function5.check
new file mode 100644
index 0000000000..c7930257df
--- /dev/null
+++ b/test/files/continuations-run/function5.check
@@ -0,0 +1 @@
+7 \ No newline at end of file
diff --git a/test/files/continuations-run/function5.scala b/test/files/continuations-run/function5.scala
new file mode 100644
index 0000000000..fe528e14e7
--- /dev/null
+++ b/test/files/continuations-run/function5.scala
@@ -0,0 +1,15 @@
+// $Id$
+
+import scala.util.continuations._
+
+
+object Test {
+
+ def main(args: Array[String]): Any = {
+
+ val g: () => Int @cps[Int] = () => 7
+
+ println(reset(g()))
+ }
+
+} \ No newline at end of file
diff --git a/test/files/continuations-run/function6.check b/test/files/continuations-run/function6.check
new file mode 100644
index 0000000000..c7930257df
--- /dev/null
+++ b/test/files/continuations-run/function6.check
@@ -0,0 +1 @@
+7 \ No newline at end of file
diff --git a/test/files/continuations-run/function6.scala b/test/files/continuations-run/function6.scala
new file mode 100644
index 0000000000..54a6ffcc93
--- /dev/null
+++ b/test/files/continuations-run/function6.scala
@@ -0,0 +1,16 @@
+// $Id$
+
+import scala.util.continuations._
+
+
+object Test {
+
+ def main(args: Array[String]): Any = {
+
+ val g: PartialFunction[Int, Int @cps[Int]] = { case x => 7 }
+
+ println(reset(g(2)))
+
+ }
+
+} \ No newline at end of file
diff --git a/test/files/continuations-run/ifelse0.check b/test/files/continuations-run/ifelse0.check
new file mode 100644
index 0000000000..f8bc79860d
--- /dev/null
+++ b/test/files/continuations-run/ifelse0.check
@@ -0,0 +1,2 @@
+10
+9 \ No newline at end of file
diff --git a/test/files/continuations-run/ifelse0.scala b/test/files/continuations-run/ifelse0.scala
new file mode 100644
index 0000000000..2facab4b98
--- /dev/null
+++ b/test/files/continuations-run/ifelse0.scala
@@ -0,0 +1,18 @@
+// $Id$
+
+import scala.util.continuations._
+
+
+object Test {
+
+ def test(x:Int) = if (x <= 7)
+ shift { k: (Int=>Int) => k(k(k(x))) }
+ else
+ shift { k: (Int=>Int) => k(x) }
+
+ def main(args: Array[String]): Any = {
+ println(reset(1 + test(7)))
+ println(reset(1 + test(8)))
+ }
+
+} \ No newline at end of file
diff --git a/test/files/continuations-run/ifelse1.check b/test/files/continuations-run/ifelse1.check
new file mode 100644
index 0000000000..86a3fbc0c1
--- /dev/null
+++ b/test/files/continuations-run/ifelse1.check
@@ -0,0 +1,4 @@
+10
+9
+8
+11 \ No newline at end of file
diff --git a/test/files/continuations-run/ifelse1.scala b/test/files/continuations-run/ifelse1.scala
new file mode 100644
index 0000000000..c624b84b75
--- /dev/null
+++ b/test/files/continuations-run/ifelse1.scala
@@ -0,0 +1,25 @@
+// $Id$
+
+import scala.util.continuations._
+
+
+object Test {
+
+ def test1(x:Int) = if (x <= 7)
+ shift { k: (Int=>Int) => k(k(k(x))) }
+ else
+ x
+
+ def test2(x:Int) = if (x <= 7)
+ x
+ else
+ shift { k: (Int=>Int) => k(k(k(x))) }
+
+ def main(args: Array[String]): Any = {
+ println(reset(1 + test1(7)))
+ println(reset(1 + test1(8)))
+ println(reset(1 + test2(7)))
+ println(reset(1 + test2(8)))
+ }
+
+} \ No newline at end of file
diff --git a/test/files/continuations-run/ifelse2.check b/test/files/continuations-run/ifelse2.check
new file mode 100644
index 0000000000..f97a95b08d
--- /dev/null
+++ b/test/files/continuations-run/ifelse2.check
@@ -0,0 +1,4 @@
+abort
+()
+alive
+()
diff --git a/test/files/continuations-run/ifelse2.scala b/test/files/continuations-run/ifelse2.scala
new file mode 100644
index 0000000000..506acc4d00
--- /dev/null
+++ b/test/files/continuations-run/ifelse2.scala
@@ -0,0 +1,16 @@
+// $Id$
+
+import scala.util.continuations._
+
+
+object Test {
+
+ def test(x:Int) = if (x <= 7)
+ shift { k: (Unit=>Unit) => println("abort") }
+
+ def main(args: Array[String]): Any = {
+ println(reset{ test(7); println("alive") })
+ println(reset{ test(8); println("alive") })
+ }
+
+} \ No newline at end of file
diff --git a/test/files/continuations-run/ifelse3.check b/test/files/continuations-run/ifelse3.check
new file mode 100644
index 0000000000..95b562c8e6
--- /dev/null
+++ b/test/files/continuations-run/ifelse3.check
@@ -0,0 +1,2 @@
+6
+9
diff --git a/test/files/continuations-run/ifelse3.scala b/test/files/continuations-run/ifelse3.scala
new file mode 100644
index 0000000000..54566a421c
--- /dev/null
+++ b/test/files/continuations-run/ifelse3.scala
@@ -0,0 +1,21 @@
+// $Id$
+
+import scala.util.continuations._
+
+
+object Test {
+
+ def util(x: Boolean) = shift { k: (Boolean=>Int) => k(x) }
+
+ def test(x:Int) = if (util(x <= 7))
+ x - 1
+ else
+ x + 1
+
+
+ def main(args: Array[String]): Any = {
+ println(reset(test(7)))
+ println(reset(test(8)))
+ }
+
+} \ No newline at end of file
diff --git a/test/files/continuations-run/ifelse4.check b/test/files/continuations-run/ifelse4.check
new file mode 100644
index 0000000000..2545dd49a0
--- /dev/null
+++ b/test/files/continuations-run/ifelse4.check
@@ -0,0 +1,4 @@
+10
+10
+10
+10
diff --git a/test/files/continuations-run/ifelse4.scala b/test/files/continuations-run/ifelse4.scala
new file mode 100644
index 0000000000..8360375283
--- /dev/null
+++ b/test/files/continuations-run/ifelse4.scala
@@ -0,0 +1,31 @@
+import scala.util.continuations._
+
+object Test {
+ def sh(x1:Int) = shift( (k: Int => Int) => k(k(k(x1))))
+
+ def testA(x1: Int): Int @cps[Int] = {
+ sh(x1)
+ if (x1==42) x1 else sh(x1)
+ }
+
+ def testB(x1: Int): Int @cps[Int] = {
+ if (sh(x1)==43) x1 else x1
+ }
+
+ def testC(x1: Int): Int @cps[Int] = {
+ sh(x1)
+ if (sh(x1)==44) x1 else x1
+ }
+
+ def testD(x1: Int): Int @cps[Int] = {
+ sh(x1)
+ if (sh(x1)==45) x1 else sh(x1)
+ }
+
+ def main(args: Array[String]): Any = {
+ println(reset(1 + testA(7)))
+ println(reset(1 + testB(9)))
+ println(reset(1 + testC(9)))
+ println(reset(1 + testD(7)))
+ }
+} \ No newline at end of file
diff --git a/test/files/continuations-run/infer1.scala b/test/files/continuations-run/infer1.scala
new file mode 100644
index 0000000000..10822508e7
--- /dev/null
+++ b/test/files/continuations-run/infer1.scala
@@ -0,0 +1,33 @@
+// $Id$
+
+import scala.util.continuations._
+
+
+object Test {
+
+ def test(x: => Int @cpsParam[String,Int]) = 7
+
+ def test2() = {
+ val x = shift { k: (Int => String) => 9 }
+ x
+ }
+
+ def test3(x: => Int @cpsParam[Int,Int]) = 7
+
+
+ def util() = shift { k: (String => String) => "7" }
+
+ def main(args: Array[String]): Any = {
+ test { shift { k: (Int => String) => 9 } }
+ test { shift { k: (Int => String) => 9 }; 2 }
+// test { shift { k: (Int => String) => 9 }; util() } <-- doesn't work
+ test { shift { k: (Int => String) => 9 }; util(); 2 }
+
+
+ test { shift { k: (Int => String) => 9 }; { test3(0); 2 } }
+
+ test3 { { test3(0); 2 } }
+
+ }
+
+} \ No newline at end of file
diff --git a/test/files/continuations-run/match0.check b/test/files/continuations-run/match0.check
new file mode 100644
index 0000000000..f8bc79860d
--- /dev/null
+++ b/test/files/continuations-run/match0.check
@@ -0,0 +1,2 @@
+10
+9 \ No newline at end of file
diff --git a/test/files/continuations-run/match0.scala b/test/files/continuations-run/match0.scala
new file mode 100644
index 0000000000..b65d343c07
--- /dev/null
+++ b/test/files/continuations-run/match0.scala
@@ -0,0 +1,18 @@
+// $Id$
+
+import scala.util.continuations._
+
+
+object Test {
+
+ def test(x:Int) = x match {
+ case 7 => shift { k: (Int=>Int) => k(k(k(x))) }
+ case 8 => shift { k: (Int=>Int) => k(x) }
+ }
+
+ def main(args: Array[String]): Any = {
+ println(reset(1 + test(7)))
+ println(reset(1 + test(8)))
+ }
+
+} \ No newline at end of file
diff --git a/test/files/continuations-run/match1.check b/test/files/continuations-run/match1.check
new file mode 100644
index 0000000000..73053d3f4f
--- /dev/null
+++ b/test/files/continuations-run/match1.check
@@ -0,0 +1,2 @@
+10
+9
diff --git a/test/files/continuations-run/match1.scala b/test/files/continuations-run/match1.scala
new file mode 100644
index 0000000000..20671f26ba
--- /dev/null
+++ b/test/files/continuations-run/match1.scala
@@ -0,0 +1,18 @@
+// $Id$
+
+import scala.util.continuations._
+
+
+object Test {
+
+ def test(x:Int) = x match {
+ case 7 => shift { k: (Int=>Int) => k(k(k(x))) }
+ case _ => x
+ }
+
+ def main(args: Array[String]): Any = {
+ println(reset(1 + test(7)))
+ println(reset(1 + test(8)))
+ }
+
+} \ No newline at end of file
diff --git a/test/files/continuations-run/match2.check b/test/files/continuations-run/match2.check
new file mode 100644
index 0000000000..cbf91349cc
--- /dev/null
+++ b/test/files/continuations-run/match2.check
@@ -0,0 +1,2 @@
+B
+B
diff --git a/test/files/continuations-run/match2.scala b/test/files/continuations-run/match2.scala
new file mode 100644
index 0000000000..8b0fb946df
--- /dev/null
+++ b/test/files/continuations-run/match2.scala
@@ -0,0 +1,26 @@
+// $Id$
+
+import scala.util.continuations._
+
+
+object Test {
+
+ def test1() = {
+ val (a, b) = shift { k: (((String,String)) => String) => k("A","B") }
+ b
+ }
+
+ case class Elem[T,U](a: T, b: U)
+
+ def test2() = {
+ val Elem(a,b) = shift { k: (Elem[String,String] => String) => k(Elem("A","B")) }
+ b
+ }
+
+
+ def main(args: Array[String]): Any = {
+ println(reset(test1()))
+ println(reset(test2()))
+ }
+
+} \ No newline at end of file
diff --git a/test/files/continuations-run/patvirt.check b/test/files/continuations-run/patvirt.check
new file mode 100644
index 0000000000..b5fa014ad3
--- /dev/null
+++ b/test/files/continuations-run/patvirt.check
@@ -0,0 +1,2 @@
+10
+11
diff --git a/test/files/continuations-run/patvirt.scala b/test/files/continuations-run/patvirt.scala
new file mode 100644
index 0000000000..5b4d312f20
--- /dev/null
+++ b/test/files/continuations-run/patvirt.scala
@@ -0,0 +1,32 @@
+import scala.util.continuations._
+
+object Test {
+ def sh(x1:Int) = shift( (k: Int => Int) => k(k(k(x1))))
+
+ def test(x1: Int) = {
+ val o7 = {
+ val o6 = {
+ val o3 =
+ if (7 == x1) Some(x1)
+ else None
+
+ if (o3.isEmpty) None
+ else Some(sh(x1))
+ }
+ if (o6.isEmpty) {
+ val o5 =
+ if (8 == x1) Some(x1)
+ else None
+
+ if (o5.isEmpty) None
+ else Some(sh(x1))
+ } else o6
+ }
+ o7.get
+ }
+
+ def main(args: Array[String]): Any = {
+ println(reset(1 + test(7)))
+ println(reset(1 + test(8)))
+ }
+}
diff --git a/test/files/continuations-run/t1807.check b/test/files/continuations-run/t1807.check
new file mode 100644
index 0000000000..56a6051ca2
--- /dev/null
+++ b/test/files/continuations-run/t1807.check
@@ -0,0 +1 @@
+1 \ No newline at end of file
diff --git a/test/files/continuations-run/t1807.scala b/test/files/continuations-run/t1807.scala
new file mode 100644
index 0000000000..278b3a9936
--- /dev/null
+++ b/test/files/continuations-run/t1807.scala
@@ -0,0 +1,14 @@
+// $Id$
+
+import scala.util.continuations._
+
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ val z = reset {
+ val f: (() => Int @cps[Int]) = () => 1
+ f()
+ }
+ println(z)
+ }
+} \ No newline at end of file
diff --git a/test/files/continuations-run/t1808.scala b/test/files/continuations-run/t1808.scala
new file mode 100644
index 0000000000..125c7c1cdf
--- /dev/null
+++ b/test/files/continuations-run/t1808.scala
@@ -0,0 +1,10 @@
+// $Id$
+
+import scala.util.continuations._
+
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ reset0 { 0 }
+ }
+} \ No newline at end of file
diff --git a/test/files/continuations-run/t1820.scala b/test/files/continuations-run/t1820.scala
new file mode 100644
index 0000000000..893ddab6d1
--- /dev/null
+++ b/test/files/continuations-run/t1820.scala
@@ -0,0 +1,14 @@
+// $Id$
+
+import scala.util.continuations._
+
+
+object Test {
+ def shifted: Unit @suspendable = shift { (k: Unit => Unit) => () }
+ def test1(b: => Boolean) = {
+ reset {
+ if (b) shifted
+ }
+ }
+ def main(args: Array[String]) = test1(true)
+} \ No newline at end of file
diff --git a/test/files/continuations-run/t1821.check b/test/files/continuations-run/t1821.check
new file mode 100644
index 0000000000..f7b76115db
--- /dev/null
+++ b/test/files/continuations-run/t1821.check
@@ -0,0 +1,4 @@
+()
+()
+()
+() \ No newline at end of file
diff --git a/test/files/continuations-run/t1821.scala b/test/files/continuations-run/t1821.scala
new file mode 100644
index 0000000000..0d5fb553be
--- /dev/null
+++ b/test/files/continuations-run/t1821.scala
@@ -0,0 +1,20 @@
+// $Id$
+
+import scala.util.continuations._
+
+
+object Test {
+ def suspended[A](x: A): A @suspendable = x
+ def test1[A](x: A): A @suspendable = suspended(x) match { case x => x }
+ def test2[A](x: List[A]): A @suspendable = suspended(x) match { case List(x) => x }
+
+ def test3[A](x: A): A @suspendable = x match { case x => x }
+ def test4[A](x: List[A]): A @suspendable = x match { case List(x) => x }
+
+ def main(args: Array[String]) = {
+ println(reset(test1()))
+ println(reset(test2(List(()))))
+ println(reset(test3()))
+ println(reset(test4(List(()))))
+ }
+} \ No newline at end of file
diff --git a/test/files/continuations-run/t2864.check b/test/files/continuations-run/t2864.check
new file mode 100644
index 0000000000..d411bb7c1a
--- /dev/null
+++ b/test/files/continuations-run/t2864.check
@@ -0,0 +1 @@
+400
diff --git a/test/files/continuations-run/t2864.scala b/test/files/continuations-run/t2864.scala
new file mode 100644
index 0000000000..7a2579e45c
--- /dev/null
+++ b/test/files/continuations-run/t2864.scala
@@ -0,0 +1,30 @@
+import scala.util.continuations._
+object Test {
+
+ def double[B](n : Int)(k : Int => B) : B = k(n * 2)
+
+ def main(args : Array[String]) {
+ reset {
+ val result1 = shift(double[Unit](100))
+ val result2 = shift(double[Unit](result1))
+ println(result2)
+ }
+ }
+
+ def foo: Int @cps[Int] = {
+ val a0 = shift((k:Int=>Int) => k(0))
+ val x0 = 2
+ val a1 = shift((k:Int=>Int) => x0)
+ 0
+ }
+
+/*
+ def bar: ControlContext[Int,Int,Int] = {
+ shiftR((k:Int=>Int) => k(0)).flatMap { a0 =>
+ val x0 = 2
+ shiftR((k:Int=>Int) => x0).map { a1 =>
+ 0
+ }}
+ }
+*/
+} \ No newline at end of file
diff --git a/test/files/continuations-run/t2934.check b/test/files/continuations-run/t2934.check
new file mode 100644
index 0000000000..a92586538e
--- /dev/null
+++ b/test/files/continuations-run/t2934.check
@@ -0,0 +1 @@
+List(3, 4, 5)
diff --git a/test/files/continuations-run/t2934.scala b/test/files/continuations-run/t2934.scala
new file mode 100644
index 0000000000..a1b8ca9e04
--- /dev/null
+++ b/test/files/continuations-run/t2934.scala
@@ -0,0 +1,10 @@
+import scala.util.continuations._
+
+object Test {
+ def main(args : Array[String]) {
+ println(reset {
+ val x = shift(List(1,2,3).flatMap[Int, List[Int]])
+ List(x + 2)
+ })
+ }
+}
diff --git a/test/files/continuations-run/t3199.check b/test/files/continuations-run/t3199.check
new file mode 100644
index 0000000000..a065247b8c
--- /dev/null
+++ b/test/files/continuations-run/t3199.check
@@ -0,0 +1 @@
+Right(7)
diff --git a/test/files/continuations-run/t3199.scala b/test/files/continuations-run/t3199.scala
new file mode 100644
index 0000000000..7b54793e05
--- /dev/null
+++ b/test/files/continuations-run/t3199.scala
@@ -0,0 +1,20 @@
+import _root_.scala.collection.Seq
+import _root_.scala.util.control.Exception
+import _root_.scala.util.continuations._
+
+object Test {
+
+ trait AbstractResource[+R <: AnyRef] {
+ def reflect[B] : R @cpsParam[B,Either[Throwable, B]] = shift(acquireFor)
+ def acquireFor[B](f : R => B) : Either[Throwable, B] = {
+ import Exception._
+ catching(List(classOf[Throwable]) : _*) either (f(null.asInstanceOf[R]))
+ }
+ }
+
+ def main(args: Array[String]) : Unit = {
+ val x = new AbstractResource[String] { }
+ val result = x.acquireFor( x => 7 )
+ println(result)
+ }
+ }
diff --git a/test/files/continuations-run/t3199b.check b/test/files/continuations-run/t3199b.check
new file mode 100644
index 0000000000..b5d8bb58d9
--- /dev/null
+++ b/test/files/continuations-run/t3199b.check
@@ -0,0 +1 @@
+[1, 2, 3]
diff --git a/test/files/continuations-run/t3199b.scala b/test/files/continuations-run/t3199b.scala
new file mode 100644
index 0000000000..2122c963ac
--- /dev/null
+++ b/test/files/continuations-run/t3199b.scala
@@ -0,0 +1,11 @@
+object Test {
+
+ def test() = {
+ java.util.Arrays.asList(Array(1,2,3):_*)
+ }
+
+ def main(args: Array[String]) = {
+ println(test())
+ }
+
+} \ No newline at end of file
diff --git a/test/files/continuations-run/t3223.check b/test/files/continuations-run/t3223.check
new file mode 100644
index 0000000000..ec635144f6
--- /dev/null
+++ b/test/files/continuations-run/t3223.check
@@ -0,0 +1 @@
+9
diff --git a/test/files/continuations-run/t3223.scala b/test/files/continuations-run/t3223.scala
new file mode 100644
index 0000000000..efed1ff581
--- /dev/null
+++ b/test/files/continuations-run/t3223.scala
@@ -0,0 +1,19 @@
+import scala.util.continuations._
+object Test {
+
+ def foo(x:Int) = {
+ try {
+ throw new Exception
+ shiftUnit0[Int,Int](7)
+ } catch {
+ case ex =>
+ val g = (a:Int)=>a
+ 9
+ }
+ }
+
+ def main(args: Array[String]) {
+ println(reset(foo(0)))
+ }
+
+} \ No newline at end of file
diff --git a/test/files/continuations-run/t3225.check b/test/files/continuations-run/t3225.check
new file mode 100644
index 0000000000..df1a8a9ce4
--- /dev/null
+++ b/test/files/continuations-run/t3225.check
@@ -0,0 +1,12 @@
+8
+8
+9
+9
+8
+9
+8
+8
+9
+9
+8
+9
diff --git a/test/files/continuations-run/t3225.scala b/test/files/continuations-run/t3225.scala
new file mode 100644
index 0000000000..5b6259c43f
--- /dev/null
+++ b/test/files/continuations-run/t3225.scala
@@ -0,0 +1,56 @@
+// $Id$
+
+import scala.util.continuations._
+
+
+object Test {
+
+ class Bla {
+ val x = 8
+ def y[T] = 9
+ }
+
+/*
+ def bla[A] = shift { k:(Bla=>A) => k(new Bla) }
+*/
+
+ def bla1 = shift { k:(Bla=>Bla) => k(new Bla) }
+ def bla2 = shift { k:(Bla=>Int) => k(new Bla) }
+
+ def fooA = bla2.x
+ def fooB[T] = bla2.y[T]
+
+ def testMono() = {
+ println(reset(bla1).x)
+ println(reset(bla2.x))
+ println(reset(bla2.y[Int]))
+ println(reset(bla2.y))
+ println(reset(fooA))
+ println(reset(fooB))
+ 0
+ }
+
+ def blaX[A] = shift { k:(Bla=>A) => k(new Bla) }
+
+ def fooX[A] = blaX[A].x
+ def fooY[A] = blaX[A].y[A]
+
+ def testPoly() = {
+ println(reset(blaX[Bla]).x)
+ println(reset(blaX[Int].x))
+ println(reset(blaX[Int].y[Int]))
+ println(reset(blaX[Int].y))
+ println(reset(fooX[Int]))
+ println(reset(fooY[Int]))
+ 0
+ }
+
+
+ // TODO: check whether this also applies to a::shift { k => ... }
+
+ def main(args: Array[String]) = {
+ testMono()
+ testPoly()
+ }
+
+}
diff --git a/test/files/continuations-run/t3501.check b/test/files/continuations-run/t3501.check
new file mode 100644
index 0000000000..08adcfe27a
--- /dev/null
+++ b/test/files/continuations-run/t3501.check
@@ -0,0 +1,5 @@
+42
+42
+42
+42
+42
diff --git a/test/files/continuations-run/t3501.scala b/test/files/continuations-run/t3501.scala
new file mode 100644
index 0000000000..c43b3322be
--- /dev/null
+++ b/test/files/continuations-run/t3501.scala
@@ -0,0 +1,15 @@
+import scala.util.continuations._
+
+object Test {
+ def capture(): Int @suspendable = 42
+
+ def main(args: Array[String]): Unit = reset {
+ var i = 0
+ while (i < 5) {
+ i += 1
+ val y = capture()
+ val s = y
+ println(s)
+ }
+ }
+}
diff --git a/test/files/continuations-run/trycatch0.check b/test/files/continuations-run/trycatch0.check
new file mode 100644
index 0000000000..36806909d0
--- /dev/null
+++ b/test/files/continuations-run/trycatch0.check
@@ -0,0 +1,2 @@
+10
+10 \ No newline at end of file
diff --git a/test/files/continuations-run/trycatch0.scala b/test/files/continuations-run/trycatch0.scala
new file mode 100644
index 0000000000..ec39863f3f
--- /dev/null
+++ b/test/files/continuations-run/trycatch0.scala
@@ -0,0 +1,25 @@
+// $Id$
+
+import scala.util.continuations._
+
+object Test {
+
+ def foo = try {
+ shift((k: Int=>Int) => k(7))
+ } catch {
+ case ex =>
+ 9
+ }
+
+ def bar = try {
+ 7
+ } catch {
+ case ex =>
+ shiftUnit0[Int,Int](9)
+ }
+
+ def main(args: Array[String]): Unit = {
+ println(reset { foo + 3 })
+ println(reset { bar + 3 })
+ }
+} \ No newline at end of file
diff --git a/test/files/continuations-run/trycatch1.check b/test/files/continuations-run/trycatch1.check
new file mode 100644
index 0000000000..a028d2b1e1
--- /dev/null
+++ b/test/files/continuations-run/trycatch1.check
@@ -0,0 +1,4 @@
+12
+12
+12
+12 \ No newline at end of file
diff --git a/test/files/continuations-run/trycatch1.scala b/test/files/continuations-run/trycatch1.scala
new file mode 100644
index 0000000000..10dfd30bb2
--- /dev/null
+++ b/test/files/continuations-run/trycatch1.scala
@@ -0,0 +1,48 @@
+// $Id$
+
+import scala.util.continuations._
+
+object Test {
+
+ def fatal: Int = throw new Exception()
+
+ def foo1 = try {
+ fatal
+ shift((k: Int=>Int) => k(7))
+ } catch {
+ case ex =>
+ 9
+ }
+
+ def foo2 = try {
+ shift((k: Int=>Int) => k(7))
+ fatal
+ } catch {
+ case ex =>
+ 9
+ }
+
+ def bar1 = try {
+ fatal
+ 7
+ } catch {
+ case ex =>
+ shiftUnit0[Int,Int](9) // regular shift causes no-symbol doesn't have owner
+ }
+
+ def bar2 = try {
+ 7
+ fatal
+ } catch {
+ case ex =>
+ shiftUnit0[Int,Int](9) // regular shift causes no-symbol doesn't have owner
+ }
+
+ def main(args: Array[String]): Unit = {
+ println(reset { foo1 + 3 })
+ println(reset { foo2 + 3 })
+ println(reset { bar1 + 3 })
+ println(reset { bar2 + 3 })
+ }
+
+} \ No newline at end of file
diff --git a/test/files/continuations-run/while0.check b/test/files/continuations-run/while0.check
new file mode 100644
index 0000000000..d58c55a31d
--- /dev/null
+++ b/test/files/continuations-run/while0.check
@@ -0,0 +1 @@
+9000
diff --git a/test/files/continuations-run/while0.scala b/test/files/continuations-run/while0.scala
new file mode 100644
index 0000000000..46005a4a77
--- /dev/null
+++ b/test/files/continuations-run/while0.scala
@@ -0,0 +1,22 @@
+// $Id$
+
+import scala.util.continuations._
+
+
+object Test {
+
+ def foo(): Int @cps[Unit] = 2
+
+ def test(): Unit @cps[Unit] = {
+ var x = 0
+ while (x < 9000) { // pick number large enough to require tail-call opt
+ x += foo()
+ }
+ println(x)
+ }
+
+ def main(args: Array[String]): Any = {
+ reset(test())
+ }
+
+} \ No newline at end of file
diff --git a/test/files/continuations-run/while1.check b/test/files/continuations-run/while1.check
new file mode 100644
index 0000000000..3d5f0b9a46
--- /dev/null
+++ b/test/files/continuations-run/while1.check
@@ -0,0 +1,11 @@
+up
+up
+up
+up
+up
+10
+down
+down
+down
+down
+down
diff --git a/test/files/continuations-run/while1.scala b/test/files/continuations-run/while1.scala
new file mode 100644
index 0000000000..fd41ab36ee
--- /dev/null
+++ b/test/files/continuations-run/while1.scala
@@ -0,0 +1,22 @@
+// $Id$
+
+import scala.util.continuations._
+
+
+object Test {
+
+ def foo(): Int @cps[Unit] = shift { k => println("up"); k(2); println("down") }
+
+ def test(): Unit @cps[Unit] = {
+ var x = 0
+ while (x < 9) {
+ x += foo()
+ }
+ println(x)
+ }
+
+ def main(args: Array[String]): Any = {
+ reset(test())
+ }
+
+} \ No newline at end of file
diff --git a/test/files/continuations-run/while2.check b/test/files/continuations-run/while2.check
new file mode 100644
index 0000000000..9fe515181b
--- /dev/null
+++ b/test/files/continuations-run/while2.check
@@ -0,0 +1,19 @@
+up
+up
+up
+up
+up
+up
+up
+up
+up
+9000
+down
+down
+down
+down
+down
+down
+down
+down
+down
diff --git a/test/files/continuations-run/while2.scala b/test/files/continuations-run/while2.scala
new file mode 100644
index 0000000000..63f9cb99fe
--- /dev/null
+++ b/test/files/continuations-run/while2.scala
@@ -0,0 +1,23 @@
+// $Id$
+
+import scala.util.continuations._
+
+
+object Test {
+
+ def foo1(): Int @cps[Unit] = 2
+ def foo2(): Int @cps[Unit] = shift { k => println("up"); k(2); println("down") }
+
+ def test(): Unit @cps[Unit] = {
+ var x = 0
+ while (x < 9000) { // pick number large enough to require tail-call opt
+ x += (if (x % 1000 != 0) foo1() else foo2())
+ }
+ println(x)
+ }
+
+ def main(args: Array[String]): Any = {
+ reset(test())
+ }
+
+} \ No newline at end of file
diff --git a/test/files/detach-neg/det_bar.check b/test/files/detach-neg/det_bar.check
new file mode 100644
index 0000000000..70b47581a5
--- /dev/null
+++ b/test/files/detach-neg/det_bar.check
@@ -0,0 +1,4 @@
+det_bar.scala:7: error: detach inapplicable for method bar
+ detach(bar)
+ ^
+one error found
diff --git a/test/files/detach-neg/det_bar.scala b/test/files/detach-neg/det_bar.scala
new file mode 100644
index 0000000000..862afb1d6e
--- /dev/null
+++ b/test/files/detach-neg/det_bar.scala
@@ -0,0 +1,13 @@
+import scala.remoting._
+class A(y: Int) {
+ var z = 2
+ var bar = (x: Int) => x + y + z
+ def foo(x: Int): Int = x + y + z
+ bar = (x: Int) => x * y
+ detach(bar)
+}
+
+object test extends App {
+ val a = new A(1)
+ println(a.bar(2))
+}
diff --git a/test/files/detach-run/actor-run.check b/test/files/detach-run/actor-run.check
new file mode 100644
index 0000000000..9448ddd5fe
--- /dev/null
+++ b/test/files/detach-run/actor-run.check
@@ -0,0 +1,5 @@
+Server.main 8889
+Client.main 127.0.0.1 8889
+yInstVal = 10
+zLocVal = 1000
+result received: 11111
diff --git a/test/files/detach-run/actor/Client.scala b/test/files/detach-run/actor/Client.scala
new file mode 100644
index 0000000000..12573e24d3
--- /dev/null
+++ b/test/files/detach-run/actor/Client.scala
@@ -0,0 +1,54 @@
+/*
+ * @author Stephane Micheloud
+ */
+
+import scala.actors.Actor._, ClientHelper._
+import scala.actors.remote._, RemoteActor._
+import scala.remoting._, Debug._
+
+object Foo {
+ def trace(msg: String) { info("[Foo.trace] "+msg)}
+}
+object Client {
+ val yInstVal: Int = 10
+ var yInstVar: Int = 99
+ object Bar {
+ def trace(msg: String) { info("[Bar.trace] "+msg) }
+ }
+ def main(args: Array[String]) {
+ init(args)
+ actor {
+ val server = select(Node(host, port), 'Server)
+ val zLocVal: Int = 1000
+ var zLocVar: Int = 9998
+ server ! detach(
+ (x: Int) => {
+ println("yInstVal = "+yInstVal)
+ this.trace("yInstVar = "+yInstVar)
+ Bar.trace("zLocVal = "+zLocVal)
+ Foo.trace("zLocVar = "+zLocVar)
+ zLocVar += 2
+ System.out.println("zLocVal = "+zLocVal)
+ Debug.info("zLocVar = "+zLocVar)
+ x + yInstVal + yInstVar + zLocVal + zLocVar
+ })
+ react {
+ case result: Int =>
+ println("result received: " + result)
+ Predef.exit(0)
+ }
+ }
+ }
+ private def trace(msg: String) { info("[Client.trace] "+msg) }
+}
+
+object ClientHelper {
+ private var _host = "127.0.0.1"
+ private var _port = 8888
+ def host = _host
+ def port = _port
+ def init(args: Array[String]) {
+ try { _host = args(0) } catch { case _ => }
+ try { _port = args(1).toInt } catch { case _ => }
+ }
+}
diff --git a/test/files/detach-run/actor/Server.scala b/test/files/detach-run/actor/Server.scala
new file mode 100644
index 0000000000..b56d22f744
--- /dev/null
+++ b/test/files/detach-run/actor/Server.scala
@@ -0,0 +1,27 @@
+/*
+ * @author Stephane Micheloud
+ */
+
+import scala.actors.Actor._
+import scala.actors.remote.RemoteActor._
+
+object Server extends ServerConsole {
+ private def computation(f: Int => Int): Int = {
+ //some time-consuming task
+ f(2)
+ }
+ def main(args: Array[String]) {
+ actor {
+ classLoader = serverClassLoader
+ alive(args(0).toInt)
+ register('Server, self)
+ loopWhile(isRunning) {
+ react {
+ case f: (Int => Int) =>
+ val result = computation(f)
+ sender ! result
+ }
+ }
+ }
+ }
+}
diff --git a/test/files/detach-run/actor/ServerConsole.scala b/test/files/detach-run/actor/ServerConsole.scala
new file mode 100644
index 0000000000..8ebd9d4c2e
--- /dev/null
+++ b/test/files/detach-run/actor/ServerConsole.scala
@@ -0,0 +1,75 @@
+/*
+ * @author Stephane Micheloud
+ */
+
+import java.io.{BufferedReader, InputStreamReader}
+
+import scala.compat.Platform.currentTime
+import scala.remoting.Debug, Debug._
+
+trait ServerConsole extends Thread {
+ private val startTime = currentTime
+ actors.Debug.level = // e.g. 3 // info+warning+error
+ try { System.getProperty("scala.actors.logLevel", "0").toInt }
+ catch { case e => 0 }
+
+ start()
+
+ val serverClassLoader = {
+ import java.rmi.server.RMIClassLoader
+ val codebase = System.getProperty("java.rmi.server.codebase")
+ info("[ServerConsole] codebase="+codebase)
+ RMIClassLoader getClassLoader codebase
+ }
+
+ private var isTerminated = false
+
+ def terminate() { isTerminated = false }
+
+ def isRunning = !isTerminated
+
+ override def run() {
+ val in = new BufferedReader(new InputStreamReader(System.in))
+ var quit = false
+ while (!quit) {
+ val args = getArgs(in)
+ if (args contains "quit")
+ quit = true
+ if (args contains "cls") {
+ println(ERASE_SCREEN)
+ println(CURSOR_HOME)
+ }
+ if (args contains "warning")
+ Debug.level = Level.WARNING
+ if (args contains "info")
+ Debug.level = Level.INFO
+ if (args contains "silent")
+ Debug.level = Level.SILENT
+ }
+ terminate()
+ println("Server exited ("+mkTimeString(currentTime - startTime)+")")
+ sys.exit(0)
+ }
+
+ protected def trace(msg: String) {
+ Debug.info("[ServerConsole.trace] "+msg)
+ }
+
+ private def getArgs(in: BufferedReader): List[String] = {
+ val input = try { in.readLine() } catch { case _ => null }
+ if (input != null) (input.trim split "\\s+").toList else Nil
+ }
+
+ private def mkTimeString(time: Long): String = {
+ def twoDigits(i: Long) = (if (i < 10) "0" else "")+i
+ val sec = time / 1000
+ val min = sec / 60
+ val h = min / 60
+ twoDigits(h) +":"+
+ twoDigits(min - h * 60)+":"+
+ twoDigits(sec - min * 60)
+ }
+
+ private val ERASE_SCREEN = "\033[2J"
+ private val CURSOR_HOME = "\033[H"
+}
diff --git a/test/files/detach-run/actor/actor.flags b/test/files/detach-run/actor/actor.flags
new file mode 100644
index 0000000000..55eed8bbcd
--- /dev/null
+++ b/test/files/detach-run/actor/actor.flags
@@ -0,0 +1 @@
+-Xpluginsdir ../../../../build/pack/misc/scala-devel/plugins -Xplugin-require:detach -P:detach:enable
diff --git a/test/files/detach-run/actor/actor.scala b/test/files/detach-run/actor/actor.scala
new file mode 100644
index 0000000000..23a10d6982
--- /dev/null
+++ b/test/files/detach-run/actor/actor.scala
@@ -0,0 +1,157 @@
+/*
+ * @author Stephane Micheloud
+ */
+
+object Test {
+
+ val name = "actor"
+ val host = "127.0.0.1"
+ val port = 8889
+
+ def main(args: Array[String]) {
+ setenv()
+ println("Server.main "+port)
+ Server.main(Array(port.toString))
+ println("Client.main "+host+" "+port)
+ Client.main(Array(host, port.toString))
+ Server.terminate()
+ }
+
+ private def setenv() {
+ import Env._
+
+ // Java properties for server & client
+ System.setProperty("scala.actors.logLevel", actors_logLevel)
+ System.setProperty("scala.remoting.logLevel", logLevel)
+ System.setProperty("java.security.manager", "")
+ System.setProperty("java.security.policy", policyFile)
+ // Java properties for server only
+ System.setProperty("java.rmi.server.codebase", deployUrl)
+ System.setProperty("java.rmi.server.hostname", host)
+ System.setProperty("java.rmi.server.useCodebaseOnly", "true")
+
+ // application-specific classes to be deployed and accessed via URL
+ // (i.e. detached closure, proxy interfaces and proxy stubs)
+ val classNames = List(
+ "$anonfun$main$1$proxy",
+ "$anonfun$main$1$proxyImpl_Stub",
+ "Bar$proxy",
+ "Bar$proxyImpl_Stub",
+ "Client$$anonfun$main$1$$anonfun$apply$1$detach",
+ "Client$proxy",
+ "Client$proxyImpl_Stub",
+ "Foo$proxy",
+ "Foo$proxyImpl_Stub")
+
+ val proxyImplNames =
+ for (n <- classNames; i = n lastIndexOf "_Stub"; if i > 0)
+ yield n.substring(0, i)
+
+ generatePolicyFile()
+ generateRmiStubs(proxyImplNames)
+ generateJarFile(classNames)
+ }
+}
+
+object Env {
+ import java.io._, java.util.jar._
+
+ val actors_logLevel = "0"
+ // = "3" // info+warning+error
+ val logLevel = "silent"
+ // = "info" // debug user code only
+ // = "info,lib" // debug user & library code
+
+ // we assume an Apache server is running locally for deployment
+ private val sep = File.separator
+ val docPath = System.getProperty("user.home")+sep+"public_html"
+ val docRoot = "http://127.0.0.1/~"+System.getProperty("user.name")
+
+ private val policyTmpl =
+ System.getProperty("partest.cwd")+sep+Test.name+sep+"java.policy"
+ val outPath = System.getProperty("partest.output")
+ val libPath = System.getProperty("partest.lib")
+ val policyFile = outPath+sep+"java.policy"
+ val codebaseDir = outPath+sep+"-"
+
+ assert((new File(docPath)).isDirectory,
+ "Root directory \""+docPath+"\" not found")
+ val deployJar = docPath+sep+Test.name+"_deploy.jar"
+ val deployUrl = docRoot+"/"+Test.name+"_deploy.jar"
+
+ def generatePolicyFile() {
+ val in = new BufferedReader(new FileReader(policyTmpl))
+ val out = new PrintWriter(new BufferedWriter(new FileWriter(policyFile)))
+ var line = in.readLine()
+ while (line != null) {
+ val line1 = line.replaceAll("@PROJECT_LIB_BASE@", codebaseDir)
+ out.println(line1)
+ line = in.readLine()
+ }
+ in.close()
+ out.close()
+ }
+
+ def generateRmiStubs(classNames: List[String]) {
+ val options = List(
+ "-v1.2",
+ "-classpath "+libPath+File.pathSeparator+outPath,
+ "-d "+outPath)
+ rmic(options, classNames)
+ //ls(outPath)
+ }
+
+ def generateJarFile(classNames: List[String]) {
+ val out = new JarOutputStream(new FileOutputStream(deployJar))
+ classNames foreach (name => try {
+ val classFile = name+".class"
+ val in = new FileInputStream(outPath+sep+classFile)
+ out putNextEntry new JarEntry(classFile)
+ val buf = new Array[Byte](512)
+ var len = in read buf
+ while (len != -1) {
+ out.write(buf, 0, len)
+ len = in read buf
+ }
+ in.close()
+ } catch {
+ case e: FileNotFoundException => println(e)
+ })
+ out.close()
+ }
+
+ private def ls(path: String) { exec("ls -al "+path) }
+
+ private def rmic(options: List[String], classNames: List[String]) {
+ val javaHome = scala.util.Properties.javaHome
+ val jdkHome =
+ if (javaHome endsWith "jre") javaHome.substring(0, javaHome.length-4)
+ else javaHome
+ val rmicExt = if (scala.util.Properties.isWin) ".exe" else ""
+ val rmicCmd = jdkHome+sep+"bin"+sep+"rmic"+rmicExt
+ val cmdLine = rmicCmd+options.mkString(" ", " ", "")+
+ classNames.mkString(" "," ","")
+ // println(cmdLine)
+ exec(cmdLine)
+ }
+
+ private def exec(command: String) {
+ val proc = Runtime.getRuntime exec command
+ proc.waitFor()
+ val out = new BufferedReader(new InputStreamReader(proc.getInputStream))
+ var line = out.readLine()
+ while (line != null) {
+ println(line)
+ line = out.readLine()
+ }
+ out.close()
+ val err = new BufferedReader(new InputStreamReader(proc.getErrorStream))
+ line = err.readLine()
+ while (line != null) {
+ println(line)
+ line = err.readLine()
+ }
+ err.close()
+ }
+}
+
diff --git a/test/files/detach-run/actor/java.policy b/test/files/detach-run/actor/java.policy
new file mode 100644
index 0000000000..4beb2ca26b
--- /dev/null
+++ b/test/files/detach-run/actor/java.policy
@@ -0,0 +1,25 @@
+// See http://java.sun.com/javase/6/docs/technotes/guides/security/permissions.html
+// See http://mindprod.com/jgloss/policyfile.html
+// The policy expands ${/} to the correct path or folder delimiter on your host platform.
+
+// Actions available with SocketPermission: accept, connect, listen, resolve
+// 1) The "resolve" action is implied when any of the other actions are present.
+// 2) The "listen" action is only meaningful when used with "localhost".
+
+grant {
+ permission java.net.SocketPermission "*:80", "connect,accept,listen";
+ permission java.net.SocketPermission "*:1024-", "connect,accept,listen";
+ permission java.util.PropertyPermission "scala.remoting.logLevel", "read";
+ permission java.util.PropertyPermission "scala.remoting.port", "read";
+};
+
+grant codeBase "@PROJECT_LIB_BASE@" {
+ permission java.lang.RuntimePermission "getClassLoader";
+ permission java.util.PropertyPermission "java.rmi.server.codebase", "read";
+ permission java.util.PropertyPermission "java.rmi.server.hostname", "read";
+ permission java.util.PropertyPermission "sun.rmi.dgc.server.gcInterval", "read,write";
+};
+
+//grant {
+// permission java.security.AllPermission;
+//};
diff --git a/test/files/detach-run/basic-run.check b/test/files/detach-run/basic-run.check
new file mode 100644
index 0000000000..6463d97497
--- /dev/null
+++ b/test/files/detach-run/basic-run.check
@@ -0,0 +1,5 @@
+Server.main 8889
+> Client.main 127.0.0.1 8889
+yInstVal = 10
+zLocVal = 1000
+result received: 11111
diff --git a/test/files/detach-run/basic/Client.scala b/test/files/detach-run/basic/Client.scala
new file mode 100644
index 0000000000..f8eddb041d
--- /dev/null
+++ b/test/files/detach-run/basic/Client.scala
@@ -0,0 +1,48 @@
+/*
+ * @author Stephane Micheloud
+ */
+
+import java.net._, Thread._, ClientHelper._
+import scala.remoting._, Debug._
+
+object Foo {
+ def trace(s: String) { info("[Foo.trace] "+s)}
+}
+object Client {
+ val yInstVal: Int = 10
+ var yInstVar: Int = 99
+ object Bar {
+ def trace(s: String) { info("[Bar.trace] "+s) }
+ }
+ def main(args: Array[String]) {
+ init(args)
+ val server = new Channel(host, port)
+ val zLocVal: Int = 1000
+ var zLocVar: Int = 9998
+ server ! detach(
+ (x: Int) => {
+ println("yInstVal = "+yInstVal)
+ this.trace("yInstVar = "+yInstVar)
+ Bar.trace("zLocVal = "+zLocVal)
+ Foo.trace("zLocVar = "+zLocVar)
+ zLocVar += 2
+ System.out.println("zLocVal = "+zLocVal)
+ Debug.info("zLocVar = "+zLocVar)
+ x + yInstVal + yInstVar + zLocVal + zLocVar
+ })
+ val result = server.receiveInt
+ println("result received: " + result)
+ }
+ private def trace(s: String) { info("[Client.trace] "+s) }
+}
+
+object ClientHelper {
+ private var _host = "127.0.0.1"
+ private var _port = 8888
+ def host = _host
+ def port = _port
+ def init(args: Array[String]) {
+ try { _host = args(0) } catch { case _ => }
+ try { _port = args(1).toInt } catch { case _ => }
+ }
+}
diff --git a/test/files/detach-run/basic/Server.scala b/test/files/detach-run/basic/Server.scala
new file mode 100644
index 0000000000..f8aa02a4ba
--- /dev/null
+++ b/test/files/detach-run/basic/Server.scala
@@ -0,0 +1,22 @@
+/*
+ * @author Stephane Micheloud
+ */
+
+import scala.remoting.ServerChannel
+
+object Server extends ServerConsole {
+ private def computation(f: Int => Int): Int = {
+ //some time-consuming task
+ f(2)
+ }
+ def main(args: Array[String]) {
+ val server = new ServerChannel(args(0).toInt)
+ loop {
+ val client = server.accept
+ val f = client.receive[Int => Int]
+ val result = computation(f)
+ client ! result
+ }
+ server.close()
+ }
+}
diff --git a/test/files/detach-run/basic/ServerConsole.scala b/test/files/detach-run/basic/ServerConsole.scala
new file mode 100644
index 0000000000..65b81c0ca1
--- /dev/null
+++ b/test/files/detach-run/basic/ServerConsole.scala
@@ -0,0 +1,83 @@
+/*
+ * @author Stephane Micheloud
+ */
+
+import java.io._
+
+import scala.compat.Platform.currentTime
+import scala.remoting.Debug, Debug._
+
+trait ServerConsole extends Thread {
+ private val startTime = currentTime
+
+ start()
+
+ private var isTerminated = false
+
+ def terminate() { isTerminated = true }
+
+ protected def loop(block: => Unit) {
+ while (!isTerminated) {
+ try {
+ block
+ }
+ catch {
+ case e: ObjectStreamException =>
+ trace("Object stream error ("+e.getMessage+")")
+ case e: EOFException =>
+ trace("Connection lost")
+ case e: ClassNotFoundException =>
+ trace("Class not found")
+ case e =>
+ trace("Server error: "+e)
+ }
+ }
+ }
+
+ override def run() {
+ val in = new BufferedReader(new InputStreamReader(System.in))
+ var quit = false
+ while (!quit) {
+ val args = getArgs(in)
+ if (args contains "quit")
+ quit = true
+ if (args contains "cls") {
+ println(ERASE_SCREEN)
+ println(CURSOR_HOME)
+ }
+ if (args contains "warning")
+ Debug.level = Level.WARNING
+ if (args contains "info")
+ Debug.level = Level.INFO
+ if (args contains "silent")
+ Debug.level = Level.SILENT
+ }
+ terminate()
+ println("Server exited ("+mkTimeString(currentTime - startTime)+")")
+ exit(0)
+
+ }
+
+ protected def trace(msg: String) {
+ Debug.info("[ServerConsole.trace] "+msg)
+ }
+
+ private def getArgs(in: BufferedReader): List[String] = {
+ print("> ")
+ val input = try { in.readLine() } catch { case _ => null }
+ if (input != null) (input.trim split "\\s+").toList else Nil
+ }
+
+ private def mkTimeString(time: Long): String = {
+ def twoDigits(i: Long) = (if (i < 10) "0" else "")+i
+ val sec = time / 1000
+ val min = sec / 60
+ val h = min / 60
+ twoDigits(h) +":"+
+ twoDigits(min - h * 60)+":"+
+ twoDigits(sec - min * 60)
+ }
+
+ private val ERASE_SCREEN = "\033[2J"
+ private val CURSOR_HOME = "\033[H"
+}
diff --git a/test/files/detach-run/basic/basic.flags b/test/files/detach-run/basic/basic.flags
new file mode 100644
index 0000000000..55eed8bbcd
--- /dev/null
+++ b/test/files/detach-run/basic/basic.flags
@@ -0,0 +1 @@
+-Xpluginsdir ../../../../build/pack/misc/scala-devel/plugins -Xplugin-require:detach -P:detach:enable
diff --git a/test/files/detach-run/basic/basic.scala b/test/files/detach-run/basic/basic.scala
new file mode 100644
index 0000000000..4d0fc2d933
--- /dev/null
+++ b/test/files/detach-run/basic/basic.scala
@@ -0,0 +1,169 @@
+/*
+ * @author Stephane Micheloud
+ */
+
+object Test {
+
+ val name = "basic"
+ val host = "127.0.0.1"
+ val port = 8889
+
+ def main(args: Array[String]) {
+ setenv()
+ println("Server.main "+port)
+ server.start()
+ println("Client.main "+host+" "+port)
+ client.start()
+ server.terminate()
+ }
+
+ private var server = new ServerThread(port)
+ private var client = new ClientThread(host, port)
+
+ private class ServerThread(port: Int) extends Runnable {
+ private var th = new Thread(this)
+ def start() { th.start(); Thread.sleep(1000) }
+ def run() { Server.main(Array(port.toString)) }
+ def terminate() { Server.terminate(); sys.exit(0) }
+ }
+
+ private class ClientThread(host: String, port: Int) extends Runnable {
+ private var th = new Thread(this)
+ def start() { th.start(); th.join() }
+ def run() { Client.main(Array(host, port.toString)) }
+ }
+
+ private def setenv() {
+ import Env._
+
+ // Java properties for server & client
+ System.setProperty("scala.remoting.logLevel", logLevel)
+ System.setProperty("java.security.manager", "")
+ System.setProperty("java.security.policy", policyFile)
+ // Java properties for server only
+ System.setProperty("java.rmi.server.codebase", deployUrl)
+ System.setProperty("java.rmi.server.hostname", host)
+ System.setProperty("java.rmi.server.useCodebaseOnly", "true")
+
+ // application-secific classes to be deployed and accessed via URL
+ // (i.e. detached closure, proxy interfaces and proxy stubs)
+ val classNames = List(
+ "Bar$proxy",
+ "Bar$proxyImpl_Stub",
+ "Client$$anonfun$main$1$detach",
+ "Client$proxy",
+ "Client$proxyImpl_Stub",
+ "Foo$proxy",
+ "Foo$proxyImpl_Stub")
+
+ val proxyImplNames =
+ for (n <- classNames; i = n lastIndexOf "_Stub"; if i > 0)
+ yield n.substring(0, i)
+
+ generatePolicyFile()
+ generateRmiStubs(proxyImplNames)
+ generateJarFile(classNames)
+ }
+}
+
+object Env {
+ import java.io._, java.util.jar._
+
+ val actors_logLevel = "0"
+ // = "3" // info+warning+error
+ val logLevel = "silent"
+ // = "info" // debug user code only
+ // = "info,lib" // debug user & library code
+
+ // we assume an Apache server is running locally for deployment
+ private val sep = File.separator
+ val docPath = System.getProperty("user.home")+sep+"public_html"
+ val docRoot = "http://127.0.0.1/~"+System.getProperty("user.name")
+
+ private val policyTmpl =
+ System.getProperty("partest.cwd")+sep+Test.name+sep+"java.policy"
+ val outPath = System.getProperty("partest.output")
+ val libPath = System.getProperty("partest.lib")
+ val policyFile = outPath+sep+"java.policy"
+ val codebaseDir = outPath+sep+"-"
+
+ assert((new File(docPath)).isDirectory,
+ "Root directory \""+docPath+"\" not found")
+ val deployJar = docPath+sep+Test.name+"_deploy.jar"
+ val deployUrl = docRoot+"/"+Test.name+"_deploy.jar"
+
+ def generatePolicyFile() {
+ val in = new BufferedReader(new FileReader(policyTmpl))
+ val out = new PrintWriter(new BufferedWriter(new FileWriter(policyFile)))
+ var line = in.readLine()
+ while (line != null) {
+ val line1 = line.replaceAll("@PROJECT_LIB_BASE@", codebaseDir)
+ out.println(line1)
+ line = in.readLine()
+ }
+ in.close()
+ out.close()
+ }
+
+ def generateRmiStubs(classNames: List[String]) {
+ val options = List(
+ "-v1.2",
+ "-classpath "+libPath+File.pathSeparator+outPath,
+ "-d "+outPath)
+ rmic(options, classNames)
+ //ls(outPath)
+ }
+
+ def generateJarFile(classNames: List[String]) {
+ val out = new JarOutputStream(new FileOutputStream(deployJar))
+ classNames foreach (name => try {
+ val classFile = name+".class"
+ val in = new FileInputStream(outPath+sep+classFile)
+ out putNextEntry new JarEntry(classFile)
+ val buf = new Array[Byte](512)
+ var len = in read buf
+ while (len != -1) {
+ out.write(buf, 0, len)
+ len = in read buf
+ }
+ in.close()
+ } catch {
+ case e: FileNotFoundException => println(e)
+ })
+ out.close()
+ }
+
+ private def ls(path: String) { exec("ls -al "+path) }
+
+ private def rmic(options: List[String], classNames: List[String]) {
+ val javaHome = scala.util.Properties.javaHome
+ val jdkHome =
+ if (javaHome endsWith "jre") javaHome.substring(0, javaHome.length-4)
+ else javaHome
+ val rmicExt = if (scala.util.Properties.isWin) ".exe" else ""
+ val rmicCmd = jdkHome+sep+"bin"+sep+"rmic"+rmicExt
+ val cmdLine = rmicCmd+options.mkString(" ", " ", "")+
+ classNames.mkString(" "," ","")
+ // println(cmdLine)
+ exec(cmdLine)
+ }
+
+ private def exec(command: String) {
+ val proc = Runtime.getRuntime exec command
+ proc.waitFor()
+ val out = new BufferedReader(new InputStreamReader(proc.getInputStream))
+ var line = out.readLine()
+ while (line != null) {
+ println(line)
+ line = out.readLine()
+ }
+ out.close()
+ val err = new BufferedReader(new InputStreamReader(proc.getErrorStream))
+ line = err.readLine()
+ while (line != null) {
+ println(line)
+ line = err.readLine()
+ }
+ err.close()
+ }
+}
diff --git a/test/files/detach-run/basic/java.policy b/test/files/detach-run/basic/java.policy
new file mode 100644
index 0000000000..92c1045c3d
--- /dev/null
+++ b/test/files/detach-run/basic/java.policy
@@ -0,0 +1,26 @@
+// See http://java.sun.com/javase/6/docs/technotes/guides/security/permissions.html
+// See http://mindprod.com/jgloss/policyfile.html
+// The policy expands ${/} to the correct path or folder delimiter on your host platform.
+
+// Actions available with SocketPermission: accept, connect, listen, resolve
+// 1) The "resolve" action is implied when any of the other actions are present.
+// 2) The "listen" action is only meaningful when used with "localhost".
+
+grant {
+ permission java.net.SocketPermission "*:80", "connect,accept,listen";
+ permission java.net.SocketPermission "*:1024-", "connect,accept,listen";
+ permission java.util.PropertyPermission "scala.remoting.logLevel", "read";
+ permission java.util.PropertyPermission "scala.remoting.port", "read";
+};
+
+grant codeBase "@PROJECT_LIB_BASE@" {
+ permission java.lang.RuntimePermission "getClassLoader";
+ permission java.lang.RuntimePermission "createClassLoader";
+ permission java.util.PropertyPermission "java.rmi.server.codebase", "read";
+ permission java.util.PropertyPermission "java.rmi.server.hostname", "read";
+ permission java.util.PropertyPermission "sun.rmi.dgc.server.gcInterval", "read,write";
+};
+
+//grant {
+// permission java.security.AllPermission;
+//};
diff --git a/test/files/files.iml b/test/files/files.iml
deleted file mode 100644
index ac78e33f39..0000000000
--- a/test/files/files.iml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module relativePaths="true" type="JAVA_MODULE" version="4">
- <component name="FacetManager">
- <facet type="Scala" name="Scala">
- <configuration />
- </facet>
- </component>
- <component name="NewModuleRootManager" inherit-compiler-output="true">
- <exclude-output />
- <content url="file://$MODULE_DIR$" />
- <orderEntry type="library" name="lib1" level="project" />
- <orderEntry type="inheritedJdk" />
- <orderEntry type="sourceFolder" forTests="false" />
- <orderEntry type="library" name="lib" level="project" />
- </component>
-</module>
-
diff --git a/test/files/gitignore.SAMPLE b/test/files/gitignore.SAMPLE
new file mode 100644
index 0000000000..161be5b55f
--- /dev/null
+++ b/test/files/gitignore.SAMPLE
@@ -0,0 +1,2 @@
+*.log
+*.obj/
diff --git a/test/files/jvm/JavaInteraction.scala b/test/files/jvm/JavaInteraction.scala
deleted file mode 100644
index 1316fad5d4..0000000000
--- a/test/files/jvm/JavaInteraction.scala
+++ /dev/null
@@ -1,23 +0,0 @@
-//############################################################################
-// Test Java interaction
-//############################################################################
-
-import java.awt.Color;
-import java.awt.Point;
-
-class ColoredPoint(x: Int, y: Int, c_ : Color) extends Point(x, y) {
- val c: Color = c_;
- def getC(): Color = c;
-}
-
-object Test {
- def main(args: Array[String]): Unit = {
- val p = new ColoredPoint(5, 7, Color.RED);
- Console.println("p.x = " + p.x);
- Console.println("p.c = " + p.c);
- Console.println("p.getX() = " + p.getX());
- Console.println("p.getC() = " + p.getC());
- }
-}
-
-//############################################################################
diff --git a/test/files/jvm/actor-exceptions.check b/test/files/jvm/actor-exceptions.check
index 021ccea1f1..d86bac9de5 100644
--- a/test/files/jvm/actor-exceptions.check
+++ b/test/files/jvm/actor-exceptions.check
@@ -1,11 +1 @@
-problem
-received A
-problem
-received A
-problem
-received A
-problem
-received A
-problem
-received last A
-slave exited because of java.lang.Exception: unhandled
+OK
diff --git a/test/files/jvm/actor-exceptions.scala b/test/files/jvm/actor-exceptions.scala
index ccec84c56c..3ee4db9ed2 100644
--- a/test/files/jvm/actor-exceptions.scala
+++ b/test/files/jvm/actor-exceptions.scala
@@ -2,39 +2,57 @@
import scala.actors.{Actor, Exit}
import Actor._
-case class MyException(text: String) extends Exception
+case class MyException(text: String) extends Exception {
+ override def fillInStackTrace() = this
+}
+
+case class MyOtherException(text: String) extends Exception {
+ override def fillInStackTrace() = this
+}
object Master extends Actor {
trapExit = true
def act() {
+ try {
link(Slave)
Slave.start()
for (i <- 0 until 10) Slave ! A
react {
- case Exit(from, reason) => println("slave exited because of "+reason)
+ case Exit(from, reason) =>
+ println("OK")
+ }
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
}
}
}
object Slave extends Actor {
+ override def toString = "Slave"
override def exceptionHandler: PartialFunction[Exception, Unit] = {
- case MyException(text) => println(text)
+ case MyException(text) =>
+ case other if !other.isInstanceOf[scala.util.control.ControlThrowable] => super.exceptionHandler(other)
}
def act() {
+ try {
var cnt = 0
loop {
react {
case A =>
cnt += 1
if (cnt % 2 != 0) throw MyException("problem")
- if (cnt < 10)
- println("received A")
- else {
- println("received last A")
- throw new Exception("unhandled")
+ if (cnt == 10) {
+ throw MyOtherException("unhandled")
}
}
}
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] &&
+ !e.isInstanceOf[MyException] &&
+ !e.isInstanceOf[MyOtherException] =>
+ e.printStackTrace()
+ }
}
}
diff --git a/test/files/jvm/actor-executor.check b/test/files/jvm/actor-executor.check
new file mode 100644
index 0000000000..bdbdb5c6a2
--- /dev/null
+++ b/test/files/jvm/actor-executor.check
@@ -0,0 +1,20 @@
+Two: OK
+One: OK
+Two: OK
+One: OK
+Two: OK
+One: OK
+Two: OK
+One: OK
+Two: OK
+One: OK
+Two: OK
+One: OK
+Two: OK
+One: OK
+Two: OK
+One: OK
+Two: OK
+One: OK
+Two: OK
+One: OK
diff --git a/test/files/jvm/actor-executor.scala b/test/files/jvm/actor-executor.scala
new file mode 100644
index 0000000000..b1f9caebdd
--- /dev/null
+++ b/test/files/jvm/actor-executor.scala
@@ -0,0 +1,75 @@
+import java.util.concurrent.Executors
+import scala.actors.{Actor, SchedulerAdapter}
+import Actor._
+
+trait AdaptedActor extends Actor {
+ override def scheduler =
+ Test.scheduler
+}
+
+object One extends AdaptedActor {
+ def act() {
+ try {
+ Two.start()
+ var i = 0
+ loopWhile (i < 10000) {
+ i += 1
+ Two ! 'MsgForTwo
+ react {
+ case 'MsgForOne =>
+ if (i % 1000 == 0)
+ println("One: OK")
+ if (i == 10000)
+ Test.executor.shutdown()
+ }
+ }
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
+ }
+}
+
+object Two extends AdaptedActor {
+ def act() {
+ try {
+ var i = 0
+ loopWhile (i < 10000) {
+ i += 1
+ react {
+ case 'MsgForTwo =>
+ if (i % 1000 == 0)
+ println("Two: OK")
+ One ! 'MsgForOne
+ }
+ }
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
+ }
+}
+
+object Test {
+ val executor =
+ Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors())
+
+ val scheduler =
+ new SchedulerAdapter {
+ def execute(block: => Unit) {
+ val task = new Runnable {
+ def run() { block }
+ }
+ try {
+ executor.execute(task)
+ } catch {
+ case ree: java.util.concurrent.RejectedExecutionException =>
+ task.run()
+ }
+ }
+ }
+
+ def main(args: Array[String]) {
+ One.start()
+ }
+}
diff --git a/test/files/jvm/actor-executor2.check b/test/files/jvm/actor-executor2.check
new file mode 100644
index 0000000000..da78f45836
--- /dev/null
+++ b/test/files/jvm/actor-executor2.check
@@ -0,0 +1,21 @@
+Two: OK
+One: OK
+Two: OK
+One: OK
+Two: OK
+One: OK
+Two: OK
+One: OK
+Two: OK
+One: OK
+Two: OK
+One: OK
+Two: OK
+One: OK
+Two: OK
+One: OK
+Two: OK
+One: OK
+Two: OK
+One: OK
+One exited
diff --git a/test/files/jvm/actor-executor2.scala b/test/files/jvm/actor-executor2.scala
new file mode 100644
index 0000000000..f8fcaef69f
--- /dev/null
+++ b/test/files/jvm/actor-executor2.scala
@@ -0,0 +1,88 @@
+import scala.actors.{Actor, SchedulerAdapter, Exit}
+import Actor._
+import java.util.concurrent.{Executors, RejectedExecutionException}
+
+object One extends AdaptedActor {
+ def act() {
+ try {
+ Two.start()
+ var i = 0
+ loopWhile (i < Test.NUM_MSG) {
+ i += 1
+ Two ! 'MsgForTwo
+ react {
+ case 'MsgForOne =>
+ if (i % (Test.NUM_MSG/10) == 0)
+ println("One: OK")
+ }
+ }
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
+ }
+}
+
+object Two extends AdaptedActor {
+ def act() {
+ try {
+ var i = 0
+ loopWhile (i < Test.NUM_MSG) {
+ i += 1
+ react {
+ case 'MsgForTwo =>
+ if (i % (Test.NUM_MSG/10) == 0)
+ println("Two: OK")
+ One ! 'MsgForOne
+ }
+ }
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
+ }
+}
+
+trait AdaptedActor extends Actor {
+ override def scheduler =
+ Test.scheduler
+}
+
+object Test {
+ val NUM_MSG = 100000
+
+ val executor =
+ Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors())
+
+ val scheduler =
+ new SchedulerAdapter {
+ def execute(block: => Unit) {
+ val task = new Runnable {
+ def run() { block }
+ }
+ try {
+ executor.execute(task)
+ } catch {
+ case ree: RejectedExecutionException =>
+ task.run() // run task on current thread
+ }
+ }
+ }
+
+ def main(args: Array[String]) {
+ try {
+ self.trapExit = true
+ link(One)
+ One.start()
+
+ receive {
+ case Exit(from, reason) =>
+ println("One exited")
+ Test.executor.shutdown()
+ }
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
+ }
+}
diff --git a/test/files/jvm/actor-executor3.check b/test/files/jvm/actor-executor3.check
new file mode 100644
index 0000000000..bdbdb5c6a2
--- /dev/null
+++ b/test/files/jvm/actor-executor3.check
@@ -0,0 +1,20 @@
+Two: OK
+One: OK
+Two: OK
+One: OK
+Two: OK
+One: OK
+Two: OK
+One: OK
+Two: OK
+One: OK
+Two: OK
+One: OK
+Two: OK
+One: OK
+Two: OK
+One: OK
+Two: OK
+One: OK
+Two: OK
+One: OK
diff --git a/test/files/jvm/actor-executor3.scala b/test/files/jvm/actor-executor3.scala
new file mode 100644
index 0000000000..4fde2c6c5f
--- /dev/null
+++ b/test/files/jvm/actor-executor3.scala
@@ -0,0 +1,62 @@
+import scala.actors.Actor
+import scala.actors.scheduler.ExecutorScheduler
+import java.util.concurrent.Executors
+
+object One extends AdaptedActor {
+ def act() {
+ try {
+ Two.start()
+ var i = 0
+ loopWhile (i < Test.NUM_MSG) {
+ i += 1
+ Two ! 'MsgForTwo
+ react {
+ case 'MsgForOne =>
+ if (i % (Test.NUM_MSG/10) == 0)
+ println("One: OK")
+ }
+ }
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
+ }
+}
+
+object Two extends AdaptedActor {
+ def act() {
+ try {
+ var i = 0
+ loopWhile (i < Test.NUM_MSG) {
+ i += 1
+ react {
+ case 'MsgForTwo =>
+ if (i % (Test.NUM_MSG/10) == 0)
+ println("Two: OK")
+ One ! 'MsgForOne
+ }
+ }
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
+ }
+}
+
+trait AdaptedActor extends Actor {
+ override def scheduler =
+ Test.scheduler
+}
+
+object Test {
+ val NUM_MSG = 100000
+
+ val executor =
+ Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors())
+
+ val scheduler = ExecutorScheduler(executor)
+
+ def main(args: Array[String]) {
+ One.start()
+ }
+}
diff --git a/test/files/jvm/actor-getstate.check b/test/files/jvm/actor-getstate.check
new file mode 100644
index 0000000000..2c94e48371
--- /dev/null
+++ b/test/files/jvm/actor-getstate.check
@@ -0,0 +1,2 @@
+OK
+OK
diff --git a/test/files/jvm/actor-getstate.scala b/test/files/jvm/actor-getstate.scala
new file mode 100644
index 0000000000..a6e15a8721
--- /dev/null
+++ b/test/files/jvm/actor-getstate.scala
@@ -0,0 +1,85 @@
+import scala.actors.{Reactor, Actor, TIMEOUT}
+import Actor._
+
+object Test {
+
+ def assert(cond: => Boolean, hint: String) {
+ if (!cond)
+ println("FAIL ["+hint+"]")
+ }
+
+ def expectActorState(a: Reactor[T] forSome { type T }, s: Actor.State.Value) {
+ var done = false
+ var i = 0
+ while (!done) {
+ i = i + 1
+ if (i == 10) { // only wait for 2 seconds total
+ println("FAIL ["+a+": expected "+s+"]")
+ done = true
+ }
+
+ Thread.sleep(200)
+ if (a.getState == s) // success
+ done = true
+ }
+ }
+
+ def main(args: Array[String]) {
+ actor {
+ val a = new Reactor[Any] {
+ def act() {
+ assert(getState == Actor.State.Runnable, "runnable1")
+ react {
+ case 'go =>
+ println("OK")
+ }
+ }
+ }
+ expectActorState(a, Actor.State.New)
+
+ a.start()
+ expectActorState(a, Actor.State.Suspended)
+
+ a ! 'go
+ expectActorState(a, Actor.State.Terminated)
+
+ val b = new Actor {
+ def act() {
+ assert(getState == Actor.State.Runnable, "runnable2: "+getState)
+ react {
+ case 'go =>
+ reactWithin(100000) {
+ case TIMEOUT =>
+ case 'go =>
+ receive {
+ case 'go =>
+ }
+ receiveWithin(100000) {
+ case TIMEOUT =>
+ case 'go =>
+ println("OK")
+ }
+ }
+ }
+ }
+ }
+ expectActorState(b, Actor.State.New)
+
+ b.start()
+ expectActorState(b, Actor.State.Suspended)
+
+ b ! 'go
+ expectActorState(b, Actor.State.TimedSuspended)
+
+ b ! 'go
+ expectActorState(b, Actor.State.Blocked)
+
+ b ! 'go
+ expectActorState(b, Actor.State.TimedBlocked)
+
+ b ! 'go
+ expectActorState(b, Actor.State.Terminated)
+ }
+ }
+
+}
diff --git a/test/files/jvm/actor-link-getstate.check b/test/files/jvm/actor-link-getstate.check
new file mode 100644
index 0000000000..9755447320
--- /dev/null
+++ b/test/files/jvm/actor-link-getstate.check
@@ -0,0 +1,2 @@
+Done
+Terminated
diff --git a/test/files/jvm/actor-link-getstate.scala b/test/files/jvm/actor-link-getstate.scala
new file mode 100644
index 0000000000..c24daf2eff
--- /dev/null
+++ b/test/files/jvm/actor-link-getstate.scala
@@ -0,0 +1,62 @@
+import scala.actors.{Actor, Exit}
+import scala.actors.Actor._
+
+case class MyException(text: String) extends Exception(text) {
+ override def fillInStackTrace() = this
+}
+
+object Slave extends Actor {
+ def act() {
+ try {
+ loop {
+ react {
+ case 'doWork =>
+ Console.out.println("Done")
+ reply('done)
+ }
+ }
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
+ }
+}
+
+object Master extends Actor {
+ override def toString = "Master"
+ def act() {
+ try {
+ link(Slave)
+ Slave ! 'doWork
+ react {
+ case 'done =>
+ throw new MyException("Master crashed")
+ }
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
+ }
+}
+
+object Test {
+
+ def main(args: Array[String]) {
+ actor {
+ try {
+ self.trapExit = true
+ link(Slave)
+ Slave.start()
+ Master.start()
+ react {
+ case Exit(from, reason) if (from == Slave) =>
+ Console.out.println(Slave.getState)
+ }
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
+ }
+ }
+
+}
diff --git a/test/files/jvm/actor-looping.scala b/test/files/jvm/actor-looping.scala
index 9599adbb2c..475d4754ce 100644
--- a/test/files/jvm/actor-looping.scala
+++ b/test/files/jvm/actor-looping.scala
@@ -6,6 +6,7 @@ object Test {
def main(args: Array[String]) {
val a = actor {
+ try {
var cnt = 0
loop {
react {
@@ -20,6 +21,10 @@ object Test {
}
}
}
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
}
for (i <- 0 until 10) a ! A
diff --git a/test/files/jvm/actor-normal-exit.scala b/test/files/jvm/actor-normal-exit.scala
index 40dc7b7da4..20863d5bb0 100644
--- a/test/files/jvm/actor-normal-exit.scala
+++ b/test/files/jvm/actor-normal-exit.scala
@@ -5,18 +5,28 @@ object Test {
object Master extends Actor {
trapExit = true
def act() {
+ try {
Slave.start()
react {
case Exit(from, reason) =>
println("slave exited for reason " + reason)
}
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
}
}
object Slave extends Actor {
def act() {
+ try {
link(Master)
println("Done")
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
}
}
diff --git a/test/files/jvm/actor-receivewithin.scala b/test/files/jvm/actor-receivewithin.scala
index c6818cf211..a5c87c2722 100644
--- a/test/files/jvm/actor-receivewithin.scala
+++ b/test/files/jvm/actor-receivewithin.scala
@@ -29,6 +29,7 @@ object A extends Actor {
}
}
B ! 'next
+ receive { case 'done => }
cnt = 0
while (cnt < 501) {
cnt += 1
@@ -56,6 +57,7 @@ object B extends Actor {
for (_ <- 1 to 500) {
A ! 'msg2
}
+ A ! 'done
}
}
}
diff --git a/test/files/jvm/actor-sync-send-timeout.scala b/test/files/jvm/actor-sync-send-timeout.scala
new file mode 100644
index 0000000000..21e624bd0a
--- /dev/null
+++ b/test/files/jvm/actor-sync-send-timeout.scala
@@ -0,0 +1,47 @@
+import scala.actors.Actor
+
+/* This test is a regression test for SI-4759.
+ */
+object Test {
+ val Runs = 5
+
+ def main(args: Array[String]) = {
+ var i = 0
+ while (i < Runs) {
+ i += 1
+ A1 ! 1
+ Thread.sleep(500)
+ }
+ //println("done sending to A1")
+ }
+}
+
+object A2 extends Actor {
+ this.start()
+ def act() {
+ loop {
+ react {
+ case 'stop =>
+ //println("A2 exiting")
+ exit()
+ case _ =>
+ }
+ }
+ }
+}
+
+object A1 extends Actor {
+ this.start()
+ def act() {
+ var i = 0
+ loopWhile(i < Test.Runs) {
+ i += 1
+ react {
+ case any =>
+ A2 !? (500, any)
+ if (i == Test.Runs)
+ A2 ! 'stop
+ }
+ }
+ }
+}
diff --git a/test/files/jvm/actor-termination.scala b/test/files/jvm/actor-termination.scala
index 19dfaf8e17..d8e44a2797 100644
--- a/test/files/jvm/actor-termination.scala
+++ b/test/files/jvm/actor-termination.scala
@@ -5,9 +5,14 @@ import scala.actors.Actor
object Test {
def main(args: Array[String]) {
Actor.actor {
+ try {
println("I'm going to make you wait.")
Thread.sleep(5000)
println("Ok, I'm done.")
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
}
}
}
diff --git a/test/files/jvm/actor-uncaught-exception.check b/test/files/jvm/actor-uncaught-exception.check
new file mode 100644
index 0000000000..2c94e48371
--- /dev/null
+++ b/test/files/jvm/actor-uncaught-exception.check
@@ -0,0 +1,2 @@
+OK
+OK
diff --git a/test/files/jvm/actor-uncaught-exception.scala b/test/files/jvm/actor-uncaught-exception.scala
new file mode 100644
index 0000000000..5ae66de640
--- /dev/null
+++ b/test/files/jvm/actor-uncaught-exception.scala
@@ -0,0 +1,63 @@
+import scala.actors.{Actor, Exit}
+
+class MyException(msg: String) extends Exception(msg) {
+ override def fillInStackTrace() = this
+}
+
+object Test {
+
+ case object StartError extends Actor {
+ def act() {
+ try {
+ throw new MyException("I don't want to run!")
+ } catch {
+ case e: Throwable if (!e.isInstanceOf[scala.util.control.ControlThrowable] &&
+ !e.isInstanceOf[MyException]) =>
+ e.printStackTrace()
+ }
+ }
+ }
+
+ case object MessageError extends Actor {
+ def act() {
+ try {
+ react {
+ case _ => throw new MyException("No message for me!")
+ }
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
+ }
+ }
+
+ case object Supervisor extends Actor {
+ def act() {
+ try {
+ trapExit = true
+ link(StartError)
+ link(MessageError)
+ StartError.start()
+ MessageError.start()
+
+ Actor.loop {
+ react {
+ case Exit(actor, reason) =>
+ println("OK")
+ if (actor == StartError)
+ MessageError ! 'ping
+ else
+ exit()
+ }
+ }
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
+ }
+ }
+
+ def main(args: Array[String]) {
+ Supervisor.start()
+ }
+}
diff --git a/test/files/jvm/actor-uncaught-exception2.check b/test/files/jvm/actor-uncaught-exception2.check
new file mode 100644
index 0000000000..870a5d32f9
--- /dev/null
+++ b/test/files/jvm/actor-uncaught-exception2.check
@@ -0,0 +1,2 @@
+UncaughtException(StartError,None,None,MyException: I don't want to run!)
+UncaughtException(MessageError,Some('ping),Some(Supervisor),MyException: No message for me!)
diff --git a/test/files/jvm/actor-uncaught-exception2.scala b/test/files/jvm/actor-uncaught-exception2.scala
new file mode 100644
index 0000000000..0364cbeb03
--- /dev/null
+++ b/test/files/jvm/actor-uncaught-exception2.scala
@@ -0,0 +1,63 @@
+import scala.actors.{Actor, Exit, Debug}
+
+class MyException(msg: String) extends Exception(msg) {
+ override def fillInStackTrace() = this
+}
+
+object Test {
+
+ case object StartError extends Actor {
+ def act() {
+ try {
+ throw new MyException("I don't want to run!")
+ } catch {
+ case e: Throwable if (!e.isInstanceOf[scala.util.control.ControlThrowable] &&
+ !e.isInstanceOf[MyException]) =>
+ e.printStackTrace()
+ }
+ }
+ }
+
+ case object MessageError extends Actor {
+ def act() {
+ try {
+ react {
+ case _ => throw new MyException("No message for me!")
+ }
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
+ }
+ }
+
+ case object Supervisor extends Actor {
+ def act() {
+ try {
+ trapExit = true
+ link(StartError)
+ link(MessageError)
+ StartError.start()
+ MessageError.start()
+
+ Actor.loop {
+ react {
+ case Exit(actor, reason) =>
+ println(reason)
+ if (actor == StartError)
+ MessageError ! 'ping
+ else
+ exit()
+ }
+ }
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
+ }
+ }
+
+ def main(args: Array[String]) {
+ Supervisor.start()
+ }
+}
diff --git a/test/files/jvm/annotations.check b/test/files/jvm/annotations.check
index 128f8e8f6e..e307f8930d 100644
--- a/test/files/jvm/annotations.check
+++ b/test/files/jvm/annotations.check
@@ -23,7 +23,7 @@ public Test4$Foo6(java.lang.String)
public Test4$Foo7()
@test.SourceAnnotation(mails={bill.gates@bloodsuckers.com}, value=constructor val)
-private final int Test4$Foo8.n
+public Test4$Foo8(int)
@test.SourceAnnotation(mails={bill.gates@bloodsuckers.com}, value=http://eppli.com)
private int Test4$Foo9.z
@@ -37,5 +37,16 @@ public int Test4$Foo9.x()
@test.SourceAnnotation(mails={bill.gates@bloodsuckers.com}, value=http://uppla.com)
public void Test4$Foo9.setY(int)
+@test.SourceAnnotation(mails={bill.gates@bloodsuckers.com}, value=on param 1)
+public Test4$Foo10(java.lang.String)
+
+@test.SourceAnnotation(mails={bill.gates@bloodsuckers.com}, value=on param 2)
+private final java.lang.String Test4$Foo11.name
+
+@test.SourceAnnotation(mails={bill.gates@bloodsuckers.com}, value=on param 3)
+public void Test4$Foo12.name_$eq(java.lang.String)
+
0
99
+dylan
+2
diff --git a/test/files/jvm/annotations.scala b/test/files/jvm/annotations.scala
index 227bd919c1..b1c3c8ba40 100644
--- a/test/files/jvm/annotations.scala
+++ b/test/files/jvm/annotations.scala
@@ -94,25 +94,28 @@ object Test4 {
}
class Foo8(@SourceAnnotation("constructor val") val n: Int) {}
class Foo9 {
- import scala.annotation.target._
- import scala.reflect.BeanProperty
+ import scala.annotation.meta._
+ import scala.beans.BeanProperty
@(SourceAnnotation @getter)("http://apple.com") val x = 0
@BeanProperty @(SourceAnnotation @beanSetter)("http://uppla.com") var y = 0
type myAnn = SourceAnnotation @beanGetter @field
@BeanProperty @myAnn("http://eppli.com") var z = 0
}
+ class Foo10(@SourceAnnotation("on param 1") val name: String)
+ class Foo11(@(SourceAnnotation @scala.annotation.meta.field)("on param 2") val name: String)
+ class Foo12(@(SourceAnnotation @scala.annotation.meta.setter)("on param 3") var name: String)
def run {
import java.lang.annotation.Annotation
import java.lang.reflect.AnnotatedElement
+ def printSourceAnnotation(a: Annotation) {
+ val ann = a.asInstanceOf[SourceAnnotation]
+ println("@test.SourceAnnotation(mails=" + ann.mails.deep.mkString("{", ",", "}") +
+ ", value=" + ann.value + ")")
+ }
def printSourceAnnotations(target: AnnotatedElement) {
//print SourceAnnotation in a predefined way to insure
// against difference in the JVMs (e.g. Sun's vs IBM's)
- def printSourceAnnotation(a: Annotation) {
- val ann = a.asInstanceOf[SourceAnnotation]
- println("@test.SourceAnnotation(mails=" + ann.mails.deepMkString("{", ",", "}") +
- ", value=" + ann.value + ")")
- }
val anns = target.getAnnotations()
anns foreach printSourceAnnotation
if (anns.length > 0) {
@@ -120,6 +123,14 @@ object Test4 {
println
}
}
+ def printParamSourceAnnotations(target: { def getParameterAnnotations(): Array[Array[Annotation]] }) {
+ val anns = target.getParameterAnnotations().flatten
+ anns foreach printSourceAnnotation
+ if (anns.length > 0) {
+ println(target)
+ println
+ }
+ }
printSourceAnnotations(classOf[Foo1])
printSourceAnnotations(classOf[Foo2])
printSourceAnnotations(classOf[Foo3])
@@ -130,13 +141,23 @@ object Test4 {
classOf[Foo7].getDeclaredConstructors foreach printSourceAnnotations
classOf[Foo8].getDeclaredFields foreach printSourceAnnotations
classOf[Foo8].getDeclaredMethods foreach printSourceAnnotations
+ classOf[Foo8].getDeclaredConstructors foreach printParamSourceAnnotations
classOf[Foo9].getDeclaredFields.sortWith((x, y) => x.toString < y.toString) foreach printSourceAnnotations
classOf[Foo9].getDeclaredMethods.sortWith((x, y) => x.toString < y.toString) foreach printSourceAnnotations
+ classOf[Foo10].getDeclaredFields.sortWith((x, y) => x.toString < y.toString) foreach printSourceAnnotations
+ classOf[Foo10].getDeclaredMethods.sortWith((x, y) => x.toString < y.toString) foreach printSourceAnnotations
+ classOf[Foo10].getDeclaredConstructors foreach printParamSourceAnnotations
+ classOf[Foo11].getDeclaredFields.sortWith((x, y) => x.toString < y.toString) foreach printSourceAnnotations
+ classOf[Foo11].getDeclaredMethods.sortWith((x, y) => x.toString < y.toString) foreach printSourceAnnotations
+ classOf[Foo11].getDeclaredConstructors foreach printParamSourceAnnotations
+ classOf[Foo12].getDeclaredFields.sortWith((x, y) => x.toString < y.toString) foreach printSourceAnnotations
+ classOf[Foo12].getDeclaredMethods.sortWith((x, y) => x.toString < y.toString) foreach printSourceAnnotations
+ classOf[Foo12].getDeclaredConstructors foreach printParamSourceAnnotations
}
}
object Test5 {
- import scala.reflect.BeanProperty
+ import scala.beans.BeanProperty
import java.lang.Integer
class Count {
@@ -160,6 +181,27 @@ object Test5 {
}
}
+object Test6 {
+ import scala.beans.BeanProperty
+ import scala.beans.BooleanBeanProperty
+ class C(@BeanProperty var text: String)
+ class D(@BooleanBeanProperty var prop: Boolean) {
+ @BeanProperty val m: Int = if (prop) 1 else 2
+ }
+
+ def run {
+ val c = new C("bob")
+ c.setText("dylan")
+ println(c.getText())
+ if (new D(true).isProp()) {
+ println(new D(false).getM())
+ }
+ }
+}
+
+// #3345
+class A3345(@volatile private var i:Int)
+
object Test {
def main(args: Array[String]) {
Test1.run
@@ -167,5 +209,6 @@ object Test {
Test3.run // requires the use of -target:jvm-1.5
Test4.run
Test5.run
+ Test6.run
}
}
diff --git a/test/files/jvm/backendBugUnapply.check b/test/files/jvm/backendBugUnapply.check
new file mode 100644
index 0000000000..9d1e7b29c2
--- /dev/null
+++ b/test/files/jvm/backendBugUnapply.check
@@ -0,0 +1,2 @@
+baz
+null
diff --git a/test/files/jvm/backendBugUnapply.scala b/test/files/jvm/backendBugUnapply.scala
new file mode 100644
index 0000000000..45ee6f7d4f
--- /dev/null
+++ b/test/files/jvm/backendBugUnapply.scala
@@ -0,0 +1,17 @@
+object Test {
+ import scala.xml.{Node,UnprefixedAttribute}
+
+ def domatch(x:Node) =
+ x match {
+ case Node("foo", UnprefixedAttribute("bar", z, _), _*) => z
+ case _ => null
+ }
+
+ def main(args: Array[String]): Unit = {
+ println(domatch(<foo bar="baz"><hi/></foo>))
+ println(domatch(<foo bingo="donkey"><hi/></foo>))
+ //
+ // assert(domatch(<foo bar="baz"><hi/></foo>).toString == "baz")
+ // assert(domatch(<foo bar="baz2"><hi/></foo>) == null)//, domatch(<foo bar="baz2"><hi/></foo>))
+ }
+}
diff --git a/test/files/jvm/bigints.check b/test/files/jvm/bigints.check
new file mode 100644
index 0000000000..7952a044df
--- /dev/null
+++ b/test/files/jvm/bigints.check
@@ -0,0 +1,9 @@
+int_add_bigint = (3,3)
+int_sub_bigint = (-1,-1)
+int_mul_bigint = (4,4)
+z <= 3 = true
+3 < z = false
+z <= 3 = true
+3 < z = false
+c > MAX_LONG = false
+c <= MAX_LONG = true
diff --git a/test/files/jvm/bigints.scala b/test/files/jvm/bigints.scala
index f4ca2d17a3..f0d05f8b71 100644
--- a/test/files/jvm/bigints.scala
+++ b/test/files/jvm/bigints.scala
@@ -1,41 +1,32 @@
-//############################################################################
-// BigInt, BigDecimal
-//############################################################################
-
-//############################################################################
-
-import testing.SUnit._
-
-/** Test the Scala implementation of class <code>scala.BigDecimal</code>.
+/** Test the Scala implementation of classes <code>scala.BigInt</code>
+* and <code>scala.BigDecimal</code>.
*
* @author Stephane Micheloud
*/
-object Test extends TestConsoleMain {
- def suite = new TestSuite(
- Test_BigInt,
- Test_BigDecimal
- )
+object Test {
+ def main(args: Array[String]) {
+ Test_BigInt.runTest()
+ Test_BigDecimal.runTest()
+ }
}
-object Test_BigInt extends TestCase("BigInt") with Assert {
- override def enableStackTrace = false
- override def runTest {
+object Test_BigInt {
+ def runTest() {
import BigInt._
val x: BigInt = 1
val y = x + 1
val z = 1 + y
- assertEquals("int_add_bigint", 1+y, y+1)
- assertEquals("int_sub_bigint", 1-y, -(y-1))
- assertEquals("int_mul_bigint", 2*x*y, y*x*2)
- assertTrue("z_<=_3", z <= 3)
- assertFalse("3_<_z", 3 < z)
+ println("int_add_bigint = " + (1+y, y+1))
+ println("int_sub_bigint = " + (1-y,-(y-1)))
+ println("int_mul_bigint = " + (2*x*y, y*x*2))
+ println("z <= 3 = " + (z <= 3))
+ println("3 < z = " + (3 < z))
}
}
-object Test_BigDecimal extends TestCase("BigDecimal") with Assert {
- override def enableStackTrace = false
- override def runTest {
+object Test_BigDecimal {
+ def runTest() {
import scala.BigDecimal, BigDecimal._
val xi: BigDecimal = 1
@@ -47,14 +38,14 @@ object Test_BigDecimal extends TestCase("BigDecimal") with Assert {
val x: BigDecimal = 1
val y = x + 1
val z = 1 + y
- assertTrue("z_<=_3", z <= 3)
- assertFalse("3_<_z", 3 < z)
+ println("z <= 3 = " + (z <= 3))
+ println("3 < z = " + (3 < z))
- val a: BigDecimal= Math.MAX_LONG
+ val a: BigDecimal= Long.MaxValue
val b: BigDecimal = 1
val c = a - b
- assertFalse("c_>_MAX_LONG", c > Math.MAX_LONG)
- assertTrue("c_<=_MAX_LONG", c <= Math.MAX_LONG)
+ println("c > MAX_LONG = " + (c > Long.MaxValue))
+ println("c <= MAX_LONG = " + (c <= Long.MaxValue))
}
}
diff --git a/test/files/jvm/bug560bis.scala b/test/files/jvm/bug560bis.scala
deleted file mode 100644
index 13bf4b1ae0..0000000000
--- a/test/files/jvm/bug560bis.scala
+++ /dev/null
@@ -1,21 +0,0 @@
-object Test {
-import scala.xml._;
-
- def bar(args: Seq[String]) = args match {
- case Seq(a,b,c,d @ _*) => Console.println("cool!")
- case _ => Console.println("bah")
- }
- def foo(args: List[String]) =
- Elem(null,"bla",Null, TopScope, (args map {x => Text(x)}):_*) match {
- case Elem(_,_,_,_,Text("1"),_*) =>
- Console.println("cool!")
- case _ =>
- Console.println("bah")
- }
-
- def main(args: Array[String]) = {
- val li = List("1","2","3","4")
- bar(li)
- foo(li)
- }
-}
diff --git a/test/files/jvm/console.scala b/test/files/jvm/console.scala
index b07765675c..75449416aa 100644
--- a/test/files/jvm/console.scala
+++ b/test/files/jvm/console.scala
@@ -1,6 +1,6 @@
/** Test scala.Console functionality. */
-object Test extends Application {
+object Test extends App {
import Console._
print(true)
@@ -9,6 +9,6 @@ object Test extends Application {
flush
println("..")
println(1)
- printf("Argument nr. %d has value %1.2f\n",
+ printf("Argument nr. %d has value %1.2f\n",
1, 10.0/3)
}
diff --git a/test/files/jvm/daemon-actor-termination.scala b/test/files/jvm/daemon-actor-termination.scala
index 8e64749b1c..6ddfc3139d 100644
--- a/test/files/jvm/daemon-actor-termination.scala
+++ b/test/files/jvm/daemon-actor-termination.scala
@@ -5,6 +5,7 @@ object Test {
class MyDaemon extends DaemonActor {
def act() {
+ try {
react {
case 'hello =>
println("MSG1")
@@ -14,6 +15,10 @@ object Test {
println("done")
}
}
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
}
}
@@ -21,8 +26,13 @@ object Test {
val daemon = new MyDaemon
daemon.start()
Actor.actor {
+ try {
daemon !? 'hello
println("MSG2")
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
}
}
}
diff --git a/test/files/jvm/deprecation/Defs.java b/test/files/jvm/deprecation/Defs.java
new file mode 100644
index 0000000000..52101c342a
--- /dev/null
+++ b/test/files/jvm/deprecation/Defs.java
@@ -0,0 +1,12 @@
+public class Defs {
+ /** @deprecated */
+ public int i = 1;
+
+ /** @deprecated */
+ public int bar() { return 0; }
+
+ /** @deprecated */
+ public class Inner {
+ public int buz() { return 0; }
+ }
+}
diff --git a/test/files/jvm/deprecation/Test_1.scala b/test/files/jvm/deprecation/Test_1.scala
new file mode 100644
index 0000000000..b68a40c94b
--- /dev/null
+++ b/test/files/jvm/deprecation/Test_1.scala
@@ -0,0 +1,17 @@
+class Test {
+ def test {
+ val d = new Defs
+ val u = d.i + 1
+ d.i = 2
+ val v = d.bar()
+ val i = new d.Inner
+ val w = i.buz()
+ }
+
+ @deprecated("no longer!", "") class Inner {
+ @deprecated("uncool", "") def f: Int = 1
+ @deprecated("this one as well!", "") var g = -1
+ }
+}
+
+object Test { def main(args: Array[String]) { } }
diff --git a/test/files/jvm/deprecation/Use_2.java b/test/files/jvm/deprecation/Use_2.java
new file mode 100644
index 0000000000..65da8a8fac
--- /dev/null
+++ b/test/files/jvm/deprecation/Use_2.java
@@ -0,0 +1,10 @@
+class Use_2 {
+ public int test() {
+ Test u = new Test();
+ Test.Inner a = u.new Inner();
+ int i = a.f();
+ int j = a.g();
+ a.g_$eq(5);
+ return i + j;
+ }
+} \ No newline at end of file
diff --git a/test/files/jvm/future-alarm.check b/test/files/jvm/future-alarm.check
new file mode 100644
index 0000000000..01a87d1c4c
--- /dev/null
+++ b/test/files/jvm/future-alarm.check
@@ -0,0 +1,20 @@
+OK
+OK
+OK
+OK
+OK
+OK
+OK
+OK
+OK
+OK
+OK
+OK
+OK
+OK
+OK
+OK
+OK
+OK
+OK
+OK
diff --git a/test/files/jvm/future-alarm.scala b/test/files/jvm/future-alarm.scala
new file mode 100644
index 0000000000..8ee902b5ea
--- /dev/null
+++ b/test/files/jvm/future-alarm.scala
@@ -0,0 +1,21 @@
+import scala.actors.Futures
+
+object Test {
+ def main(args: Array[String]) {
+ try {
+ for (i <- 1 to 100000) {
+ Futures.alarm(0)
+ if (i % 10000 == 0)
+ println("OK")
+ }
+ for (_ <- 1 to 10) {
+ val ft = Futures.alarm(100)
+ ft()
+ println("OK")
+ }
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
+ }
+}
diff --git a/test/files/run/bug216.check b/test/files/jvm/future-awaitall-zero.check
index d86bac9de5..d86bac9de5 100644
--- a/test/files/run/bug216.check
+++ b/test/files/jvm/future-awaitall-zero.check
diff --git a/test/files/jvm/future-awaitall-zero.scala b/test/files/jvm/future-awaitall-zero.scala
new file mode 100644
index 0000000000..cd6ba172cc
--- /dev/null
+++ b/test/files/jvm/future-awaitall-zero.scala
@@ -0,0 +1,22 @@
+import scala.actors.Futures._
+import scala.actors.Actor._
+
+object Test {
+ def main(args: Array[String]) {
+ try {
+ val ft1 = future { reactWithin(10000) {
+ case _ => println("FAIL")
+ } }
+
+ val ft2 = future { reactWithin(20000) {
+ case _ => println("FAIL")
+ } }
+
+ val res = awaitAll(0, ft1, ft2)
+ println("OK")
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
+ }
+}
diff --git a/test/files/jvm/future-termination.scala b/test/files/jvm/future-termination.scala
index c448a88aa7..f51642cb7a 100644
--- a/test/files/jvm/future-termination.scala
+++ b/test/files/jvm/future-termination.scala
@@ -1,14 +1,19 @@
-import scala.actors.Futures
-
-/* Test that unevaluated futures do not prevent program termination */
-
-object Test {
- def main(args: Array[String]) {
- val meaningOfLife = Futures.future {
- Thread.sleep(5000) // pretend this is a harder problem than it is
- println("I have the answer!")
- 42
+import scala.actors.Futures
+
+/* Test that unevaluated futures do not prevent program termination */
+
+object Test {
+ def main(args: Array[String]) {
+ try {
+ val meaningOfLife = Futures.future {
+ Thread.sleep(5000) // pretend this is a harder problem than it is
+ println("I have the answer!")
+ 42
+ }
+ println("I can't wait that long, bye.")
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
}
- println("I can't wait that long, bye.")
- }
+ }
}
diff --git a/test/files/jvm/genericNest.scala b/test/files/jvm/genericNest.scala
index c1b0210117..f82f198ffd 100644
--- a/test/files/jvm/genericNest.scala
+++ b/test/files/jvm/genericNest.scala
@@ -8,6 +8,6 @@ object ForceParse extends OuterTParams[AnyRef] {
var field: InnerClass = null
}
-object Test extends Application {
+object Test extends App {
ForceParse
}
diff --git a/test/files/jvm/inner.scala b/test/files/jvm/inner.scala
index 51e3909ef3..009d52e5bc 100644
--- a/test/files/jvm/inner.scala
+++ b/test/files/jvm/inner.scala
@@ -14,7 +14,7 @@ class A {
trait Itf {
def method1(x: Int): Int
-
+
trait Itf2 extends Itf {
def method2: Unit
}
@@ -53,8 +53,8 @@ class A {
}
object Scalatest {
- private val outputdir = System.getProperty("scalatest.output", "inner-jvm.obj")
- private val scalalib = System.getProperty("scalatest.lib", "")
+ private val outputdir = System.getProperty("partest.output", "inner.obj")
+ private val scalalib = System.getProperty("partest.lib", "")
private val classpath = outputdir + File.pathSeparator + scalalib
private val javabin = {
val jhome = new File(System.getProperty("java.home"))
@@ -71,15 +71,15 @@ object Scalatest {
val tmpfile = new FileWriter(tmpfilename)
tmpfile.write(src)
tmpfile.close
- exec(javac + " -d " + outputdir + " -classpath " + classpath + " " + tmpfilename)
+ exec(javac, "-d", outputdir, "-classpath", classpath, tmpfilename)
}
def java(cname: String) =
- exec(javacmd + " -cp " + classpath + " " + cname)
+ exec(javacmd, "-cp", classpath, cname)
/** Execute cmd, wait for the process to end and pipe it's output to stdout */
- private def exec(cmd: String) {
- val proc = Runtime.getRuntime().exec(cmd)
+ private def exec(args: String*) {
+ val proc = Runtime.getRuntime().exec(args.toArray)
val inp = new BufferedReader(new InputStreamReader(proc.getInputStream))
val errp = new BufferedReader(new InputStreamReader(proc.getErrorStream))
proc.waitFor()
diff --git a/test/files/jvm/interpreter.check b/test/files/jvm/interpreter.check
index e17cc15a0a..196a769a17 100644
--- a/test/files/jvm/interpreter.check
+++ b/test/files/jvm/interpreter.check
@@ -2,234 +2,374 @@ Type in expressions to have them evaluated.
Type :help for more information.
scala>
-scala>
-scala> res0: Int = 7
-scala> | | | | gcd: (x: Int,y: Int)Int
+scala> // basics
+
+scala> 3+4
+res0: Int = 7
-scala> five: Int = 5
+scala> def gcd(x: Int, y: Int): Int = {
+ if (x == 0) y
+ else if (y == 0) x
+ else gcd(y%x, x)
+}
+gcd: (x: Int, y: Int)Int
-scala> x: Int = 1
+scala> val five = gcd(15,35)
+five: Int = 5
-scala> x: Int = 2
+scala> var x = 1
+x: Int = 1
-scala> three: Int = 3
+scala> x = 2
+x: Int = 2
-scala> defined type alias anotherint
+scala> val three = x+1
+three: Int = 3
-scala> four: anotherint = 4
+scala> type anotherint = Int
+defined type alias anotherint
-scala> <console>:5: error: type mismatch;
- found : java.lang.String("hello")
+scala> val four: anotherint = 4
+four: anotherint = 4
+
+scala> val bogus: anotherint = "hello"
+<console>:8: error: type mismatch;
+ found : String("hello")
required: anotherint
+ (which expands to) Int
val bogus: anotherint = "hello"
^
-scala> defined trait PointlessTrait
+scala> trait PointlessTrait
+defined trait PointlessTrait
-scala> x: Int = 2
+scala> val (x,y) = (2,3)
+x: Int = 2
y: Int = 3
-scala> hello
+scala> println("hello")
+hello
scala>
-scala>
-scala> t1513: Array[Null] = Array(null)
-scala>
-scala> atom: scala.xml.Atom[Unit] = ()
+scala> // ticket #1513
-scala>
-scala> defined class S
+scala> val t1513 = Array(null)
+t1513: Array[Null] = Array(null)
-scala> fish: S = fish
+scala> // ambiguous toString problem from #547
-scala>
-scala> arr: Array[java.lang.String] = Array(What's, up, doc?)
+scala> val atom = new scala.xml.Atom()
+atom: scala.xml.Atom[Unit] = ()
-scala>
-scala> arrInt: Any = Array(1, 2, 3)
+scala> // overriding toString problem from #1404
-scala>
-scala> arrArrInt: Any = Array(Array(1, 2), Array(3, 4))
+scala> class S(override val toString : String)
+defined class S
-scala>
-scala>
-scala> defined class Foo
+scala> val fish = new S("fish")
+fish: S = fish
+
+scala> // Test that arrays pretty print nicely.
-scala> defined class Bar
+scala> val arr = Array("What's", "up", "doc?")
+arr: Array[String] = Array(What's, up, doc?)
-scala> foo2bar: (foo: Foo)Bar
+scala> // Test that arrays pretty print nicely, even when we give them type Any
-scala> bar: Bar = Bar(3)
+scala> val arrInt : Any = Array(1,2,3)
+arrInt: Any = Array(1, 2, 3)
+
+scala> // Test that nested arrays are pretty-printed correctly
+
+scala> val arrArrInt : Any = Array(Array(1, 2), Array(3, 4))
+arrArrInt: Any = Array(Array(1, 2), Array(3, 4))
scala>
+
+scala> // implicit conversions
+
+scala> case class Foo(n: Int)
+defined class Foo
+
+scala> case class Bar(n: Int)
+defined class Bar
+
+scala> implicit def foo2bar(foo: Foo) = Bar(foo.n)
+foo2bar: (foo: Foo)Bar
+
+scala> val bar: Bar = Foo(3)
+bar: Bar = Bar(3)
+
scala>
+
+scala> // importing from a previous result
+
scala> import bar._
+import bar._
-scala> m: Int = 3
+scala> val m = n
+m: Int = 3
scala>
-scala>
-scala> one: Int = 1
-scala> one: Int = 1
+scala> // stressing the imports mechanism
-scala> one: Int = 1
+scala> val one = 1
+one: Int = 1
-scala> one: Int = 1
+scala> val one = 1
+one: Int = 1
-scala> one: Int = 1
+scala> val one = 1
+one: Int = 1
-scala> one: Int = 1
+scala> val one = 1
+one: Int = 1
-scala> one: Int = 1
+scala> val one = 1
+one: Int = 1
-scala> one: Int = 1
+scala> val one = 1
+one: Int = 1
-scala> one: Int = 1
+scala> val one = 1
+one: Int = 1
-scala> one: Int = 1
+scala> val one = 1
+one: Int = 1
-scala> one: Int = 1
+scala> val one = 1
+one: Int = 1
-scala> one: Int = 1
+scala> val one = 1
+one: Int = 1
-scala> one: Int = 1
+scala> val one = 1
+one: Int = 1
-scala> one: Int = 1
+scala> val one = 1
+one: Int = 1
-scala> one: Int = 1
+scala> val one = 1
+one: Int = 1
-scala> one: Int = 1
+scala> val one = 1
+one: Int = 1
-scala> one: Int = 1
+scala> val one = 1
+one: Int = 1
-scala> one: Int = 1
+scala> val one = 1
+one: Int = 1
-scala> one: Int = 1
+scala> val one = 1
+one: Int = 1
-scala> one: Int = 1
+scala> val one = 1
+one: Int = 1
+
+scala> val one = 1
+one: Int = 1
+
+scala> val one = 1
+one: Int = 1
scala>
+
scala>
-scala> x1: Int = 1
-scala> x2: Int = 1
+scala> val x1 = 1
+x1: Int = 1
-scala> x3: Int = 1
+scala> val x2 = 1
+x2: Int = 1
-scala> x4: Int = 1
+scala> val x3 = 1
+x3: Int = 1
-scala> x5: Int = 1
+scala> val x4 = 1
+x4: Int = 1
-scala> x6: Int = 1
+scala> val x5 = 1
+x5: Int = 1
-scala> x7: Int = 1
+scala> val x6 = 1
+x6: Int = 1
-scala> x8: Int = 1
+scala> val x7 = 1
+x7: Int = 1
-scala> x9: Int = 1
+scala> val x8 = 1
+x8: Int = 1
-scala> x10: Int = 1
+scala> val x9 = 1
+x9: Int = 1
-scala> x11: Int = 1
+scala> val x10 = 1
+x10: Int = 1
-scala> x12: Int = 1
+scala> val x11 = 1
+x11: Int = 1
-scala> x13: Int = 1
+scala> val x12 = 1
+x12: Int = 1
-scala> x14: Int = 1
+scala> val x13 = 1
+x13: Int = 1
-scala> x15: Int = 1
+scala> val x14 = 1
+x14: Int = 1
-scala> x16: Int = 1
+scala> val x15 = 1
+x15: Int = 1
-scala> x17: Int = 1
+scala> val x16 = 1
+x16: Int = 1
-scala> x18: Int = 1
+scala> val x17 = 1
+x17: Int = 1
-scala> x19: Int = 1
+scala> val x18 = 1
+x18: Int = 1
-scala> x20: Int = 1
+scala> val x19 = 1
+x19: Int = 1
-scala>
-scala> two: Int = 2
+scala> val x20 = 1
+x20: Int = 1
scala>
+
+scala> val two = one + x5
+two: Int = 2
+
scala>
-scala>
-scala> xs: Array[_] = Array(1, 2)
-scala> res2: Int = 2
+scala> // handling generic wildcard arrays (#2386)
-scala> res3: Any = 1
+scala> // It's put here because type feedback is an important part of it.
-scala> res4: Array[_] = Array(2)
+scala> val xs: Array[_] = Array(1, 2)
+xs: Array[_] = Array(1, 2)
-scala> res5: Array[java.lang.String] = Array(abc, abc)
+scala> xs.size
+res2: Int = 2
-scala> res6: scala.collection.mutable.GenericArray[_] = GenericArray(1, 2)
+scala> xs.head
+res3: Any = 1
-scala> res7: Array[(_$1, _$1)] forSome { type _$1 } = Array((1,1), (2,2))
+scala> xs filter (_ == 2)
+res4: Array[_] = Array(2)
+
+scala> xs map (_ => "abc")
+res5: Array[String] = Array(abc, abc)
+
+scala> xs map (x => x)
+res6: scala.collection.mutable.ArraySeq[_] = ArraySeq(1, 2)
+
+scala> xs map (x => (x, x))
+res7: Array[(_$1, _$1)] forSome { type _$1 } = Array((1,1), (2,2))
scala>
-scala>
-scala>
-scala> <console>:1: error: '=' expected but '=>' found.
+
+scala> // interior syntax errors should *not* go into multi-line input mode.
+
+scala> // both of the following should abort immediately:
+
+scala> def x => y => z
+<console>:1: error: '=' expected but '=>' found.
def x => y => z
^
-scala> <console>:1: error: expected start of definition
+scala> [1,2,3]
+<console>:1: error: illegal start of definition
[1,2,3]
^
scala>
+
scala>
-scala>
-scala> | | | | res8: scala.xml.Elem =
+
+scala> // multi-line XML
+
+scala> <a>
+<b
+ c="c"
+ d="dd"
+/></a>
+res8: scala.xml.Elem =
<a>
- <b d="dd" c="c"></b></a>
+<b c="c" d="dd"></b></a>
scala>
+
scala>
-scala> | | | |
-scala>
-scala>
-scala>
-scala> | | | res9: java.lang.String =
- hello
- there
-
+scala> /*
+ /*
+ multi-line comment
+ */
+*/
scala>
-scala> | | You typed two blank lines. Starting a new command.
scala>
-scala> match: Int
-scala> x: Int = 1
+scala> // multi-line string
+
+scala> """
+hello
+there
+"""
+res9: String =
+"
+hello
+there
+"
scala>
+
+scala> (1 + // give up early by typing two blank lines
+
+
+You typed two blank lines. Starting a new command.
+
+scala> // defining and using quoted names should work (ticket #323)
+
+scala> def `match` = 1
+match: Int
+
+scala> val x = `match`
+x: Int = 1
+
scala>
-scala> defined class Exp
+
+scala> // multiple classes defined on one line
+
+scala> sealed class Exp; class Fact extends Exp; class Term extends Exp
+defined class Exp
defined class Fact
defined class Term
-scala> | | <console>:15: warning: match is not exhaustive!
-missing combination Term
+scala> def f(e: Exp) = e match { // non-exhaustive warning here
+ case _:Fact => 3
+}
+<console>:18: warning: match is not exhaustive!
missing combination Exp
+missing combination Term
def f(e: Exp) = e match { // non-exhaustive warning here
^
f: (e: Exp)Int
scala>
+
scala>
plusOne: (x: Int)Int
res0: Int = 6
-res0: java.lang.String = after reset
-<console>:5: error: not found: value plusOne
- plusOne(5) // should be undefined now
- ^
+res0: String = after reset
+<console>:8: error: not found: value plusOne
+ plusOne(5) // should be undefined now
+ ^
diff --git a/test/files/jvm/interpreter.scala b/test/files/jvm/interpreter.scala
index 2c2756828b..f0bc8b5818 100644
--- a/test/files/jvm/interpreter.scala
+++ b/test/files/jvm/interpreter.scala
@@ -1,9 +1,8 @@
import scala.tools.nsc._
-import java.io.{BufferedReader, StringReader, PrintWriter,
- Writer, OutputStreamWriter}
+import scala.tools.partest.ReplTest
-object Test {
- val testCodeString = <code>
+object Test extends ReplTest {
+ def code = <code>
// basics
3+4
def gcd(x: Int, y: Int): Int = {{
@@ -30,7 +29,7 @@ val atom = new scala.xml.Atom()
class S(override val toString : String)
val fish = new S("fish")
// Test that arrays pretty print nicely.
-val arr = Array("What's", "up", "doc?")
+val arr = Array("What's", "up", "doc?")
// Test that arrays pretty print nicely, even when we give them type Any
val arrInt : Any = Array(1,2,3)
// Test that nested arrays are pretty-printed correctly
@@ -133,8 +132,8 @@ there
// defining and using quoted names should work (ticket #323)
-def `match` = 1
-val x = `match`
+def `match` = 1
+val x = `match`
// multiple classes defined on one line
sealed class Exp; class Fact extends Exp; class Term extends Exp
@@ -144,43 +143,9 @@ def f(e: Exp) = e match {{ // non-exhaustive warning here
</code>.text
- /** A writer that skips the first line of text. The first
- * line of interpreter output is skipped because it includes
- * a version number. */
- class Skip1Writer(writer: Writer) extends Writer {
- var seenNL = false
-
- def write(cbuf: Array[Char], off: Int, len: Int) {
- if (seenNL)
- writer.write(cbuf, off, len)
- else {
- val slice : Array[Char] = cbuf.slice(off, off+len)
- val i = slice.indexOf('\n')
- if (i >= 0) {
- seenNL = true
- writer.write(slice, i+1, slice.length-(i+1))
- } else {
- // skip it
- }
- }
- }
-
- def close() { writer.close() }
- def flush() { writer.flush() }
- }
-
-
- def main(args: Array[String]) {
- val input = new BufferedReader(new StringReader(testCodeString))
- val output = new PrintWriter(
- new Skip1Writer(new OutputStreamWriter(Console.out)))
- val repl = new InterpreterLoop(input, output)
+ def appendix() = {
val settings = new Settings
- // when running that compiler, give it a scala-library to the classpath
- settings.classpath.value = System.getProperty("java.class.path")
- repl.main(settings)
- println()
-
+ settings.classpath.value = sys.props("java.class.path")
val interp = new Interpreter(settings)
interp.interpret("def plusOne(x: Int) = x + 1")
interp.interpret("plusOne(5)")
@@ -188,4 +153,6 @@ def f(e: Exp) = e match {{ // non-exhaustive warning here
interp.interpret("\"after reset\"")
interp.interpret("plusOne(5) // should be undefined now")
}
+
+ appendix()
}
diff --git a/test/disabled/jvm/libnatives-32.so b/test/files/jvm/libnatives-32.so
index ccbcdd646f..ccbcdd646f 100644
--- a/test/disabled/jvm/libnatives-32.so
+++ b/test/files/jvm/libnatives-32.so
Binary files differ
diff --git a/test/disabled/jvm/libnatives-64.so b/test/files/jvm/libnatives-64.so
index 8cc6152057..8cc6152057 100644
--- a/test/disabled/jvm/libnatives-64.so
+++ b/test/files/jvm/libnatives-64.so
Binary files differ
diff --git a/test/files/jvm/libnatives.jnilib b/test/files/jvm/libnatives.jnilib
new file mode 100755
index 0000000000..1fc104883a
--- /dev/null
+++ b/test/files/jvm/libnatives.jnilib
Binary files differ
diff --git a/test/files/jvm/manifests.check b/test/files/jvm/manifests.check
index 69ab066b87..54f504b929 100644
--- a/test/files/jvm/manifests.check
+++ b/test/files/jvm/manifests.check
@@ -23,15 +23,13 @@ x=(1,2), m=scala.Tuple2[Int, Int]
x=(abc,xyz), m=scala.Tuple2[java.lang.String, java.lang.String]
x=('abc,'xyz), m=scala.Tuple2[scala.Symbol, scala.Symbol]
-x=Test$, m=Test$
-x=scala.collection.immutable.List$, m=scala.collection.immutable.List$
x=Foo, m=Foo[Int]
x=Foo, m=Foo[scala.collection.immutable.List[Int]]
x=Foo, m=Foo[Foo[Int]]
x=Foo, m=Foo[scala.collection.immutable.List[Foo[Int]]]
-x=Test1$$anon$1, m=Test1$$anon$1
+x=Test1$$anon$1, m=Object with Bar[java.lang.String]
()=()
true=true
diff --git a/test/files/jvm/manifests.scala b/test/files/jvm/manifests.scala
index bb8843f834..6bbea4d052 100644
--- a/test/files/jvm/manifests.scala
+++ b/test/files/jvm/manifests.scala
@@ -1,4 +1,4 @@
-object Test extends Application {
+object Test extends App {
Test1
Test2
//Test3 // Java 1.5+ only
@@ -38,8 +38,11 @@ object Test1 extends TestUtil {
print(('abc, 'xyz))
println()
- print(Test)
- print(List)
+ // Disabled: should these work? changing the inference for objects from
+ // "object Test" to "Test.type" drags in a singleton manifest which for
+ // some reason leads to serialization failure.
+ // print(Test)
+ // print(List)
println()
print(new Foo(2))
@@ -67,7 +70,7 @@ object Test2 {
println()
def loadArray[T](x: Array[Byte])(implicit m: reflect.Manifest[Array[T]]) =
- load[Array[T]](x)(m).deepToString
+ load[Array[T]](x)(m).deep.toString
println("Array()="+loadArray[Int](dump(Array(): Array[Int])))
println("Array(true)="+loadArray[Boolean](dump(Array(true))))
println("Array(a)="+loadArray[Char](dump(Array('a'))))
diff --git a/test/files/jvm/methvsfield.java b/test/files/jvm/methvsfield.java
index dadc98669a..c1b2b87b48 100644
--- a/test/files/jvm/methvsfield.java
+++ b/test/files/jvm/methvsfield.java
@@ -1,11 +1,11 @@
// This should be compiled with javac and saved
// in ../lib/methvsfield.jar .
-class MethVsField
+class MethVsField
{
int three = 3;
- int three()
- {
+ int three()
+ {
return 3;
}
}
diff --git a/test/files/jvm/methvsfield.scala b/test/files/jvm/methvsfield.scala
index e9795ec6a8..9b7c56591c 100644
--- a/test/files/jvm/methvsfield.scala
+++ b/test/files/jvm/methvsfield.scala
@@ -1,4 +1,4 @@
// bug #1062
-object Test extends Application {
+object Test extends App {
println((new MethVsField).three)
}
diff --git a/test/disabled/jvm/mkLibNatives.bat b/test/files/jvm/mkLibNatives.bat
index 100246af79..e11b6ee21c 100755
--- a/test/disabled/jvm/mkLibNatives.bat
+++ b/test/files/jvm/mkLibNatives.bat
@@ -4,6 +4,9 @@ rem ##########################################################################
rem # Author : Stephane Micheloud
rem ##########################################################################
+rem # For building the -64.dll, you need: Visual C++ Express, Microsoft SDK (to
+rem # get the 64bit compiler / libraries), adapt this script.
+
rem ##########################################################################
rem # variables
diff --git a/test/disabled/jvm/mkLibNatives.sh b/test/files/jvm/mkLibNatives.sh
index ed80c24c3e..537187eedd 100755
--- a/test/disabled/jvm/mkLibNatives.sh
+++ b/test/files/jvm/mkLibNatives.sh
@@ -37,7 +37,7 @@ JAVAH_OPTIONS="-jni -force -classpath ${CLASS_DIR} -o ${OBJ_NAME}.h"
CC=gcc
if $darwin; then
- CC_OPTIONS="-c -arch ppc -arch i386"
+ CC_OPTIONS="-c -arch ppc -arch i386 -arch x86_64"
CC_INCLUDES="-I/System/Library/Frameworks/JavaVM.framework/Headers"
LNK_OPTIONS="-dynamiclib -framework JavaVM"
FULL_LIB_NAME=${LIB_NAME}.jnilib
diff --git a/test/disabled/jvm/natives-32.dll b/test/files/jvm/natives-32.dll
index a06c1da3e3..a06c1da3e3 100644
--- a/test/disabled/jvm/natives-32.dll
+++ b/test/files/jvm/natives-32.dll
Binary files differ
diff --git a/test/files/jvm/natives-64.dll b/test/files/jvm/natives-64.dll
new file mode 100644
index 0000000000..f892f088f5
--- /dev/null
+++ b/test/files/jvm/natives-64.dll
Binary files differ
diff --git a/test/disabled/jvm/natives.c b/test/files/jvm/natives.c
index 7b6d7b5ba5..7b6d7b5ba5 100644
--- a/test/disabled/jvm/natives.c
+++ b/test/files/jvm/natives.c
diff --git a/test/disabled/jvm/natives.check b/test/files/jvm/natives.check
index 2265459198..2265459198 100644
--- a/test/disabled/jvm/natives.check
+++ b/test/files/jvm/natives.check
diff --git a/test/disabled/jvm/natives.h b/test/files/jvm/natives.h
index 0d360d3654..0d360d3654 100644
--- a/test/disabled/jvm/natives.h
+++ b/test/files/jvm/natives.h
diff --git a/test/disabled/jvm/natives.scala b/test/files/jvm/natives.scala
index 14ee4e1c1b..ba868dc85e 100644
--- a/test/disabled/jvm/natives.scala
+++ b/test/files/jvm/natives.scala
@@ -1,16 +1,16 @@
object Test {
//println("java.library.path=" + System.getProperty("java.library.path"))
-
+
val sysWordSize = System.getProperty("sun.arch.data.model", "32")
val sysType = System.getProperty("os.name")
-
+
val libName =
if (sysType == "Mac OS X")
"natives"
else
"natives-" + sysWordSize
-
+
System.loadLibrary(libName)
@native
diff --git a/test/files/jvm/nest.scala b/test/files/jvm/nest.scala
index 3ab62484fa..45745f5700 100644
--- a/test/files/jvm/nest.scala
+++ b/test/files/jvm/nest.scala
@@ -5,7 +5,7 @@
/** found in nest.jar, compiled from nest.java */
import nestpkg._;
-object Test extends Application {
+object Test extends App {
val x = nest.best.rest.test
Console.println(x.inc(1))
diff --git a/test/files/jvm/outerEnum.scala b/test/files/jvm/outerEnum.scala
index 18794b7dbe..278cef3141 100644
--- a/test/files/jvm/outerEnum.scala
+++ b/test/files/jvm/outerEnum.scala
@@ -1,6 +1,6 @@
import enums._
-object Test extends Application {
+object Test extends App {
def foo {
val res: OuterEnum.Foo = OuterEnum.Foo.Bar
println(res)
diff --git a/test/files/jvm/protectedacc.scala b/test/files/jvm/protectedacc.scala
index c3b07a0a7e..f213e0da19 100644
--- a/test/files/jvm/protectedacc.scala
+++ b/test/files/jvm/protectedacc.scala
@@ -16,7 +16,7 @@ object Test {
val ji = new p.b.JavaInteraction(Array('a', 'b', 'c'));
(new ji.Inner).m;
-
+
(new p.b.OuterObj.Inner).m
}
}
@@ -36,13 +36,13 @@ package p {
def getA: this.type = this;
}
-
+
/** Test type members */
trait HighlighterXXX {
type Node;
protected def highlight(node : Node) : Unit;
}
-
+
/** Test type parameters */
abstract class PolyA[a] {
protected def m(x: a): Unit;
@@ -82,7 +82,7 @@ package p {
Console.println("meth1(1) = " + meth1(1));
Console.println("meth1(1.0) = " + meth1(1.0));
// test accesses from closures
- for (val x <- 1 until 3)
+ for (x <- 1 until 3)
Console.println("meth2(1)(1) = " + meth2(1)("prefix: "));
Console.println("meth3 = " + meth3.getClass);
@@ -119,22 +119,22 @@ package p {
val inc = meth2(1)_;
Console.println("100 = " + inc("10"));
-
+
getA.x;
}
}
}
-
+
trait ScalaAutoEditXXX extends HighlighterXXX {
- trait NodeImpl {
+ trait NodeImpl {
def self : Node;
highlight(self);
}
}
-
+
abstract class X[T] extends PolyA[T] {
- trait Inner extends B {
+ trait Inner extends B {
def self: T;
def self2: Node;
def getB: Inner;
diff --git a/test/files/jvm/reactor-exceptionOnSend.scala b/test/files/jvm/reactor-exceptionOnSend.scala
index 3684943b9b..3d9a042131 100644
--- a/test/files/jvm/reactor-exceptionOnSend.scala
+++ b/test/files/jvm/reactor-exceptionOnSend.scala
@@ -3,7 +3,7 @@ import scala.actors.Actor._
case class MyException(text: String) extends Exception(text)
-object A extends Reactor {
+object A extends Reactor[Any] {
override def exceptionHandler = {
case MyException(text) =>
println("receiver handles exception")
@@ -19,6 +19,7 @@ object A extends Reactor {
var state = 0
def act() {
+ try {
loop {
react {
case 'hello if guard() =>
@@ -26,14 +27,24 @@ object A extends Reactor {
exit()
}
}
+ } catch {
+ case e: Throwable if (!e.isInstanceOf[scala.util.control.ControlThrowable] &&
+ !e.isInstanceOf[MyException]) =>
+ e.printStackTrace()
+ }
}
}
-object B extends Reactor {
+object B extends Reactor[Any] {
def act() {
+ try {
A.start()
A ! 'hello
A ! 'hello
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
}
}
diff --git a/test/files/jvm/reactor-producer-consumer.check b/test/files/jvm/reactor-producer-consumer.check
new file mode 100644
index 0000000000..d971cea19e
--- /dev/null
+++ b/test/files/jvm/reactor-producer-consumer.check
@@ -0,0 +1,10 @@
+42
+42
+42
+42
+42
+42
+42
+42
+42
+42
diff --git a/test/files/jvm/reactor-producer-consumer.scala b/test/files/jvm/reactor-producer-consumer.scala
new file mode 100644
index 0000000000..8a6b17c3ad
--- /dev/null
+++ b/test/files/jvm/reactor-producer-consumer.scala
@@ -0,0 +1,95 @@
+import scala.actors.Reactor
+
+object Test {
+ case class Stop()
+ case class Get(from: Reactor[Any])
+ case class Put(x: Int)
+
+ class UnboundedBuffer extends Reactor[Any] {
+ def act() {
+ try {
+ react {
+ case Stop() =>
+ case Get(from) =>
+ val consumer = from
+ react {
+ case msg @ Put(x) =>
+ consumer ! x
+ act()
+ }
+ }
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
+ }
+ }
+
+ class Producer(buf: UnboundedBuffer, n: Int, delay: Long, parent: Reactor[Any]) extends Reactor[Any] {
+ def act() {
+ try {
+ var i = 0
+ while (i < n) {
+ i += 1
+ if (delay > 0) Thread.sleep(delay)
+ buf ! Put(42)
+ }
+ parent ! Stop()
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
+ }
+ }
+
+ class Consumer(buf: UnboundedBuffer, n: Int, delay: Long, parent: Reactor[Any]) extends Reactor[Any] {
+ val step = n / 10
+ var i = 0
+ def act() {
+ try {
+ if (i < n) {
+ i += 1
+ if (delay > 0) Thread.sleep(delay)
+ buf ! Get(this)
+ react {
+ case res =>
+ if (i % step == 0)
+ println(res)
+ act()
+ }
+ } else {
+ parent ! Stop()
+ }
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
+ }
+ }
+
+ def main(args: Array[String]) {
+ val parent = new Reactor[Any] {
+ def act() {
+ try {
+ val buffer = new UnboundedBuffer
+ buffer.start()
+ val producer = new Producer(buffer, 10000, 0, this)
+ producer.start()
+ val consumer = new Consumer(buffer, 10000, 0, this)
+ consumer.start()
+ react {
+ case Stop() =>
+ react {
+ case Stop() =>
+ buffer ! Stop()
+ }
+ }
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
+ }
+ }
+ parent.start()
+ }
+}
diff --git a/test/files/jvm/reactor.scala b/test/files/jvm/reactor.scala
index 8985f90569..dbc9a6bdda 100644
--- a/test/files/jvm/reactor.scala
+++ b/test/files/jvm/reactor.scala
@@ -1,13 +1,12 @@
import scala.actors.Reactor
-import scala.actors.Actor._
-case class Ping(from: Reactor)
+case class Ping(from: Reactor[Any])
case object Pong
case object Stop
/**
- * Ping pong example for OutputChannelActor.
+ * Ping pong example for Reactor.
*
* @author Philipp Haller
*/
@@ -20,8 +19,9 @@ object Test {
}
}
-class PingActor(count: Int, pong: Reactor) extends Reactor {
+class PingActor(count: Int, pong: Reactor[Any]) extends Reactor[Any] {
def act() {
+ try {
var pingsLeft = count - 1
pong ! Ping(this)
loop {
@@ -39,11 +39,16 @@ class PingActor(count: Int, pong: Reactor) extends Reactor {
}
}
}
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
}
}
-class PongActor extends Reactor {
+class PongActor extends Reactor[Any] {
def act() {
+ try {
var pongCount = 0
loop {
react {
@@ -57,5 +62,9 @@ class PongActor extends Reactor {
exit()
}
}
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
}
}
diff --git a/test/files/jvm/replyablereactor.scala b/test/files/jvm/replyablereactor.scala
index 368d172e3f..e1fabc98da 100644
--- a/test/files/jvm/replyablereactor.scala
+++ b/test/files/jvm/replyablereactor.scala
@@ -1,8 +1,8 @@
-import scala.actors._
-import scala.actors.Actor._
+import scala.actors.ReplyReactor
class MyActor extends ReplyReactor {
def act() {
+ try {
loop {
react {
case 'hello =>
@@ -11,6 +11,10 @@ class MyActor extends ReplyReactor {
exit()
}
}
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
}
}
@@ -19,8 +23,9 @@ object Test {
val a = new MyActor
a.start()
- val b = new Reactor {
+ val b = new ReplyReactor {
def act() {
+ try {
react {
case r: MyActor =>
var i = 0
@@ -38,6 +43,10 @@ object Test {
}
}
}
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
}
}
b.start()
diff --git a/test/files/jvm/replyablereactor2.scala b/test/files/jvm/replyablereactor2.scala
index 22622274dd..da9e0e269e 100644
--- a/test/files/jvm/replyablereactor2.scala
+++ b/test/files/jvm/replyablereactor2.scala
@@ -3,6 +3,7 @@ import scala.actors.Actor._
class MyActor extends ReplyReactor {
def act() {
+ try {
loop {
react {
case 'hello =>
@@ -11,6 +12,10 @@ class MyActor extends ReplyReactor {
exit()
}
}
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
}
}
@@ -19,8 +24,9 @@ object Test {
val a = new MyActor
a.start()
- val b = new Reactor {
+ val b = new Reactor[Any] {
def act() {
+ try {
react {
case r: MyActor =>
var i = 0
@@ -36,6 +42,10 @@ object Test {
}
}
}
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
}
}
b.start()
diff --git a/test/files/jvm/replyablereactor3.scala b/test/files/jvm/replyablereactor3.scala
index 676ffe98e6..2c26b8a176 100644
--- a/test/files/jvm/replyablereactor3.scala
+++ b/test/files/jvm/replyablereactor3.scala
@@ -3,6 +3,7 @@ import scala.actors.Actor._
class MyActor extends ReplyReactor {
def act() {
+ try {
loop {
react {
case 'hello =>
@@ -11,6 +12,10 @@ class MyActor extends ReplyReactor {
exit()
}
}
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
}
}
@@ -19,8 +24,9 @@ object Test {
val a = new MyActor
a.start()
- val b = new Reactor {
+ val b = new Reactor[Any] {
def act() {
+ try {
react {
case r: MyActor =>
var i = 0
@@ -35,6 +41,10 @@ object Test {
}
}
}
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
}
}
b.start()
diff --git a/test/files/jvm/replyablereactor4.scala b/test/files/jvm/replyablereactor4.scala
index d61fb64287..8776cf63f0 100644
--- a/test/files/jvm/replyablereactor4.scala
+++ b/test/files/jvm/replyablereactor4.scala
@@ -3,6 +3,7 @@ import scala.actors.Actor._
class MyActor extends ReplyReactor {
def act() {
+ try {
loop {
react {
case 'hello =>
@@ -11,6 +12,10 @@ class MyActor extends ReplyReactor {
exit()
}
}
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
}
}
@@ -19,22 +24,27 @@ object Test {
val a = new MyActor
a.start()
- val b = new Reactor {
+ val b = new Reactor[Any] {
def act() {
+ try {
react {
case r: MyActor =>
var i = 0
loop {
i += 1
val msg = r !? (500, 'hello)
- if (i % 10000 == 0)
+ if (i % 200000 == 0)
println(msg)
- if (i >= 50000) {
+ if (i >= 1000000) {
r ! 'stop
exit()
}
}
}
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
}
}
b.start()
diff --git a/test/files/jvm/replyreactor-react-sender.scala b/test/files/jvm/replyreactor-react-sender.scala
index 1127dfd0a5..c9884295f6 100644
--- a/test/files/jvm/replyreactor-react-sender.scala
+++ b/test/files/jvm/replyreactor-react-sender.scala
@@ -10,6 +10,7 @@ object Test {
val a = new ReplyReactor {
def act() {
+ try {
var i = 0
loopWhile (i < NUM) {
i += 1
@@ -20,12 +21,17 @@ object Test {
} andThen {
b ! 'ok
}
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
}
}
a.start()
b = new ReplyReactor {
def act() {
+ try {
for (_ <- 0 until NUM)
a ! 'hello
react {
@@ -33,6 +39,10 @@ object Test {
case 'ok => println("OK")
case other => println(other)
}
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
}
}
b.start()
diff --git a/test/files/jvm/replyreactor.scala b/test/files/jvm/replyreactor.scala
index 0f452dbc7b..0cecf29ec7 100644
--- a/test/files/jvm/replyreactor.scala
+++ b/test/files/jvm/replyreactor.scala
@@ -1,27 +1,37 @@
-import scala.actors.{Reactor, ReplyReactor}
+import scala.actors.ReplyReactor
object Test {
def main(args: Array[String]) {
val a = new ReplyReactor {
def act() {
+ try {
react {
case 'hello =>
sender ! 'hello
}
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
}
}
a.start()
- val b = new Reactor {
+ val b = new ReplyReactor {
def act() {
+ try {
react {
- case r: Reactor =>
+ case r: ReplyReactor =>
r ! 'hello
react {
case any =>
println(any)
}
}
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
}
}
b.start()
diff --git a/test/files/jvm/scheduler-adapter.scala b/test/files/jvm/scheduler-adapter.scala
index 79c901f91e..d6a8a446a0 100644
--- a/test/files/jvm/scheduler-adapter.scala
+++ b/test/files/jvm/scheduler-adapter.scala
@@ -7,22 +7,32 @@ trait AdaptedActor extends Actor {
object One extends AdaptedActor {
def act() {
+ try {
Two.start()
Two ! 'MsgForTwo
react {
case 'MsgForOne =>
println("One: received msg")
}
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
}
}
object Two extends AdaptedActor {
def act() {
+ try {
react {
case 'MsgForTwo =>
println("Two: received msg")
One ! 'MsgForOne
}
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
}
}
diff --git a/test/files/jvm/serialization.check b/test/files/jvm/serialization.check
index da11d7c7f0..8704bcc643 100644
--- a/test/files/jvm/serialization.check
+++ b/test/files/jvm/serialization.check
@@ -1,126 +1,208 @@
-x0 = List(1, 2, 3)
-y0 = List(1, 2, 3)
-x0 eq y0: false - y0 eq x0: false
-x0 equals y0: true - y0 equals x0: true
+a1 = Array[1,2,3]
+_a1 = Array[1,2,3]
+arrayEquals(a1, _a1): true
-x1 = List()
-y1 = List()
-x1 eq y1: true - y1 eq x1: true
-
-x2 = None
-y2 = None
-x2 eq y2: true - y2 eq x2: true
-
-x3 = Array[1,2,3]
-y3 = Array[1,2,3]
-arrayEquals(x3, y3): true
-
-x4 = <na>
-y4 = <na>
-x4(2): 4 - y4(2): 4
-
-x5 = 'hello
-y5 = 'hello
-x5 eq y5: true - y5 eq x5: true
-x5 equals y5: true - y5 equals x5: true
-
-x6 = (BannerLimit,12345)
-y6 = (BannerLimit,12345)
-x6 eq y6: false - y6 eq x6: false
-x6 equals y6: true - y6 equals x6: true
+e1 = Left(1)
+_e1 = Left(1)
+e1 eq _e1: false, _e1 eq e1: false
+e1 equals _e1: true, _e1 equals e1: true
x7 = RoundingMode
y7 = RoundingMode
-x7 eq y7: true - y7 eq x7: true
-x7 equals y7: true - y7 equals x7: true
+x7 eq y7: true, y7 eq x7: true
+x7 equals y7: true, y7 equals x7: true
x8 = WeekDay
y8 = WeekDay
-x8 eq y8: true - y8 eq x8: true
-x8 equals y8: true - y8 equals x8: true
+x8 eq y8: true, y8 eq x8: true
+x8 equals y8: true, y8 equals x8: true
x9 = UP
y9 = UP
-x9 eq y9: true - y9 eq x9: true
-x9 equals y9: true - y9 equals x9: true
+x9 eq y9: true, y9 eq x9: true
+x9 equals y9: true, y9 equals x9: true
x10 = Monday
y10 = Monday
-x10 eq y10: true - y10 eq x10: true
-x10 equals y10: true - y10 equals x10: true
+x10 eq y10: true, y10 eq x10: true
+x10 equals y10: true, y10 equals x10: true
+
+x9 eq x10: false, x10 eq x9: false
+x9 equals x10: false, x10 equals x9: false
+x9 eq y10: false, y10 eq x9: false
+x9 equals y10: false, y10 equals x9: false
+
+f1 = <na>
+_f1 = <na>
+f1(2): 4, _f1(2): 4
+
+xs0 = List(1, 2, 3)
+_xs0 = List(1, 2, 3)
+xs0 eq _xs0: false, _xs0 eq xs0: false
+xs0 equals _xs0: true, _xs0 equals xs0: true
+
+xs1 = List()
+_xs1 = List()
+xs1 eq _xs1: true, _xs1 eq xs1: true
+
+o1 = None
+_o1 = None
+o1 eq _o1: true, _o1 eq o1: true
+
+o2 = Some(1)
+_o2 = Some(1)
+o2 eq _o2: false, _o2 eq o2: false
+o2 equals _o2: true, _o2 equals o2: true
+
+s1 = 'hello
+_s1 = 'hello
+s1 eq _s1: true, _s1 eq s1: true
+s1 equals _s1: true, _s1 equals s1: true
+
+t1 = (BannerLimit,12345)
+_t1 = (BannerLimit,12345)
+t1 eq _t1: false, _t1 eq t1: false
+t1 equals _t1: true, _t1 equals t1: true
+
+x = BitSet(1, 2)
+y = BitSet(1, 2)
+x equals y: true, y equals x: true
-x9 eq x10: false - x10 eq x9: false
-x9 equals x10: true - x10 equals x9: true
-x9 eq y10: false - y10 eq x9: false
-x9 equals y10: true - y10 equals x9: true
+x = BitSet(2, 3)
+y = BitSet(2, 3)
+x equals y: true, y equals x: true
+
+x = Map(1 -> A, 2 -> B, 3 -> C)
+y = Map(1 -> A, 2 -> B, 3 -> C)
+x equals y: true, y equals x: true
+
+x = Set(1, 2)
+y = Set(1, 2)
+x equals y: true, y equals x: true
x = List((buffers,20), (layers,2), (title,3))
y = List((buffers,20), (layers,2), (title,3))
-x equals y: true - y equals x: true
+x equals y: true, y equals x: true
x = Map(buffers -> 20, layers -> 2, title -> 3)
y = Map(buffers -> 20, layers -> 2, title -> 3)
-x equals y: true - y equals x: true
-
-x = BitSet(2, 3)
-y = BitSet(2, 3)
-x equals y: true - y equals x: true
+x equals y: true, y equals x: true
-x = Set(5, 3)
-y = Set(5, 3)
-x equals y: true - y equals x: true
+x = ListSet(5, 3)
+y = ListSet(5, 3)
+x equals y: true, y equals x: true
x = Queue(a, b, c)
y = Queue(a, b, c)
-x equals y: true - y equals x: true
+x equals y: true, y equals x: true
+
+x = Range(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
+y = Range(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
+x equals y: true, y equals x: true
+
+x = NumericRange(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
+y = NumericRange(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
+x equals y: true, y equals x: true
+
+x = Map(1 -> A, 2 -> B, 3 -> C)
+y = Map(1 -> A, 2 -> B, 3 -> C)
+x equals y: true, y equals x: true
+
+x = TreeSet(1, 2, 3)
+y = TreeSet(1, 2, 3)
+x equals y: true, y equals x: true
x = Stack(c, b, a)
y = Stack(c, b, a)
-x equals y: true - y equals x: true
+x equals y: true, y equals x: true
+
+x = Stream(0, ?)
+y = Stream(0, ?)
+x equals y: true, y equals x: true
x = Map(42 -> FortyTwo)
y = Map(42 -> FortyTwo)
-x equals y: true - y equals x: true
+x equals y: true, y equals x: true
x = TreeSet(0, 2)
y = TreeSet(0, 2)
-x equals y: true - y equals x: true
+x equals y: true, y equals x: true
+
+x = Vector('a, 'b, 'c)
+y = Vector('a, 'b, 'c)
+x equals y: true, y equals x: true
x = ArrayBuffer(one, two)
y = ArrayBuffer(one, two)
-x equals y: true - y equals x: true
+x equals y: true, y equals x: true
+
+x = ArrayBuilder.ofLong
+y = ArrayBuilder.ofLong
+x equals y: true, y equals x: true
+
+x = ArrayBuilder.ofFloat
+y = ArrayBuilder.ofFloat
+x equals y: true, y equals x: true
-x = Map(title -> 3, buffers -> 20, layers -> 2)
-y = Map(title -> 3, buffers -> 20, layers -> 2)
-x equals y: true - y equals x: true
+x = ArraySeq(1, 2, 3)
+y = ArraySeq(1, 2, 3)
+x equals y: true, y equals x: true
+
+x = ArrayStack(3, 2, 20)
+y = ArrayStack(3, 2, 20)
+x equals y: true, y equals x: true
x = BitSet(0, 8, 9)
y = BitSet(0, 8, 9)
-x equals y: true - y equals x: true
+x equals y: true, y equals x: true
+
+x = Map(C -> 3, B -> 2, A -> 1)
+y = Map(C -> 3, A -> 1, B -> 2)
+x equals y: true, y equals x: true
+
+x = Set(layers, title, buffers)
+y = Set(layers, title, buffers)
+x equals y: true, y equals x: true
-x = Set(layers, buffers, title)
-y = Set(layers, buffers, title)
-x equals y: true - y equals x: true
+x = History()
+y = History()
+x equals y: true, y equals x: true
+
+x = ListBuffer(white, black)
+y = ListBuffer(white, black)
+x equals y: true, y equals x: true
x = Queue(20, 2, 3)
y = Queue(20, 2, 3)
-x equals y: true - y equals x: true
+x equals y: true, y equals x: true
x = Stack(3, 2, 20)
y = Stack(3, 2, 20)
-x equals y: true - y equals x: true
+x equals y: true, y equals x: true
-x = ListBuffer(white, black)
-y = ListBuffer(white, black)
-x equals y: true - y equals x: true
+x = abc
+y = abc
+x equals y: true, y equals x: true
+
+x = WrappedArray(1, 2, 3)
+y = WrappedArray(1, 2, 3)
+x equals y: true, y equals x: true
+
+x = xml:src="hello"
+y = xml:src="hello"
+x equals y: true, y equals x: true
+
+x = <title></title>
+y = <title></title>
+x equals y: true, y equals x: true
x = <html><title>title</title><body></body></html>
y = <html><title>title</title><body></body></html>
-x equals y: true - y equals x: true
+x equals y: true, y equals x: true
x = <html>
<body>
- <table cellpadding="2" cellspacing="0">
+ <table cellspacing="0" cellpadding="2">
<tr>
<th>Last Name</th>
<th>First Name</th>
@@ -137,10 +219,10 @@ x = <html>
</tr>
</table>
</body>
- </html>
+ </html>
y = <html>
<body>
- <table cellpadding="2" cellspacing="0">
+ <table cellspacing="0" cellpadding="2">
<tr>
<th>Last Name</th>
<th>First Name</th>
@@ -157,26 +239,63 @@ y = <html>
</tr>
</table>
</body>
- </html>
-x equals y: true - y equals x: true
+ </html>
+x equals y: true, y equals x: true
x = Tim
y = Tim
-x equals y: true - y equals x: true
+x equals y: true, y equals x: true
x = Bob
y = Bob
-x equals y: true - y equals x: true
+x equals y: true, y equals x: true
x = John
y = John
-x equals y: true - y equals x: true
+x equals y: true, y equals x: true
x = Bill
y = Bill
-x equals y: true - y equals x: true
+x equals y: true, y equals x: true
x = Paul
y = Paul
-x equals y: true - y equals x: true
+x equals y: true, y equals x: true
+
+1
+2
+1
+2
+
+x = UnrolledBuffer(one, two)
+y = UnrolledBuffer(one, two)
+x equals y: true, y equals x: true
+
+x = ParArray(abc, def, etc)
+y = ParArray(abc, def, etc)
+x equals y: true, y equals x: true
+
+x = ParHashMap(1 -> 2, 2 -> 4)
+y = ParHashMap(1 -> 2, 2 -> 4)
+x equals y: true, y equals x: true
+
+x = ParHashSet(2, 1, 3)
+y = ParHashSet(2, 1, 3)
+x equals y: true, y equals x: true
+
+x = ParRange(0, 1, 2, 3, 4)
+y = ParRange(0, 1, 2, 3, 4)
+x equals y: true, y equals x: true
+
+x = ParRange(0, 1, 2, 3)
+y = ParRange(0, 1, 2, 3)
+x equals y: true, y equals x: true
+
+x = ParMap(5 -> 1, 10 -> 2)
+y = ParMap(5 -> 1, 10 -> 2)
+x equals y: true, y equals x: true
+
+x = ParSet(two, one)
+y = ParSet(two, one)
+x equals y: true, y equals x: true
diff --git a/test/files/jvm/serialization.scala b/test/files/jvm/serialization.scala
index 81d21e6dc5..9391b60e46 100644
--- a/test/files/jvm/serialization.scala
+++ b/test/files/jvm/serialization.scala
@@ -2,17 +2,6 @@
// Serialization
//############################################################################
-import java.lang.System
-
-object EqualityTest {
- def check[A, B](x: A, y: B) {
- println("x = " + x)
- println("y = " + y)
- println("x equals y: " + (x equals y) + " - y equals x: " + (y equals x))
- println()
- }
-}
-
object Serialize {
@throws(classOf[java.io.IOException])
def write[A](o: A): Array[Byte] = {
@@ -29,7 +18,15 @@ object Serialize {
new java.io.ObjectInputStream(new java.io.ByteArrayInputStream(buffer))
in.readObject().asInstanceOf[A]
}
+ def check[A, B](x: A, y: B) {
+ println("x = " + x)
+ println("y = " + y)
+ println("x equals y: " + (x equals y) + ", y equals x: " + (y equals x))
+ assert((x equals y) && (y equals x))
+ println()
+ }
}
+import Serialize._
//############################################################################
// Test classes in package "scala"
@@ -43,152 +40,236 @@ object Test1_scala {
(a1.length == a2.length) &&
(Iterator.range(0, a1.length) forall { i => a1(i) == a2(i) })
- @serializable
object WeekDay extends Enumeration {
type WeekDay = Value
val Monday, Tuesday, Wednesday, Thusday, Friday, Saturday, Sunday = Value
}
import WeekDay._, BigDecimal._, RoundingMode._
- val x0 = List(1, 2, 3)
- val x1 = Nil
- val x2 = None
- val x3 = Array(1, 2, 3)
- val x4 = { x: Int => 2 * x }
- val x5 = 'hello
- val x6 = ("BannerLimit", 12345)
- val x7 = BigDecimal.RoundingMode
- val x8 = WeekDay
- val x9 = UP
- val x10 = Monday
-
+ // in alphabetic order
try {
- val y0: List[Int] = Serialize.read(Serialize.write(x0))
- val y1: List[Nothing] = Serialize.read(Serialize.write(x1))
- val y2: Option[Nothing] = Serialize.read(Serialize.write(x2))
- val y3: Array[Int] = Serialize.read(Serialize.write(x3))
- val y4: Function[Int, Int] = Serialize.read(Serialize.write(x4))
- val y5: Symbol = Serialize.read(Serialize.write(x5))
- val y6: (String, Int) = Serialize.read(Serialize.write(x6))
- val y7: RoundingMode.type = Serialize.read(Serialize.write(x7))
- val y8: WeekDay.type = Serialize.read(Serialize.write(x8))
- val y9: RoundingMode = Serialize.read(Serialize.write(x9))
- val y10: WeekDay = Serialize.read(Serialize.write(x10))
-
- println("x0 = " + x0)
- println("y0 = " + y0)
- println("x0 eq y0: " + (x0 eq y0) + " - y0 eq x0: " + (y0 eq x0))
- println("x0 equals y0: " + (x0 equals y0) + " - y0 equals x0: " + (y0 equals x0))
- println()
- println("x1 = " + x1)
- println("y1 = " + y1)
- println("x1 eq y1: " + (x1 eq y1) + " - y1 eq x1: " + (y1 eq x1))
- println()
- println("x2 = " + x2)
- println("y2 = " + y2)
- println("x2 eq y2: " + (x2 eq y2) + " - y2 eq x2: " + (y2 eq x2))
- println()
- println("x3 = " + arrayToString(x3))
- println("y3 = " + arrayToString(y3))
- println("arrayEquals(x3, y3): " + arrayEquals(x3, y3))
- println()
- println("x4 = <na>")
- println("y4 = <na>")
- println("x4(2): " + x4(2) + " - y4(2): " + y4(2))
+ // Array
+ val a1 = Array(1, 2, 3)
+ val _a1: Array[Int] = read(write(a1))
+ println("a1 = " + arrayToString(a1))
+ println("_a1 = " + arrayToString(_a1))
+ println("arrayEquals(a1, _a1): " + arrayEquals(a1, _a1))
println()
- println("x5 = " + x5)
- println("y5 = " + y5)
- println("x5 eq y5: " + (x5 eq y5) + " - y5 eq x5: " + (y5 eq x5))
- println("x5 equals y5: " + (x5 equals y5) + " - y5 equals x5: " + (y5 equals x5))
- println()
- println("x6 = " + x6)
- println("y6 = " + y6)
- println("x6 eq y6: " + (x6 eq y6) + " - y6 eq x6: " + (y6 eq x6))
- println("x6 equals y6: " + (x6 equals y6) + " - y6 equals x6: " + (y6 equals x6))
+
+ // Either
+ val e1 = Left(1)
+ val _e1: Either[Int, String] = read(write(e1))
+ println("e1 = " + e1)
+ println("_e1 = " + _e1)
+ println("e1 eq _e1: " + (e1 eq _e1) + ", _e1 eq e1: " + (_e1 eq e1))
+ println("e1 equals _e1: " + (e1 equals _e1) + ", _e1 equals e1: " + (_e1 equals e1))
println()
+
+ // Enumeration
+ val x7 = BigDecimal.RoundingMode
+ val y7: RoundingMode.type = read(write(x7))
println("x7 = " + x7)
println("y7 = " + y7)
- println("x7 eq y7: " + (x7 eq y7) + " - y7 eq x7: " + (y7 eq x7))
- println("x7 equals y7: " + (x7 equals y7) + " - y7 equals x7: " + (y7 equals x7))
+ println("x7 eq y7: " + (x7 eq y7) + ", y7 eq x7: " + (y7 eq x7))
+ println("x7 equals y7: " + (x7 equals y7) + ", y7 equals x7: " + (y7 equals x7))
println()
+
+ val x8 = WeekDay
+ val y8: WeekDay.type = read(write(x8))
println("x8 = " + x8)
println("y8 = " + y8)
- println("x8 eq y8: " + (x8 eq y8) + " - y8 eq x8: " + (y8 eq x8))
- println("x8 equals y8: " + (x8 equals y8) + " - y8 equals x8: " + (y8 equals x8))
+ println("x8 eq y8: " + (x8 eq y8) + ", y8 eq x8: " + (y8 eq x8))
+ println("x8 equals y8: " + (x8 equals y8) + ", y8 equals x8: " + (y8 equals x8))
println()
+
+ val x9 = UP
+ val y9: RoundingMode = read(write(x9))
println("x9 = " + x9)
println("y9 = " + y9)
- println("x9 eq y9: " + (x9 eq y9) + " - y9 eq x9: " + (y9 eq x9))
- println("x9 equals y9: " + (x9 equals y9) + " - y9 equals x9: " + (y9 equals x9))
+ println("x9 eq y9: " + (x9 eq y9) + ", y9 eq x9: " + (y9 eq x9))
+ println("x9 equals y9: " + (x9 equals y9) + ", y9 equals x9: " + (y9 equals x9))
println()
+
+ val x10 = Monday
+ val y10: WeekDay = read(write(x10))
println("x10 = " + x10)
println("y10 = " + y10)
- println("x10 eq y10: " + (x10 eq y10) + " - y10 eq x10: " + (y10 eq x10))
- println("x10 equals y10: " + (x10 equals y10) + " - y10 equals x10: " + (y10 equals x10))
+ println("x10 eq y10: " + (x10 eq y10) + ", y10 eq x10: " + (y10 eq x10))
+ println("x10 equals y10: " + (x10 equals y10) + ", y10 equals x10: " + (y10 equals x10))
+ println()
+
+ println("x9 eq x10: " + (x9 eq x10) + ", x10 eq x9: " + (x10 eq x9))
+ println("x9 equals x10: " + (x9 equals x10) + ", x10 equals x9: " + (x10 equals x9))
+ println("x9 eq y10: " + (x9 eq y10) + ", y10 eq x9: " + (y10 eq x9))
+ println("x9 equals y10: " + (x9 equals y10) + ", y10 equals x9: " + (y10 equals x9))
+ println()
+
+ // Function
+ val f1 = { x: Int => 2 * x }
+ val _f1: Function[Int, Int] = read(write(f1))
+ println("f1 = <na>")
+ println("_f1 = <na>")
+ println("f1(2): " + f1(2) + ", _f1(2): " + _f1(2))
+ println()
+
+ // List
+ val xs0 = List(1, 2, 3)
+ val _xs0: List[Int] = read(write(xs0))
+ println("xs0 = " + xs0)
+ println("_xs0 = " + _xs0)
+ println("xs0 eq _xs0: " + (xs0 eq _xs0) + ", _xs0 eq xs0: " + (_xs0 eq xs0))
+ println("xs0 equals _xs0: " + (xs0 equals _xs0) + ", _xs0 equals xs0: " + (_xs0 equals xs0))
+ println()
+
+ val xs1 = Nil
+ val _xs1: List[Nothing] = read(write(xs1))
+ println("xs1 = " + xs1)
+ println("_xs1 = " + _xs1)
+ println("xs1 eq _xs1: " + (xs1 eq _xs1) + ", _xs1 eq xs1: " + (_xs1 eq xs1))
+ println()
+
+ // Option
+ val o1 = None
+ val _o1: Option[Nothing] = read(write(o1))
+ println("o1 = " + o1)
+ println("_o1 = " + _o1)
+ println("o1 eq _o1: " + (o1 eq _o1) + ", _o1 eq o1: " + (_o1 eq o1))
println()
- println("x9 eq x10: " + (x9 eq x10) + " - x10 eq x9: " + (x10 eq x9))
- println("x9 equals x10: " + (x9 equals x10) + " - x10 equals x9: " + (x10 equals x9))
- println("x9 eq y10: " + (x9 eq y10) + " - y10 eq x9: " + (y10 eq x9))
- println("x9 equals y10: " + (x9 equals y10) + " - y10 equals x9: " + (y10 equals x9))
+
+ val o2 = Some(1)
+ val _o2: Option[Int] = read(write(o2))
+ println("o2 = " + o2)
+ println("_o2 = " + _o2)
+ println("o2 eq _o2: " + (o2 eq _o2) + ", _o2 eq o2: " + (_o2 eq o2))
+ println("o2 equals _o2: " + (o2 equals _o2) + ", _o2 equals o2: " + (_o2 equals o2))
+ println()
+/*
+ // Responder
+ val r1 = Responder.constant("xyz")
+ val _r1: Responder[String] = read(write(r1))
+ check(r1, _r1)
+*/
+ // Symbol
+ val s1 = 'hello
+ val _s1: Symbol = read(write(s1))
+ println("s1 = " + s1)
+ println("_s1 = " + _s1)
+ println("s1 eq _s1: " + (s1 eq _s1) + ", _s1 eq s1: " + (_s1 eq s1))
+ println("s1 equals _s1: " + (s1 equals _s1) + ", _s1 equals s1: " + (_s1 equals s1))
+ println()
+
+ // Tuple
+ val t1 = ("BannerLimit", 12345)
+ val _t1: (String, Int) = read(write(t1))
+ println("t1 = " + t1)
+ println("_t1 = " + _t1)
+ println("t1 eq _t1: " + (t1 eq _t1) + ", _t1 eq t1: " + (_t1 eq t1))
+ println("t1 equals _t1: " + (t1 equals _t1) + ", _t1 equals t1: " + (_t1 equals t1))
println()
}
catch {
case e: Exception =>
- e.printStackTrace()
println("Error in Test1_scala: " + e)
+ throw e
}
}
//############################################################################
// Test classes in package "scala.collection.immutable"
-@serializable
object Test2_immutable {
import scala.collection.immutable.{
- BitSet, ListMap, ListSet, Queue, Stack, TreeSet, TreeMap}
-
- val x1 = List(
- Pair("buffers", 20),
- Pair("layers", 2),
- Pair("title", 3)
- )
-
- val x2 = new ListMap[String, Int] + ("buffers" -> 20, "layers" -> 2, "title" -> 3)
-
- val x3 = {
- val bs = new collection.mutable.BitSet()
- bs += 2; bs += 3
- bs.toImmutable
- }
-
- val x4 = new ListSet[Int]() + 3 + 5
-
- val x5 = Queue("a", "b", "c")
-
- val x6 = new Stack().push("a", "b", "c")
-
- val x7 = new TreeMap[Int, String] + (42 -> "FortyTwo")
-
- val x8 = new TreeSet[Int]() + 2 + 0
+ BitSet, HashMap, HashSet, ListMap, ListSet, Queue, Range, SortedMap,
+ SortedSet, Stack, Stream, TreeMap, TreeSet, Vector}
+ // in alphabetic order
try {
- val y1: List[Pair[String, Int]] = Serialize.read(Serialize.write(x1))
- val y2: ListMap[String, Int] = Serialize.read(Serialize.write(x2))
- val y3: BitSet = Serialize.read(Serialize.write(x3))
- val y4: ListSet[Int] = Serialize.read(Serialize.write(x4))
- val y5: Queue[String] = Serialize.read(Serialize.write(x5))
- val y6: Stack[String] = Serialize.read(Serialize.write(x6))
- val y7: TreeMap[Int, String] = Serialize.read(Serialize.write(x7))
- val y8: TreeSet[Int] = Serialize.read(Serialize.write(x8))
-
- EqualityTest.check(x1, y1)
- EqualityTest.check(x2, y2)
- EqualityTest.check(x3, y3)
- EqualityTest.check(x4, y4)
- EqualityTest.check(x5, y5)
- EqualityTest.check(x6, y6)
- EqualityTest.check(x7, y7)
- EqualityTest.check(x8, y8)
+ // BitSet
+ val bs1 = BitSet.empty + 1 + 2
+ val _bs1: BitSet = read(write(bs1))
+ check(bs1, _bs1)
+
+ val bs2 = {
+ val bs = new collection.mutable.BitSet()
+ bs += 2; bs += 3
+ bs.toImmutable
+ }
+ val _bs2: BitSet = read(write(bs2))
+ check(bs2, _bs2)
+
+ // HashMap
+ val hm1 = new HashMap[Int, String] + (1 -> "A", 2 -> "B", 3 -> "C")
+ val _hm1: HashMap[Int, String] = read(write(hm1))
+ check(hm1, _hm1)
+
+ // HashSet
+ val hs1 = new HashSet[Int] + 1 + 2
+ val _hs1: HashSet[Int] = read(write(hs1))
+ check(hs1, _hs1)
+
+ // List
+ val xs1 = List(("buffers", 20), ("layers", 2), ("title", 3))
+ val _xs1: List[(String, Int)] = read(write(xs1))
+ check(xs1, _xs1)
+
+ // ListMap
+ val lm1 = new ListMap[String, Int] + ("buffers" -> 20, "layers" -> 2, "title" -> 3)
+ val _lm1: ListMap[String, Int] = read(write(lm1))
+ check(lm1, _lm1)
+
+ // ListSet
+ val ls1 = new ListSet[Int] + 3 + 5
+ val _ls1: ListSet[Int] = read(write(ls1))
+ check(ls1, _ls1)
+
+ // Queue
+ val q1 = Queue("a", "b", "c")
+ val _q1: Queue[String] = read(write(q1))
+ check(q1, _q1)
+
+ // Range
+ val r1 = 0 until 10
+ val _r1: Range = read(write(r1))
+ check(r1, _r1)
+
+ val r2 = Range.Long(0L, 10L, 1)
+ val _r2: r2.type = read(write(r2))
+ check(r2, _r2)
+
+ // SortedMap
+ val sm1 = SortedMap.empty[Int, String] + (2 -> "B", 3 -> "C", 1 -> "A")
+ val _sm1: SortedMap[Int, String] = read(write(sm1))
+ check(sm1, _sm1)
+
+ // SortedSet
+ val ss1 = SortedSet.empty[Int] + 2 + 3 + 1
+ val _ss1: SortedSet[Int] = read(write(ss1))
+ check(ss1, _ss1)
+
+ // Stack
+ val s1 = new Stack().push("a", "b", "c")
+ val _s1: Stack[String] = read(write(s1))
+ check(s1, _s1)
+
+ // Stream
+ val st1 = Stream.range(0, 10)
+ val _st1: Stream[Int] = read(write(st1))
+ check(st1, _st1)
+
+ // TreeMap
+ val tm1 = new TreeMap[Int, String] + (42 -> "FortyTwo")
+ val _tm1: TreeMap[Int, String] = read(write(tm1))
+ check(tm1, _tm1)
+
+ // TreeSet
+ val ts1 = new TreeSet[Int]() + 2 + 0
+ val _ts1: TreeSet[Int] = read(write(ts1))
+ check(ts1, _ts1)
+
+ // Vector
+ val v1 = Vector('a, 'b, 'c)
+ val _v1: Vector[Symbol] = read(write(v1))
+ check(v1, _v1)
}
catch {
case e: Exception =>
@@ -201,81 +282,142 @@ object Test2_immutable {
// Test classes in package "scala.collection.mutable"
object Test3_mutable {
+ import scala.reflect.ClassManifest
import scala.collection.mutable.{
- ArrayBuffer, BitSet, HashMap, HashSet, History, LinkedList, ListBuffer,
- Publisher, Queue, Stack}
-
- val x0 = new ArrayBuffer[String]
- x0 ++= List("one", "two")
-
- val x2 = new BitSet()
- x2 += 0
- x2 += 8
- x2 += 9
-
- val x1 = new HashMap[String, Int]
- x1 ++= Test2_immutable.x1
-
- val x3 = new HashSet[String]
- x3 ++= Test2_immutable.x1.map(p => p._1)
-
- @serializable
- class Feed extends Publisher[String, Feed]
-
- val x8 = new History[String, Feed]
-
- val x4 = new LinkedList[Int](2, null)
- x4.append(new LinkedList(3, null))
-
- val x7 = new ListBuffer[String]
- x7 ++= List("white", "black")
-
- val x5 = new Queue[Int]
- x5 ++= Test2_immutable.x1.map(p => p._2)
-
- val x6 = new Stack[Int]
- x6 ++= x5
+ ArrayBuffer, ArrayBuilder, ArraySeq, ArrayStack, BitSet, DoubleLinkedList,
+ HashMap, HashSet, History, LinkedList, ListBuffer, Publisher, Queue,
+ Stack, StringBuilder, WrappedArray}
+ // in alphabetic order
try {
- val y0: ArrayBuffer[String] = Serialize.read(Serialize.write(x0))
- val y1: HashMap[String, Int] = Serialize.read(Serialize.write(x1))
- val y2: BitSet = Serialize.read(Serialize.write(x2))
- val y3: HashSet[String] = Serialize.read(Serialize.write(x3))
-// val y4: LinkedList[Int] = Serialize.read(Serialize.write(x4))
- val y5: Queue[Int] = Serialize.read(Serialize.write(x5))
- val y6: Stack[Int] = Serialize.read(Serialize.write(x6))
- val y7: ListBuffer[String] = Serialize.read(Serialize.write(x7))
- val y8: History[String, Feed] = Serialize.read(Serialize.write(x8))
-
- EqualityTest.check(x0, y0)
- EqualityTest.check(x1, y1)
- EqualityTest.check(x2, y2)
- EqualityTest.check(x3, y3)
- //EqualityTest.check(x4, y4) //todo
- EqualityTest.check(x5, y5)
- EqualityTest.check(x6, y6)
- EqualityTest.check(x7, y7)
- //EqualityTest.check(x8, y8) //todo
+ // ArrayBuffer
+ val ab1 = new ArrayBuffer[String]
+ ab1 ++= List("one", "two")
+ val _ab1: ArrayBuffer[String] = read(write(ab1))
+ check(ab1, _ab1)
+
+ // ArrayBuilder
+ val abu1 = ArrayBuilder.make[Long]
+ val _abu1: ArrayBuilder[ClassManifest[Long]] = read(write(abu1))
+ check(abu1, _abu1)
+
+ val abu2 = ArrayBuilder.make[Float]
+ val _abu2: ArrayBuilder[ClassManifest[Float]] = read(write(abu2))
+ check(abu2, _abu2)
+
+ // ArraySeq
+ val aq1 = ArraySeq(1, 2, 3)
+ val _aq1: ArraySeq[Int] = read(write(aq1))
+ check(aq1, _aq1)
+
+ // ArrayStack
+ val as1 = new ArrayStack[Int]
+ as1 ++= List(20, 2, 3).iterator
+ val _as1: ArrayStack[Int] = read(write(as1))
+ check(as1, _as1)
+
+ // BitSet
+ val bs1 = new BitSet()
+ bs1 += 0
+ bs1 += 8
+ bs1 += 9
+ val _bs1: BitSet = read(write(bs1))
+ check(bs1, _bs1)
+/*
+ // DoubleLinkedList
+ val dl1 = new DoubleLinkedList[Int](2, null)
+ dl1.append(new DoubleLinkedList(3, null))
+ val _dl1: DoubleLinkedList[Int] = read(write(dl1))
+ check(dl1, _dl1)
+*/
+ // HashMap
+ val hm1 = new HashMap[String, Int]
+ hm1 ++= List(("A", 1), ("B", 2), ("C", 3)).iterator
+ val _hm1: HashMap[String, Int] = read(write(hm1))
+ check(hm1, _hm1)
+
+ // HashSet
+ val hs1 = new HashSet[String]
+ hs1 ++= List("layers", "buffers", "title").iterator
+ val _hs1: HashSet[String] = read(write(hs1))
+ check(hs1, _hs1)
+
+ val h1 = new History[String, Int]
+ val _h1: History[String, Int] = read(write(h1))
+ check(h1, _h1)
+/*
+ // LinkedList
+ val ll1 = new LinkedList[Int](2, null)
+ ll1.append(new LinkedList(3, null))
+ val _ll1: LinkedList[Int] = read(write(ll1))
+ check(ll1, _ll1)
+*/
+ // ListBuffer
+ val lb1 = new ListBuffer[String]
+ lb1 ++= List("white", "black")
+ val _lb1: ListBuffer[String] = read(write(lb1))
+ check(lb1, _lb1)
+
+ // Queue
+ val q1 = new Queue[Int]
+ q1 ++= List(20, 2, 3).iterator
+ val _q1: Queue[Int] = read(write(q1))
+ check(q1, _q1)
+
+ // Stack
+ val s1 = new Stack[Int]
+ s1 pushAll q1
+ val _s1: Stack[Int] = read(write(s1))
+ check(s1, _s1)
+
+ // StringBuilder
+ val sb1 = new StringBuilder
+ sb1 append "abc"
+ val _sb1: StringBuilder = read(write(sb1))
+ check(sb1, _sb1)
+
+ // WrappedArray
+ val wa1 = WrappedArray.make(Array(1, 2, 3))
+ val _wa1: WrappedArray[Int] = read(write(wa1))
+ check(wa1, _wa1)
}
catch {
case e: Exception =>
println("Error in Test3_mutable: " + e)
+ throw e
}
}
+
//############################################################################
// Test classes in package "scala.xml"
object Test4_xml {
- import scala.xml.Elem
-
- val x1 = <html><title>title</title><body></body></html>;
+ import scala.xml.{Attribute, Document, Elem, Null, PrefixedAttribute, Text}
case class Person(name: String, age: Int)
- class AddressBook(a: Person*) {
- private val people: List[Person] = a.toList
- def toXHTML =
+ try {
+ // Attribute
+ val a1 = new PrefixedAttribute("xml", "src", Text("hello"), Null)
+ val _a1: Attribute = read(write(a1))
+ check(a1, _a1)
+
+ // Document
+ val d1 = new Document
+ d1.docElem = <title></title>
+ d1.encoding = Some("UTF-8")
+ val _d1: Document = read(write(d1))
+ check(d1, _d1)
+
+ // Elem
+ val e1 = <html><title>title</title><body></body></html>;
+ val _e1: Elem = read(write(e1))
+ check(e1, _e1)
+
+ class AddressBook(a: Person*) {
+ private val people: List[Person] = a.toList
+ def toXHTML =
<table cellpadding="2" cellspacing="0">
<tr>
<th>Last Name</th>
@@ -287,38 +429,33 @@ object Test4_xml {
<td> { p.age.toString() } </td>
</tr> }
</table>;
- }
+ }
- val people = new AddressBook(
- Person("Tom", 20),
- Person("Bob", 22),
- Person("James", 19))
+ val people = new AddressBook(
+ Person("Tom", 20),
+ Person("Bob", 22),
+ Person("James", 19))
- val x2 =
- <html>
+ val e2 =
+ <html>
<body>
- { people.toXHTML }
+ { people.toXHTML }
</body>
- </html>;
-
- try {
- val y1: scala.xml.Elem = Serialize.read(Serialize.write(x1))
- val y2: scala.xml.Elem = Serialize.read(Serialize.write(x2))
-
- EqualityTest.check(x1, y1)
- EqualityTest.check(x2, y2)
+ </html>;
+ val _e2: Elem = read(write(e2))
+ check(e2, _e2)
}
catch {
case e: Exception =>
println("Error in Test4_xml: " + e)
+ throw e
}
}
//############################################################################
// Test user-defined classes WITHOUT nesting
-@serializable
-class Person(_name: String) {
+class Person(_name: String) extends Serializable {
private var name = _name
override def toString() = name
override def equals(that: Any): Boolean =
@@ -326,12 +463,11 @@ class Person(_name: String) {
(name == that.asInstanceOf[Person].name)
}
-@serializable
-class Employee(_name: String) {
+class Employee(_name: String) extends Serializable {
private var name = _name
override def toString() = name
}
-@serializable
+
object bob extends Employee("Bob")
object Test5 {
@@ -339,11 +475,11 @@ object Test5 {
val x2 = bob
try {
- val y1: Person = Serialize.read(Serialize.write(x1))
- val y2: Employee = Serialize.read(Serialize.write(x2))
+ val y1: Person = read(write(x1))
+ val y2: Employee = read(write(x2))
- EqualityTest.check(x1, y1)
- EqualityTest.check(x2, y2)
+ check(x1, y1)
+ check(x2, y2)
}
catch {
case e: Exception =>
@@ -354,13 +490,10 @@ object Test5 {
//############################################################################
// Test user-defined classes WITH nesting
-@serializable
object Test6 {
- @serializable
object bill extends Employee("Bill") {
val x = paul
}
- @serializable
object paul extends Person("Paul") {
val x = 4 // bill; => StackOverflowException !!!
}
@@ -369,13 +502,13 @@ object Test6 {
val x3 = paul
try {
- val y1: Person = Serialize.read(Serialize.write(x1))
- val y2: Employee = Serialize.read(Serialize.write(x2))
- val y3: Person = Serialize.read(Serialize.write(x3))
+ val y1: Person = read(write(x1))
+ val y2: Employee = read(write(x2))
+ val y3: Person = read(write(x3))
- EqualityTest.check(x1, y1)
- EqualityTest.check(x2, y2)
- EqualityTest.check(x3, y3)
+ check(x1, y1)
+ check(x2, y2)
+ check(x3, y3)
}
catch {
case e: Exception =>
@@ -384,6 +517,49 @@ object Test6 {
}
//############################################################################
+// Nested objects cannot get readresolve automatically because after deserialization
+// they would be null (they are treated as lazy vals)
+class Outer extends Serializable {
+ object Inner extends Serializable
+}
+
+object Test7 {
+ val x = new Outer
+ x.Inner // initialize
+ val y:Outer = read(write(x))
+ if (y.Inner == null)
+ println("Inner object is null")
+}
+
+// Verify that transient lazy vals don't get serialized
+class WithTransient extends Serializable {
+ @transient lazy val a1 = 1
+ @transient private lazy val a2 = 2
+ @transient object B extends Serializable
+ @transient private object C extends Serializable
+
+ def test = {
+ println(a1)
+ println(a2)
+ if (B == null || C == null)
+ println("Transient nested object failed to serialize properly")
+ }
+}
+
+object Test8 {
+ val x = new WithTransient
+ x.test
+ try {
+ val y:WithTransient = read(write(x))
+ y.test
+ }
+ catch {
+ case e: Exception =>
+ println("Error in Test8: " + e)
+ }
+}
+
+//############################################################################
// Test code
object Test {
@@ -394,8 +570,66 @@ object Test {
Test4_xml
Test5
Test6
+ Test7
+ Test8
+ Test9_parallel
}
}
//############################################################################
+
+//############################################################################
+// Test classes in package "scala.collection.parallel" and subpackages
+object Test9_parallel {
+ import scala.collection.parallel._
+
+ try {
+ println()
+
+ // UnrolledBuffer
+ val ub = new collection.mutable.UnrolledBuffer[String]
+ ub ++= List("one", "two")
+ val _ub: collection.mutable.UnrolledBuffer[String] = read(write(ub))
+ check(ub, _ub)
+
+ // mutable.ParArray
+ val pa = mutable.ParArray("abc", "def", "etc")
+ val _pa: mutable.ParArray[String] = read(write(pa))
+ check(pa, _pa)
+
+ // mutable.ParHashMap
+ val mpm = mutable.ParHashMap(1 -> 2, 2 -> 4)
+ val _mpm: mutable.ParHashMap[Int, Int] = read(write(mpm))
+ check(mpm, _mpm)
+
+ // mutable.ParHashSet
+ val mps = mutable.ParHashSet(1, 2, 3)
+ val _mps: mutable.ParHashSet[Int] = read(write(mps))
+ check(mps, _mps)
+
+ // immutable.ParRange
+ val pr1 = immutable.ParRange(0, 4, 1, true)
+ val _pr1: immutable.ParRange = read(write(pr1))
+ check(pr1, _pr1)
+
+ val pr2 = immutable.ParRange(0, 4, 1, false)
+ val _pr2: immutable.ParRange = read(write(pr2))
+ check(pr2, _pr2)
+
+ // immutable.ParHashMap
+ val ipm = immutable.ParHashMap(5 -> 1, 10 -> 2)
+ val _ipm: immutable.ParHashMap[Int, Int] = read(write(ipm))
+ check(ipm, _ipm)
+
+ // immutable.ParHashSet
+ val ips = immutable.ParHashSet("one", "two")
+ val _ips: immutable.ParHashSet[String] = read(write(ips))
+ check(ips, _ips)
+
+ } catch {
+ case e: Exception =>
+ println("Error in Test5_parallel: " + e)
+ throw e
+ }
+}
diff --git a/test/files/jvm/signum.scala b/test/files/jvm/signum.scala
new file mode 100644
index 0000000000..feb28d3e43
--- /dev/null
+++ b/test/files/jvm/signum.scala
@@ -0,0 +1,15 @@
+object Test {
+ def main(args: Array[String]) {
+ assert(math.signum(Long.MaxValue) == 1L)
+ assert(math.signum(1L) == 1L)
+ assert(math.signum(0L) == 0L)
+ assert(math.signum(-1L) == -1L)
+ assert(math.signum(Long.MinValue) == -1L)
+
+ assert(math.signum(Int.MaxValue) == 1)
+ assert(math.signum(1) == 1)
+ assert(math.signum(0) == 0)
+ assert(math.signum(-1) == -1)
+ assert(math.signum(Int.MinValue) == -1)
+ }
+}
diff --git a/test/files/jvm/stringbuilder.check b/test/files/jvm/stringbuilder.check
new file mode 100644
index 0000000000..c9b44990b7
--- /dev/null
+++ b/test/files/jvm/stringbuilder.check
@@ -0,0 +1,17 @@
+s0 equals j0 = false
+s0.toString equals j0.toString = true
+s1.toString equals j1.toString = true
+j2=cba, s2=cba
+s2.toString equals j2.toString = true
+j3=aba, s3=aba
+s3.toString equals j3.toString = true
+s0.toString equals j0.toString = true
+s1.toString equals j1.toString = true
+j0=-1988a1trueabc, s0=-1988a1trueabc
+s0.toString equals j0.toString = true
+j1=xyz012###, s1=xyz012###
+s1.toString equals j1.toString = true
+j1=2, s1=2
+s1 == j1 = true
+j2=8, s2=8
+s2 == j2 = true
diff --git a/test/files/jvm/stringbuilder.scala b/test/files/jvm/stringbuilder.scala
index bacd13c715..54951d657b 100644
--- a/test/files/jvm/stringbuilder.scala
+++ b/test/files/jvm/stringbuilder.scala
@@ -1,98 +1,88 @@
-import testing.SUnit._
-
/** Test the Scala implementation of class <code>scala.StringBuilder</code>.
*
* @author Stephane Micheloud
*/
-object Test extends TestConsoleMain {
- def suite = new TestSuite(
- Test1, //ctor, reverse
- Test2, //append
- Test3, //insert
- Test4 //indexOf, lastIndexOf
- )
+object Test {
+ def main(args: Array[String]) {
+ Test1.run() //ctor, reverse
+ Test2.run() //append
+ Test3.run() //insert
+ Test4.run() //indexOf, lastIndexOf
+ }
}
-object Test1 extends TestCase("ctor") with Assert {
- override def enableStackTrace = false
- override def runTest {
- val j0 = new java.lang.StringBuilder("abc") // Java 1.5+
+object Test1 {
+ def run() {
+ val j0 = new java.lang.StringBuilder("abc")
val s0 = new StringBuilder("abc")
- assertEquals("s0 equals j0", false, s0 equals j0)
- assertEquals("s0.toString equals j0.toString", true, s0.toString equals j0.toString)
+ println("s0 equals j0 = " + (s0 equals j0))
+ println("s0.toString equals j0.toString = " + (s0.toString equals j0.toString))
val str = """
Scala is a general purpose programming language designed to express common programming patterns in a concise, elegant, and type-safe way. It smoothly integrates features of object-oriented and functional languages. It is also fully interoperable with Java."""
val j1 = new java.lang.StringBuilder(100) append str
val s1 = new java.lang.StringBuilder(100) append str
- assertEquals("s1.toString equals j1.toString", true, s1.toString equals j1.toString)
+ println("s1.toString equals j1.toString = " + (s1.toString equals j1.toString))
val j2 = j0 reverse
val s2 = s0 reverse;
- //println("j2="+j2+", s2="+s2)//debug
- assertEquals("s2.toString equals j2.toString", true, s2.toString equals j2.toString)
+ println("j2="+j2+", s2="+s2)
+ println("s2.toString equals j2.toString = " + (s2.toString equals j2.toString))
val j3 = j2; j3 setCharAt (0, j3 charAt 2)
val s3 = s2; s3(0) = s3(2)
- //println("j3="+j3+", s3="+s3)//debug
- assertEquals("s3.toString equals j3.toString", true, s3.toString equals j3.toString)
+ println("j3="+j3+", s3="+s3)
+ println("s3.toString equals j3.toString = " + (s3.toString equals j3.toString))
}
}
-object Test2 extends TestCase("append") with Assert {
- override def enableStackTrace = false
- override def runTest {
- val j0 = new java.lang.StringBuilder("abc") // Java 1.5+
+object Test2 {
+ def run() {
+ val j0 = new java.lang.StringBuilder("abc")
val s0 = new StringBuilder("abc")
-
j0 append true append (1.toByte) append 'a' append 9 append -1L append 1.2e-10f append -2.1e+100d
s0 append true append (1.toByte) append 'a' append 9 append -1L append 1.2e-10f append -2.1e+100d
+ println("s0.toString equals j0.toString = " + (s0.toString equals j0.toString))
- assertEquals("s0.toString equals j0.toString", true, s0.toString equals j0.toString)
-
- val j1 = new java.lang.StringBuilder // Java 1.5+
+ val j1 = new java.lang.StringBuilder
val s1 = new StringBuilder
j1 append "###" append Array('0', '1', '2') append "xyz".subSequence(0, 3)
- s1 append "###" append Array('0', '1', '2') append List('x', 'y', 'z')
- assertEquals("s1.toString equals j1.toString", true, s1.toString equals j1.toString)
+ s1 append "###" appendAll Array('0', '1', '2') appendAll List('x', 'y', 'z')
+ println("s1.toString equals j1.toString = " + (s1.toString equals j1.toString))
}
}
-object Test3 extends TestCase("insert") with Assert {
- override def enableStackTrace = false
- override def runTest {
- val j0 = new java.lang.StringBuilder("abc") // Java 1.5+
+object Test3 {
+ def run() {
+ val j0 = new java.lang.StringBuilder("abc")
val s0 = new StringBuilder("abc")
-
j0 insert (0, true) insert (0, 1.toByte) insert (0, 'a') insert (0, 88.toShort) insert (0, 9) insert (0, -1L)
s0 insert (0, true) insert (0, 1.toByte) insert (0, 'a') insert (0, 88.toShort) insert (0, 9) insert (0, -1L)
- //println("j0="+j0+", s0="+s0)//debug
- assertEquals("s0.toString equals j0.toString", true, s0.toString equals j0.toString)
+ println("j0="+j0+", s0="+s0)
+ println("s0.toString equals j0.toString = " + (s0.toString equals j0.toString))
- val j1 = new java.lang.StringBuilder // Java 1.5+
+ val j1 = new java.lang.StringBuilder
val s1 = new StringBuilder
j1 insert (0, "###") insert (0, Array('0', '1', '2')) insert (0, "xyz".subSequence(0, 3))
- s1 insert (0, "###") insert (0, Array('0', '1', '2')) insert (0, List('x', 'y', 'z'))
- //println("j1="+j1+", s1="+s1)//debug
- assertEquals("s1.toString equals j1.toString", true, s1.toString equals j1.toString)
-
+ s1 insert (0, "###") insertAll (0, Array('0', '1', '2')) insertAll (0, List('x', 'y', 'z'))
+ println("j1="+j1+", s1="+s1)
+ println("s1.toString equals j1.toString = " + (s1.toString equals j1.toString))
}
}
-object Test4 extends TestCase("indefOf") with Assert {
- override def enableStackTrace = false
- override def runTest {
+object Test4 {
+ def run() {
val j0 = new java.lang.StringBuilder("abc") // Java 1.5+
val s0 = new StringBuilder("abc")
val j1 = j0 indexOf("c")
val s1 = s0 indexOf("c")
- //println("j1="+j1+", s1="+s1)//debug
- assertEquals("s1 == j1", true, s1 == j1)
+ println("j1="+j1+", s1="+s1)
+ println("s1 == j1 = " + (s1 == j1))
val j2 = j0 append "123abc" lastIndexOf("c")
val s2 = s0 append "123abc" lastIndexOf("c")
- //println("j2="+j2+", s2="+s2)//debug
- assertEquals("s2 == j2", true, s2 == j2)
+ println("j2="+j2+", s2="+s2)
+ println("s2 == j2 = " + (s2 == j2))
}
}
diff --git a/test/files/jvm/t1449.check b/test/files/jvm/t1449.check
new file mode 100644
index 0000000000..d81cc0710e
--- /dev/null
+++ b/test/files/jvm/t1449.check
@@ -0,0 +1 @@
+42
diff --git a/test/files/jvm/t1449.scala b/test/files/jvm/t1449.scala
new file mode 100644
index 0000000000..3822cf7dd5
--- /dev/null
+++ b/test/files/jvm/t1449.scala
@@ -0,0 +1,25 @@
+import scala.actors.Actor._
+import scala.actors.Future
+import scala.actors.Futures._
+object Test {
+ def main(args: Array[String]) {
+ val a = actor {
+ try {
+ react {
+ case ft: Future[a] =>
+ println(ft())
+ }
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
+ }
+ try {
+ val ft = future { 42 }
+ a ! ft
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
+ }
+}
diff --git a/test/files/jvm/t1461.scala b/test/files/jvm/t1461.scala
index f0e3cea6cd..a963ec6a12 100644
--- a/test/files/jvm/t1461.scala
+++ b/test/files/jvm/t1461.scala
@@ -3,7 +3,7 @@ object Test {
def main(args: Array[String]) {
val jl = classOf[Foo].getMethod("jl", classOf[Baz[_]])
jl.getGenericParameterTypes // works fine
-
+
val l = classOf[Foo].getMethod("l", classOf[Baz[_]])
// By debugger inspection l.signature is (Ltest/Baz<J>;)V
l.getGenericParameterTypes // throws GenericSignatureFormatError
diff --git a/test/files/jvm/t1464/MyTrait.scala b/test/files/jvm/t1464/MyTrait.scala
index 0b8ccc412b..014ddf86c3 100644
--- a/test/files/jvm/t1464/MyTrait.scala
+++ b/test/files/jvm/t1464/MyTrait.scala
@@ -1,5 +1,5 @@
trait MyTrait {
type K
def findChildByClass[T <: K with MyTrait]: Unit
-
+
}
diff --git a/test/files/jvm/t1600.scala b/test/files/jvm/t1600.scala
new file mode 100644
index 0000000000..7e23687425
--- /dev/null
+++ b/test/files/jvm/t1600.scala
@@ -0,0 +1,76 @@
+
+/**
+ * Checks that serialization of hash-based collections works correctly if the hashCode
+ * changes on deserialization.
+ */
+object Test {
+
+ import collection._
+ def main(args: Array[String]) {
+ for (i <- Seq(0, 1, 2, 10, 100)) {
+ def entries = (0 until i).map(i => (new Foo, i)).toList
+ def elements = entries.map(_._1)
+
+ val maps = Seq[Map[Foo, Int]](new mutable.HashMap, new mutable.LinkedHashMap,
+ immutable.HashMap.empty).map(_ ++ entries)
+ test[Map[Foo, Int]](maps, entries.size, assertMap _)
+
+ val sets = Seq[Set[Foo]](new mutable.HashSet, new mutable.LinkedHashSet,
+ immutable.HashSet.empty).map(_ ++ elements)
+ test[Set[Foo]](sets, entries.size, assertSet _)
+ }
+ }
+
+ private def test[A <: AnyRef](collections: Seq[A], expectedSize: Int, assertFunction: (A, Int) => Unit) {
+ for (collection <- collections) {
+ assertFunction(collection, expectedSize)
+
+ val bytes = toBytes(collection)
+ Foo.hashCodeModifier = 1
+ val deserializedCollection = toObject[A](bytes)
+
+ assertFunction(deserializedCollection, expectedSize)
+ assert(deserializedCollection.getClass == collection.getClass,
+ "collection class should remain the same after deserialization ("+deserializedCollection.getClass+" != "+collection.getClass+")")
+ Foo.hashCodeModifier = 0
+ }
+ }
+
+ private def toObject[A](bytes: Array[Byte]): A = {
+ val in = new java.io.ObjectInputStream(new java.io.ByteArrayInputStream(bytes))
+ in.readObject.asInstanceOf[A]
+ }
+
+ private def toBytes(o: AnyRef): Array[Byte] = {
+ val bos = new java.io.ByteArrayOutputStream
+ val out = new java.io.ObjectOutputStream(bos)
+ out.writeObject(o)
+ out.close
+ bos.toByteArray
+ }
+
+ private def assertMap[A, B](map: Map[A, B], expectedSize: Int) {
+ assert(expectedSize == map.size, "expected map size: " + expectedSize + ", actual size: " + map.size)
+ map.foreach { case (k, v) =>
+ assert(map.contains(k), "contains should return true for key in the map, key: " + k)
+ assert(map(k) == v)
+ }
+ }
+
+ private def assertSet[A](set: Set[A], expectedSize: Int) {
+ assert(expectedSize == set.size, "expected set size: " + expectedSize + ", actual size: " + set.size)
+ set.foreach { e => assert(set.contains(e), "contains should return true for element in the set, element: " + e) }
+ }
+
+ object Foo {
+ /* Used to simulate a hashCode change caused by deserializing an instance with an
+ * identity-based hashCode in another JVM.
+ */
+ var hashCodeModifier = 0
+ }
+
+ @serializable
+ class Foo {
+ override def hashCode = System.identityHashCode(this) + Foo.hashCodeModifier
+ }
+}
diff --git a/test/files/jvm/t1948.scala b/test/files/jvm/t1948.scala
index fc1fedac1f..084c956398 100644
--- a/test/files/jvm/t1948.scala
+++ b/test/files/jvm/t1948.scala
@@ -4,9 +4,21 @@ import scala.actors.Actor._
object Test {
def main (args: Array[String]) {
- val actors = (1 to 1000).toList map { x => actor { loop { react {
- case x: Array[Int] => reply ("OK"); exit }}}}
+ val actors = (1 to 1000).toList map { x => actor {
+ try {
+ loop { react {
+ case x: Array[Int] => reply ("OK"); exit }}
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
+ } }
+ try {
actors foreach { x => x !? new Array[Int] (1000000) }
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
}
}
diff --git a/test/files/jvm/t2104.scala b/test/files/jvm/t2104.scala
index e672f02578..655d74cee5 100644
--- a/test/files/jvm/t2104.scala
+++ b/test/files/jvm/t2104.scala
@@ -28,7 +28,7 @@ object Test
tp
}
- implicit val name="bug2104"
+ implicit val name="t2104"
val chars=List('\n','\r','a')
type Cs = List[Char]
diff --git a/test/files/jvm/t2359.scala b/test/files/jvm/t2359.scala
index 1b4d5e0a27..69c69d7b3b 100644
--- a/test/files/jvm/t2359.scala
+++ b/test/files/jvm/t2359.scala
@@ -3,19 +3,44 @@ import scala.actors.Futures._
object Test {
def main(args: Array[String]) {
val x = future {
+ try {
System.out.println(1)
future {
+ try {
System.out.println(2)
future {
+ try {
System.out.println(3)
future {
+ try {
System.out.println(4)
future {
+ try {
System.out.println(5)
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
}()
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
}()
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
}()
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
}()
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
}()
}
}
diff --git a/test/files/jvm/t2470.check b/test/files/jvm/t2470.check
new file mode 100644
index 0000000000..11539b2a9f
--- /dev/null
+++ b/test/files/jvm/t2470.check
@@ -0,0 +1 @@
+List(@Action(block=ACTION))
diff --git a/test/files/jvm/t2470.cmds b/test/files/jvm/t2470.cmds
new file mode 100644
index 0000000000..b4ef0f4aeb
--- /dev/null
+++ b/test/files/jvm/t2470.cmds
@@ -0,0 +1,3 @@
+javac Action.java Task.java
+scalac Test_1.scala
+scalac Read_Classfile_2.scala
diff --git a/test/files/jvm/t2470/Action.java b/test/files/jvm/t2470/Action.java
new file mode 100644
index 0000000000..62c71c43f1
--- /dev/null
+++ b/test/files/jvm/t2470/Action.java
@@ -0,0 +1,6 @@
+import java.lang.annotation.*;
+
+@Retention(value=RetentionPolicy.RUNTIME)
+public @interface Action {
+ Task.Scope block() default Task.Scope.ACTION;
+}
diff --git a/test/files/jvm/t2470/Read_Classfile_2.scala b/test/files/jvm/t2470/Read_Classfile_2.scala
new file mode 100644
index 0000000000..07961776dd
--- /dev/null
+++ b/test/files/jvm/t2470/Read_Classfile_2.scala
@@ -0,0 +1,3 @@
+class Read {
+ val t = Test
+}
diff --git a/test/files/jvm/t2470/Task.java b/test/files/jvm/t2470/Task.java
new file mode 100644
index 0000000000..64004b5867
--- /dev/null
+++ b/test/files/jvm/t2470/Task.java
@@ -0,0 +1,3 @@
+class Task {
+ public enum Scope { ACTION, HIKA }
+}
diff --git a/test/files/jvm/t2470/Test_1.scala b/test/files/jvm/t2470/Test_1.scala
new file mode 100644
index 0000000000..00cf287482
--- /dev/null
+++ b/test/files/jvm/t2470/Test_1.scala
@@ -0,0 +1,11 @@
+object Test {
+ class Foo {
+ @Action(block = Task.Scope.ACTION)
+ def foo = 0
+ }
+
+ def main(args: Array[String]) {
+ val m = classOf[Foo].getDeclaredMethods().find(_.toString.contains("foo")).get
+ println(m.getAnnotations().toList)
+ }
+}
diff --git a/test/files/jvm/t2511.check b/test/files/jvm/t2511.check
index ec747fa47d..004b8e2031 100644
--- a/test/files/jvm/t2511.check
+++ b/test/files/jvm/t2511.check
@@ -1 +1,2 @@
-null \ No newline at end of file
+null
+bippy
diff --git a/test/files/jvm/t2511.scala b/test/files/jvm/t2511.scala
index d4b5e83d0f..eb57dc503d 100644
--- a/test/files/jvm/t2511.scala
+++ b/test/files/jvm/t2511.scala
@@ -4,6 +4,7 @@ object Test {
trait IMyMessage extends Serializable {
@transient var message: String = null
+ var message2: String = null
}
class MyMessage extends IMyMessage
@@ -13,6 +14,7 @@ object Test {
val out = new ObjectOutputStream(buf)
val m = new MyMessage
m.message = "foo"
+ m.message2 = "bippy"
out.writeObject(m)
out.flush
buf.toByteArray
@@ -25,6 +27,9 @@ object Test {
def main(args: Array[String]) {
val m = unserialize(serialize)
- println(m.message)
+ // Xcheckinit freaks out here but its nullness is what we're testing
+ try println(m.message)
+ catch { case _: UninitializedFieldError => println("null") }
+ println(m.message2)
}
}
diff --git a/test/files/jvm/t2515.scala b/test/files/jvm/t2515.scala
deleted file mode 100644
index 83cb058168..0000000000
--- a/test/files/jvm/t2515.scala
+++ /dev/null
@@ -1,40 +0,0 @@
-import scala.actors.{Futures, TIMEOUT}
-import scala.actors.Actor._
-
-object Test {
-
- def compute(): Option[Boolean] = {
- val fts = for (j <- 0 until 5) yield Futures.future {
- receiveWithin (100) {
- case TIMEOUT => true
- case other => false
- }
- }
- val done = Futures.awaitAll(2000, fts.toArray: _*) // list to array, as varargs
- if (done.contains(None))
- None
- else
- Some(true)
- }
-
- def main(args:Array[String]) : Unit = {
- val format = new java.text.DecimalFormat("000.00'ms'")
- var iter = 1
- val done = 11
- while (iter < done) {
- val start = System.nanoTime()
- val result = compute()
- val time = System.nanoTime() - start
- result match {
- case Some(result) =>
- //printf("Iteration %2d succeeded after %s %n", iter, format.format(time / 1e6))
- printf("Iteration %2d succeeded%n", iter)
- iter += 1
- case None =>
- printf(">>>> Iteration %2d failed after %s <<<<< %n", iter, format.format(time / 1e6))
- iter = done
- }
- }
- }
-
-}
diff --git a/test/files/jvm/t2530.scala b/test/files/jvm/t2530.scala
index 642fb05a5d..c2925a92d1 100644
--- a/test/files/jvm/t2530.scala
+++ b/test/files/jvm/t2530.scala
@@ -50,6 +50,7 @@ case class Matrix(numRows: Int, numCols: Int, values: Array[Double]) {
val rows = for (j <- 0 until m) yield {
Futures.future {
+ try {
val b_j = new Array[Double](n)
var k = 0
while (k < n) { // sadly, while loops are still faster than for loops
@@ -69,13 +70,22 @@ case class Matrix(numRows: Int, numCols: Int, values: Array[Double]) {
}
//printf("future %d of %d completed.%n", j, m)
j
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
}
}
// rows.foreach { x=> x() } // This appears to force sequential execution, so use:
// timeout is 10 years; see http://lampsvn.epfl.ch/trac/scala/ticket/2515
-
- val done = Futures.awaitAll(10*365*24*60*60*1000, rows.toArray : _*) // list to array, as varargs.
+ val done: List[Option[Any]] = try {
+ Futures.awaitAll(10*365*24*60*60*1000, rows.toArray : _*) // list to array, as varargs.
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ List()
+ }
if (done.contains(None))
None
diff --git a/test/files/jvm/t2570.check b/test/files/jvm/t2570.check
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/test/files/jvm/t2570.check
diff --git a/test/files/jvm/t2570/Test.scala b/test/files/jvm/t2570/Test.scala
new file mode 100644
index 0000000000..7944aedae6
--- /dev/null
+++ b/test/files/jvm/t2570/Test.scala
@@ -0,0 +1,3 @@
+class Test2 extends Test1[Test3[Test4]]
+class Test4
+object Test extends Application {} \ No newline at end of file
diff --git a/test/files/jvm/t2570/Test1.java b/test/files/jvm/t2570/Test1.java
new file mode 100644
index 0000000000..f305736581
--- /dev/null
+++ b/test/files/jvm/t2570/Test1.java
@@ -0,0 +1,2 @@
+public class Test1<T extends Test3> {
+} \ No newline at end of file
diff --git a/test/files/jvm/t2570/Test3.java b/test/files/jvm/t2570/Test3.java
new file mode 100644
index 0000000000..97603b5ca6
--- /dev/null
+++ b/test/files/jvm/t2570/Test3.java
@@ -0,0 +1,2 @@
+public class Test3<T> {
+} \ No newline at end of file
diff --git a/test/files/jvm/t2585.check b/test/files/jvm/t2585.check
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/test/files/jvm/t2585.check
diff --git a/test/files/jvm/t2585/Test.java b/test/files/jvm/t2585/Test.java
new file mode 100644
index 0000000000..51fe20d81e
--- /dev/null
+++ b/test/files/jvm/t2585/Test.java
@@ -0,0 +1,16 @@
+class J { S s ; }
+
+public class Test {
+ public static void main(String[] args) {
+ final X x = new X();
+ final OuterImpl o = new OuterImpl(x);
+
+ final OuterImpl.Inner i1 = o.newInner();
+ i1.getT().getI().getT().getI(); // <--- Error: "The method getI() is undefined for the type Object"
+
+ final Outer<X>.Inner i2 = o.newInner();
+ i2.getT().getI().getT().getI(); // <--- Error: "The method getI() is undefined for the type Object"
+
+ HashMap<String, String> map = new HashMap<String, String>();
+ }
+} \ No newline at end of file
diff --git a/test/files/jvm/t2585/genericouter.scala b/test/files/jvm/t2585/genericouter.scala
new file mode 100644
index 0000000000..e06aa8101e
--- /dev/null
+++ b/test/files/jvm/t2585/genericouter.scala
@@ -0,0 +1,25 @@
+case class S(n:Int)
+
+trait TraversableLike[+A, +Repr] {
+ class WithFilter(p: A => Boolean)
+ def withFilter(p: A => Boolean): WithFilter = new WithFilter(p)
+}
+
+class HashMap[K, +V] extends TraversableLike[(K, V), HashMap[K, V]]
+
+class Outer[T](val t: T) {
+ class Inner {
+ def getT : T = t
+ }
+}
+
+class OuterImpl(x: X) extends Outer[X](x) {
+ def newInner = new Inner
+}
+
+class X {
+ def getI : Outer[X]#Inner = {
+ val oImpl = new OuterImpl(this)
+ new oImpl.Inner
+ }
+} \ No newline at end of file
diff --git a/test/files/jvm/t2827.check b/test/files/jvm/t2827.check
new file mode 100644
index 0000000000..c318e01ae5
--- /dev/null
+++ b/test/files/jvm/t2827.check
@@ -0,0 +1,3 @@
+Larry
+Curly
+Moe
diff --git a/test/files/jvm/t2827.scala b/test/files/jvm/t2827.scala
new file mode 100644
index 0000000000..d89e68516b
--- /dev/null
+++ b/test/files/jvm/t2827.scala
@@ -0,0 +1,14 @@
+object Stooges extends Enumeration {
+ type Stooge = Value
+ val Larry, Curly, Moe = Value
+ def nextStooge(v:Stooges.Stooge):Stooges.Stooge =
+ Stooges((v.id+1) % Stooges.maxId)
+}
+
+object Test {
+ def main(args: Array[String]) {
+ println(Stooges.Larry)
+ println(Stooges.Curly)
+ println(Stooges.Moe)
+ }
+}
diff --git a/test/files/jvm/t3003.check b/test/files/jvm/t3003.check
new file mode 100644
index 0000000000..c69e389d13
--- /dev/null
+++ b/test/files/jvm/t3003.check
@@ -0,0 +1 @@
+List(List(@Annot(optionType=class java.lang.String)))
diff --git a/test/files/jvm/t3003.cmds b/test/files/jvm/t3003.cmds
new file mode 100644
index 0000000000..c00396627c
--- /dev/null
+++ b/test/files/jvm/t3003.cmds
@@ -0,0 +1,2 @@
+javac Annot.java
+scalac Test_1.scala
diff --git a/test/files/jvm/t3003/Annot.java b/test/files/jvm/t3003/Annot.java
new file mode 100644
index 0000000000..30dcb66bd7
--- /dev/null
+++ b/test/files/jvm/t3003/Annot.java
@@ -0,0 +1,6 @@
+import java.lang.annotation.*;
+
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Annot {
+ Class<?> optionType();
+}
diff --git a/test/files/jvm/t3003/Test_1.scala b/test/files/jvm/t3003/Test_1.scala
new file mode 100644
index 0000000000..38af66a25a
--- /dev/null
+++ b/test/files/jvm/t3003/Test_1.scala
@@ -0,0 +1,15 @@
+class C {
+ @Annot(optionType=classOf[String]) val k = 0
+}
+object Test {
+ def main(args: Array[String]) {
+ val xs = (
+ classOf[C].getDeclaredFields.toList
+ . sortBy(f => f.getName)
+ . map(f => f.getAnnotations.toList)
+ . filterNot (_.isEmpty) // there are extra fields under -Xcheckinit
+ )
+
+ println(xs)
+ }
+}
diff --git a/test/files/jvm/t3102.check b/test/files/jvm/t3102.check
new file mode 100644
index 0000000000..d705e0b20e
--- /dev/null
+++ b/test/files/jvm/t3102.check
@@ -0,0 +1,2 @@
+42
+OK
diff --git a/test/files/jvm/t3102.scala b/test/files/jvm/t3102.scala
new file mode 100644
index 0000000000..fbcf2e60e6
--- /dev/null
+++ b/test/files/jvm/t3102.scala
@@ -0,0 +1,36 @@
+import scala.actors.{Actor, TIMEOUT}
+import Actor._
+
+object Test {
+ def main(args: Array[String]) {
+ val a = actor {
+ try {
+ react {
+ case 'hello =>
+ reply(42)
+ }
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
+ }
+
+ val b = actor {
+ try {
+ self.trapExit = true
+ val ft = a !! 'hello
+ println(ft())
+ // no message should be left over in mailbox
+ reactWithin(0) {
+ case TIMEOUT =>
+ println("OK")
+ case any =>
+ println(any)
+ }
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
+ }
+ }
+}
diff --git a/test/files/jvm/t3356.check b/test/files/jvm/t3356.check
new file mode 100644
index 0000000000..25f47b70c9
--- /dev/null
+++ b/test/files/jvm/t3356.check
@@ -0,0 +1,3 @@
+sending download requests
+Couldn't download image because of java.lang.Exception: no connection
+Couldn't download image because of java.lang.Exception: no connection
diff --git a/test/files/jvm/t3356.scala b/test/files/jvm/t3356.scala
new file mode 100644
index 0000000000..a9e83fe503
--- /dev/null
+++ b/test/files/jvm/t3356.scala
@@ -0,0 +1,55 @@
+import scala.actors.{Actor, Exit, !, UncaughtException}
+import Actor._
+
+case class ImageInfo(text: String) {
+ def downloadImage(): ImageData = {
+ ImageData(text)
+ }
+}
+
+case class ImageData(text: String)
+case class Download(info: ImageInfo)
+
+object Test {
+
+ def scanForImageInfo(url: String): List[ImageInfo] =
+ List(ImageInfo("A"), ImageInfo("B"))
+
+ def renderImage(data: ImageData) {
+ println("rendering image "+data.text)
+ }
+
+ def renderImages(url: String) {
+ val imageInfos = scanForImageInfo(url)
+ println("sending download requests")
+ val dataFutures = for (info <- imageInfos) yield {
+ val loader = link {
+ react { case Download(info) =>
+ throw new Exception("no connection")
+ reply(info.downloadImage())
+ }; {}
+ }
+ loader !! Download(info)
+ }
+ var i = 0
+ loopWhile (i < imageInfos.size) {
+ i += 1
+ val FutureInput = dataFutures(i-1).inputChannel
+ react {
+ case FutureInput ! (data @ ImageData(_)) =>
+ renderImage(data)
+ case Exit(from, UncaughtException(_, Some(Download(info)), _, _, cause)) =>
+ println("Couldn't download image because of "+cause)
+ }
+ }
+ println("OK, all images rendered.")
+ }
+
+ def main(args: Array[String]) {
+ actor {
+ self.trapExit = true
+ renderImages("panorama.epfl.ch")
+ }
+ }
+
+}
diff --git a/test/files/jvm/t3365.check b/test/files/jvm/t3365.check
new file mode 100644
index 0000000000..0944b17279
--- /dev/null
+++ b/test/files/jvm/t3365.check
@@ -0,0 +1,5 @@
+'hello
+'hello
+'hello
+'hello
+'hello
diff --git a/test/files/jvm/t3365.scala b/test/files/jvm/t3365.scala
new file mode 100644
index 0000000000..b94e804e63
--- /dev/null
+++ b/test/files/jvm/t3365.scala
@@ -0,0 +1,65 @@
+import scala.actors.{ReplyReactor, Channel, Actor, Future}
+
+case class ChannelMsg(chan: Channel[Any])
+
+class MyActor extends Actor {
+ def act() {
+ try {
+ val chan = new Channel[Any](this)
+ loop {
+ react {
+ case other: ReplyReactor =>
+ other ! ChannelMsg(chan)
+ loop {
+ chan.react {
+ case 'hello =>
+ reply('hello)
+ case 'stop =>
+ exit()
+ }
+ }
+ }
+ }
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
+ }
+}
+
+object Test {
+ def main(args: Array[String]) {
+ val a = new MyActor
+ a.start()
+
+ val b = new Actor {
+ def act() {
+ try {
+ react {
+ case ChannelMsg(c) =>
+ var i = 0
+ loop {
+ i += 1
+ val ft: Future[Any] = c !! 'hello
+ ft.inputChannel.react {
+ case msg =>
+ if (i % 10000 == 0)
+ println(msg)
+ if (i >= 50000) {
+ c ! 'stop
+ exit()
+ }
+ }
+ }
+ }
+ } catch {
+ case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
+ e.printStackTrace()
+ }
+ }
+ }
+ b.start()
+
+ a ! b
+ }
+}
diff --git a/test/files/jvm/t3407.check b/test/files/jvm/t3407.check
new file mode 100644
index 0000000000..a133c88bbe
--- /dev/null
+++ b/test/files/jvm/t3407.check
@@ -0,0 +1,10 @@
+result: 42
+result: 42
+result: 42
+result: 42
+result: 42
+result: 42
+result: 42
+result: 42
+result: 42
+result: 42
diff --git a/test/files/jvm/t3407.scala b/test/files/jvm/t3407.scala
new file mode 100644
index 0000000000..6c2ce85c71
--- /dev/null
+++ b/test/files/jvm/t3407.scala
@@ -0,0 +1,19 @@
+import scala.actors._, scala.actors.Actor._
+
+object Test {
+
+ def main(args: Array[String]) {
+ for (i <- 1 to 10) {
+ val ft = Futures.future { 42 }
+ println("result: " + ft())
+ }
+
+ for (i <- 1 to 10) {
+ receiveWithin(0) {
+ case TIMEOUT =>
+ case msg => println("unexpected: " + msg)
+ }
+ }
+ }
+
+}
diff --git a/test/files/jvm/t3412-channel.check b/test/files/jvm/t3412-channel.check
new file mode 100644
index 0000000000..954c6e835d
--- /dev/null
+++ b/test/files/jvm/t3412-channel.check
@@ -0,0 +1,10 @@
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
diff --git a/test/files/jvm/t3412-channel.scala b/test/files/jvm/t3412-channel.scala
new file mode 100644
index 0000000000..fcc439b488
--- /dev/null
+++ b/test/files/jvm/t3412-channel.scala
@@ -0,0 +1,38 @@
+import scala.actors._, scala.actors.Actor._, scala.actors.Futures._
+
+object Test {
+
+ def main(args: Array[String]) {
+
+ actor {
+ val C: Channel[Int] = new Channel[Int](self)
+
+ def respondAll(fts: List[Future[Int]], cnt: Int): Unit =
+ fts match {
+ case List() => C ! 0
+ case ft :: rest =>
+ if (cnt % 100 == 0)
+ println(ft())
+ respondAll(rest, cnt + 1)
+ }
+
+ actor {
+ val fts = for (_ <- 1 to 1000)
+ yield C !! (3, {case x: Int => x})
+
+ actor {
+ respondAll(fts.toList, 0)
+ }
+ }
+
+ loop {
+ C.react {
+ case 0 => exit()
+ case i => reply(i * 2)
+ }
+ }
+ }
+
+ }
+
+}
diff --git a/test/files/jvm/t3412.check b/test/files/jvm/t3412.check
new file mode 100644
index 0000000000..954c6e835d
--- /dev/null
+++ b/test/files/jvm/t3412.check
@@ -0,0 +1,10 @@
+6
+6
+6
+6
+6
+6
+6
+6
+6
+6
diff --git a/test/files/jvm/t3412.scala b/test/files/jvm/t3412.scala
new file mode 100644
index 0000000000..ced15ab5dc
--- /dev/null
+++ b/test/files/jvm/t3412.scala
@@ -0,0 +1,32 @@
+import scala.actors._, scala.actors.Actor._, scala.actors.Futures._
+
+object Test {
+
+ def main(args: Array[String]) {
+
+ val a = actor {
+ loop { react {
+ case i: Int => reply(i * 2)
+ case 'stop => exit()
+ } }
+ }
+
+ val fts = for (_ <- 1 to 1000)
+ yield a !! (3, {case x: Int => x})
+
+ def respondAll(fts: List[Future[Int]], cnt: Int): Unit =
+ fts match {
+ case List() => a ! 'stop
+ case ft :: rest =>
+ if (cnt % 100 == 0)
+ println(ft())
+ respondAll(rest, cnt + 1)
+ }
+
+ actor {
+ respondAll(fts.toList, 0)
+ }
+
+ }
+
+}
diff --git a/test/files/jvm/t3415/Hello.java b/test/files/jvm/t3415/Hello.java
new file mode 100644
index 0000000000..ae7206453b
--- /dev/null
+++ b/test/files/jvm/t3415/Hello.java
@@ -0,0 +1,3 @@
+public @interface Hello {
+ String msg() default "hoi";
+}
diff --git a/test/files/jvm/t3415/HelloWorld.scala b/test/files/jvm/t3415/HelloWorld.scala
new file mode 100644
index 0000000000..53bf55e444
--- /dev/null
+++ b/test/files/jvm/t3415/HelloWorld.scala
@@ -0,0 +1,4 @@
+object Test extends Application {
+ @Hello
+ def foo() { }
+}
diff --git a/test/files/jvm/t3470.check b/test/files/jvm/t3470.check
new file mode 100644
index 0000000000..94cb526756
--- /dev/null
+++ b/test/files/jvm/t3470.check
@@ -0,0 +1,3 @@
+A: started: 1
+A: started: 2
+A: started: 3
diff --git a/test/files/jvm/t3470.scala b/test/files/jvm/t3470.scala
new file mode 100644
index 0000000000..5e4242cdd7
--- /dev/null
+++ b/test/files/jvm/t3470.scala
@@ -0,0 +1,30 @@
+import scala.actors._
+
+object Test {
+
+ def expectActorState(a: Reactor[T] forSome { type T }, s: Actor.State.Value) {
+ var done = false
+ var i = 0
+ while (!done) {
+ i = i + 1
+ if (i == 10) { // only wait for 2 seconds total
+ println("FAIL ["+a+": expected "+s+"]")
+ done = true
+ }
+
+ Thread.sleep(200)
+ if (a.getState == s) // success
+ done = true
+ }
+ }
+
+ def main(args: Array[String]) {
+ val a = new Actor { var c = 0; def act() = { c += 1; println("A: started: " + c) } }
+ a.start()
+ expectActorState(a, Actor.State.Terminated)
+ a.restart()
+ expectActorState(a, Actor.State.Terminated)
+ a.restart()
+ }
+
+}
diff --git a/test/files/jvm/t3838.check b/test/files/jvm/t3838.check
new file mode 100644
index 0000000000..154227a350
--- /dev/null
+++ b/test/files/jvm/t3838.check
@@ -0,0 +1 @@
+caught java.lang.RuntimeException: unhandled timeout
diff --git a/test/files/jvm/t3838.scala b/test/files/jvm/t3838.scala
new file mode 100644
index 0000000000..ba8f15fc31
--- /dev/null
+++ b/test/files/jvm/t3838.scala
@@ -0,0 +1,15 @@
+import scala.actors.Actor._
+
+object Test {
+ def main(args: Array[String]) {
+ actor {
+ try {
+ receiveWithin(1) {
+ case str: String => println(str)
+ }
+ } catch {
+ case e: Exception => println("caught "+e)
+ }
+ }
+ }
+}
diff --git a/test/files/jvm/bug560bis.check b/test/files/jvm/t560bis.check
index 91eb4c19a2..91eb4c19a2 100644
--- a/test/files/jvm/bug560bis.check
+++ b/test/files/jvm/t560bis.check
diff --git a/test/files/jvm/t560bis.scala b/test/files/jvm/t560bis.scala
new file mode 100644
index 0000000000..b04303c8a0
--- /dev/null
+++ b/test/files/jvm/t560bis.scala
@@ -0,0 +1,21 @@
+object Test {
+import scala.xml._;
+
+ def bar(args: Seq[String]) = args match {
+ case Seq(a,b,c,d @ _*) => Console.println("cool!")
+ case _ => Console.println("bah")
+ }
+ def foo(args: List[String]) =
+ Elem(null,"bla",Null, TopScope, (args map {x => Text(x)}):_*) match {
+ case Elem(_,_,_,_,Text("1"),_*) =>
+ Console.println("cool!")
+ case _ =>
+ Console.println("bah")
+ }
+
+ def main(args: Array[String]) = {
+ val li = List("1","2","3","4")
+ bar(li)
+ foo(li)
+ }
+}
diff --git a/test/files/jvm/bug676.check b/test/files/jvm/t676.check
index 5d1c9925f9..5d1c9925f9 100644
--- a/test/files/jvm/bug676.check
+++ b/test/files/jvm/t676.check
diff --git a/test/files/jvm/bug676.scala b/test/files/jvm/t676.scala
index bcd27e4e21..bcd27e4e21 100644
--- a/test/files/jvm/bug676.scala
+++ b/test/files/jvm/t676.scala
diff --git a/test/files/jvm/t680.check b/test/files/jvm/t680.check
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/test/files/jvm/t680.check
diff --git a/test/files/jvm/bug680.scala b/test/files/jvm/t680.scala
index b0b0c9f7c0..b0b0c9f7c0 100644
--- a/test/files/jvm/bug680.scala
+++ b/test/files/jvm/t680.scala
diff --git a/test/files/jvm/throws-annot.scala b/test/files/jvm/throws-annot.scala
index 90b58b9976..b679b6c121 100644
--- a/test/files/jvm/throws-annot.scala
+++ b/test/files/jvm/throws-annot.scala
@@ -43,24 +43,24 @@ object TestThrows {
/** Test the top-level mirror that is has the annotations. */
object TL {
-
+
@throws(classOf[IOException])
def read(): Int = 0
-
+
@throws(classOf[ClassCastException])
@throws(classOf[IOException])
def readWith2(): Int = 0
-
+
@throws(classOf[IOException])
@Deprecated
@throws(classOf[NullPointerException])
def readMixed(): Int = 0
-
+
@Deprecated
@throws(classOf[IOException])
@throws(classOf[NullPointerException])
def readMixed2(): Int = 0
-
+
@Deprecated
def readNoEx(): Int = 0
}
diff --git a/test/files/jvm/ticket4283/AbstractFoo.java b/test/files/jvm/ticket4283/AbstractFoo.java
new file mode 100644
index 0000000000..74f3827fe3
--- /dev/null
+++ b/test/files/jvm/ticket4283/AbstractFoo.java
@@ -0,0 +1,5 @@
+package test;
+
+/* package private */ class AbstractFoo {
+ public int t;
+}
diff --git a/test/files/jvm/ticket4283/ScalaBipp.scala b/test/files/jvm/ticket4283/ScalaBipp.scala
new file mode 100644
index 0000000000..36dea9f4de
--- /dev/null
+++ b/test/files/jvm/ticket4283/ScalaBipp.scala
@@ -0,0 +1,5 @@
+package test
+
+class ScalaBipp extends AbstractFoo {
+ def make: Option[ScalaBipp] = Option(this)
+}
diff --git a/test/files/jvm/ticket4283/Test.scala b/test/files/jvm/ticket4283/Test.scala
new file mode 100644
index 0000000000..9bbfaab928
--- /dev/null
+++ b/test/files/jvm/ticket4283/Test.scala
@@ -0,0 +1,4 @@
+
+object Test extends App {
+ val x = (new test.ScalaBipp).make.get.t // java.lang.IllegalAccessError: tried to access class test.AbstractFoo from class other.IllegalAccess$
+}
diff --git a/test/files/jvm/typerep.scala b/test/files/jvm/typerep.scala
index 51a848240a..49a216c05c 100644
--- a/test/files/jvm/typerep.scala
+++ b/test/files/jvm/typerep.scala
@@ -4,7 +4,7 @@
import TypeRep._
-object Test extends Application {
+object Test extends App {
testPrimitives
testOptions
testLists
@@ -109,7 +109,7 @@ object testFuncs {
def f5(f: Int => Int, x: Int) = f(x)
println(getType(f5 _))
println(getType(f5(f1, 1)))
- println
+ println
}
class Foo {
diff --git a/test/files/jvm/unittest_io.scala b/test/files/jvm/unittest_io.scala
deleted file mode 100644
index 0cf1165ec8..0000000000
--- a/test/files/jvm/unittest_io.scala
+++ /dev/null
@@ -1,24 +0,0 @@
-import scala.testing.SUnit._
-import scala.io.Source
-
-object Test extends TestConsoleMain {
-
- def suite = new TestSuite(
- new ReadlinesTest
- )
-
- class ReadlinesTest extends TestCase("scala.io.Source method getLines()") {
-
- val src = Source.fromString("""
-This is a file
-it is split on several lines.
-
-isn't it?
-""")
- def runTest() = assertEquals("wrong number of lines",src.getLines("\n").toList.length,5) // five new lines in there
- //for(val line <- src.getLines) {
- // Console.print(line)
- //}
- }
-
-}
diff --git a/test/files/jvm/unittest_io_Jvm.check b/test/files/jvm/unittest_io_Jvm.check
new file mode 100644
index 0000000000..d6e855f939
--- /dev/null
+++ b/test/files/jvm/unittest_io_Jvm.check
@@ -0,0 +1,6 @@
+lines.size = 5
+
+This is a file
+it is split on several lines.
+
+isn't it?
diff --git a/test/files/jvm/unittest_io_Jvm.scala b/test/files/jvm/unittest_io_Jvm.scala
new file mode 100644
index 0000000000..1484774fb3
--- /dev/null
+++ b/test/files/jvm/unittest_io_Jvm.scala
@@ -0,0 +1,15 @@
+import scala.io.Source
+
+object Test {
+ def main(args: Array[String]) {
+ val lines = Source.fromString(
+ """|
+ |This is a file
+ |it is split on several lines.
+ |
+ |isn't it?
+ |""".stripMargin).getLines.toList
+ println("lines.size = " + lines.size)
+ lines.foreach(println)
+ }
+}
diff --git a/test/files/jvm/unittest_xml.scala b/test/files/jvm/unittest_xml.scala
index 1569bb13af..c03695f5c6 100644
--- a/test/files/jvm/unittest_xml.scala
+++ b/test/files/jvm/unittest_xml.scala
@@ -1,109 +1,101 @@
+import scala.xml.{ MetaData, Null, Utility, PrefixedAttribute, UnprefixedAttribute }
object Test {
- import scala.testing.SUnit._
- import scala.xml.{MetaData, Null, Utility, PrefixedAttribute, UnprefixedAttribute }
+ def main(args:Array[String]) = {
+ MetaDataTest.run()
+ UtilityTest.run()
+ }
- class MetaDataTest extends TestCase("scala.xml.MetaData") with Assert {
+ object MetaDataTest {
- import scala.xml.{HasKeyValue, TopScope, NamespaceBinding, Node, Atom, Text }
+ import scala.xml.{ TopScope, NamespaceBinding, Node, Atom, Text }
- def domatch(x:Node): Node = {
- val hasBar = new HasKeyValue("bar")
- x match {
- //case Node("foo", hasBar(z), _*) => z
- case Node("foo", md, _*) if !hasBar.unapplySeq(md).isEmpty =>
+ def domatch(x:Node): Node = {
+ x match {
+ case Node("foo", md @ UnprefixedAttribute(_, value, _), _*) if !value.isEmpty =>
md("bar")(0)
- case _ => new Atom(3)
- }
- }
- override def runTest = {
+ case _ => new Atom(3)
+ }
+ }
+
+ def run() {
var x: MetaData = Null
var s: NamespaceBinding = TopScope
- // testing method def apply(uri:String, scp:NamespaceBinding, k:String): Seq[Node]
- // def apply(k:String): Seq[Node]
+ // testing method def apply(uri:String, scp:NamespaceBinding, k:String): Seq[Node]
+ // def apply(k:String): Seq[Node]
- assertEquals("absent element (prefixed) 1", null, x("za://foo.com", s, "bar" ))
- assertEquals("absent element (unprefix) 1", null, x("bar"))
+ assert(null == x("za://foo.com", s, "bar" ), "absent element (prefixed) 1")
+ assert(null == x("bar"), "absent element (unprefix) 1")
- assertEquals("absent element (prefixed) 2", None, x.get("za://foo.com", s, "bar" ))
- assertEquals("absent element (unprefix) 2", None, x.get("bar"))
+ assert(None == x.get("za://foo.com", s, "bar" ), "absent element (prefixed) 2")
+ assert(None == x.get("bar"), "absent element (unprefix) 2")
x = new PrefixedAttribute("zo","bar", new Atom(42), x)
s = new NamespaceBinding("zo","za://foo.com",s)
- assertEquals("present element (prefixed) 3", new Atom(42), x("za://foo.com", s, "bar" ))
- assertEquals("present element (unprefix) 3", null, x("bar"))
+ assert(new Atom(42) == x("za://foo.com", s, "bar" ), "present element (prefixed) 3")
+ assert(null == x("bar"), "present element (unprefix) 3")
- assertEquals("present element (prefixed) 4", Some(new Atom(42)), x.get("za://foo.com", s, "bar" ))
- assertEquals("present element (unprefix) 4", None, x.get("bar"))
+ assert(Some(new Atom(42)) == x.get("za://foo.com", s, "bar" ), "present element (prefixed) 4")
+ assert(None == x.get("bar"), "present element (unprefix) 4")
x = new UnprefixedAttribute("bar","meaning", x)
- assertEquals("present element (prefixed) 5", null, x(null, s, "bar" ))
- assertEquals("present element (unprefix) 5", Text("meaning"), x("bar"))
+ assert(null == x(null, s, "bar"), "present element (prefixed) 5")
+ assert(Text("meaning") == x("bar"), "present element (unprefix) 5")
- assertEquals("present element (prefixed) 6", None, x.get(null, s, "bar" ))
- assertEquals("present element (unprefix) 6", Some(Text("meaning")), x.get("bar"))
+ assert(None == x.get(null, s, "bar" ), "present element (prefixed) 6")
+ assert(Some(Text("meaning")) == x.get("bar"), "present element (unprefix) 6")
- val z = <foo bar="gar"/>
- val z2 = <foo/>
+ val z = <foo bar="gar"/>
+ val z2 = <foo/>
- assertEquals("attribute extractor 1", Text("gar"), domatch(z))
- assertEquals("attribute extractor 2", new Atom(3), domatch(z2))
+ assert(Text("gar") == domatch(z), "attribute extractor 1")
+ assert(new Atom(3) == domatch(z2), "attribute extractor 2")
}
}
- class UtilityTest extends TestCase("scala.xml.Utility") with Assert {
- def runTest() = {
- assertTrue(Utility.isNameStart('b'))
- assertFalse(Utility.isNameStart(':'))
-
+ object UtilityTest {
+ def run() {
+ assert(Utility.isNameStart('b'))
+ assert(!Utility.isNameStart(':'))
- val x = <foo>
- <toomuchws/>
- </foo>
+ val x = <foo>
+ <toomuchws/>
+ </foo>
- val y = xml.Utility.trim(x)
+ val y = xml.Utility.trim(x)
- assertEquals("trim 1 ", 1, y match { case <foo><toomuchws/></foo> => 1 })
+ assert(1 == (y match { case <foo><toomuchws/></foo> => 1 }), "trim 1")
- val x2 = <foo>
- <toomuchws> a b b a </toomuchws>
- </foo>
+ val x2 = <foo>
+ <toomuchws> a b b a </toomuchws>
+ </foo>
- val y2 = xml.Utility.trim(x2)
+ val y2 = xml.Utility.trim(x2)
- assertEquals("trim 2 ", 2, y2 match { case <foo><toomuchws>a b b a</toomuchws></foo> => 2 })
+ assert(2 == (y2 match { case <foo><toomuchws>a b b a</toomuchws></foo> => 2 }), "trim 2")
+ val z = <bar>''</bar>
+ val z1 = z.toString
- val z = <bar>''</bar>
- val z1 = z.toString
+ assert("<bar>''</bar>" == z1, "apos unescaped")
- assertEquals("apos unescaped", "<bar>''</bar>", z1)
+ val q = xml.Utility.sort(<a g='3' j='2' oo='2' a='2'/>)
+ assert(" a=\"2\" g=\"3\" j=\"2\" oo=\"2\"" == xml.Utility.sort(q.attributes).toString)
- val q = xml.Utility.sort(<a g='3' j='2' oo='2' a='2'/>)
- assertEquals("sort attrib"+xml.Utility.sort(q.attributes).toString, " a=\"2\" g=\"3\" j=\"2\" oo=\"2\"", xml.Utility.sort(q.attributes).toString)
- val pp = new xml.PrettyPrinter(80,5)
- assertEquals("pretty print sorted attrib:"+pp.format(q), "<a a=\"2\" g=\"3\" j=\"2\" oo=\"2\"></a>", pp.format(q))
+ val pp = new xml.PrettyPrinter(80,5)
+ assert("<a a=\"2\" g=\"3\" j=\"2\" oo=\"2\"></a>" == pp.format(q))
- <hi>
- <there/>
- <guys/>
- </hi>.hashCode // Bug #777
- }
+ <hi>
+ <there/>
+ <guys/>
+ </hi>.hashCode // Bug #777
+ }
}
- def main(args:Array[String]) = {
- val ts = new TestSuite(
- new MetaDataTest,
- new UtilityTest
- )
- val tr = new TestResult()
- ts.run(tr)
- tr.failures foreach Console.println
- }
}
diff --git a/test/files/jvm/varargs.check b/test/files/jvm/varargs.check
new file mode 100644
index 0000000000..8379befe93
--- /dev/null
+++ b/test/files/jvm/varargs.check
@@ -0,0 +1,3 @@
+7
+10
+19 \ No newline at end of file
diff --git a/test/files/jvm/varargs/JavaClass.java b/test/files/jvm/varargs/JavaClass.java
new file mode 100644
index 0000000000..536e9a38fb
--- /dev/null
+++ b/test/files/jvm/varargs/JavaClass.java
@@ -0,0 +1,15 @@
+
+
+
+public class JavaClass {
+ public static <T> void varargz(int i, T... v) {
+ }
+
+ public static void callSomeAnnotations() {
+ VaClass va = new VaClass();
+ va.vs(4, "", "", "");
+ va.vi(1, 2, 3, 4);
+ varargz(5, 1.0, 2.0, 3.0);
+ va.vt(16, "", "", "");
+ }
+} \ No newline at end of file
diff --git a/test/files/jvm/varargs/VaClass.scala b/test/files/jvm/varargs/VaClass.scala
new file mode 100644
index 0000000000..8e9cbdbb3f
--- /dev/null
+++ b/test/files/jvm/varargs/VaClass.scala
@@ -0,0 +1,13 @@
+
+
+import annotation.varargs
+
+
+
+class VaClass {
+
+ @varargs def vs(a: Int, b: String*) = println(a + b.length)
+ @varargs def vi(a: Int, b: Int*) = println(a + b.sum)
+ @varargs def vt[T](a: Int, b: T*) = println(a + b.length)
+
+}
diff --git a/test/files/jvm/varargs/varargs.scala b/test/files/jvm/varargs/varargs.scala
new file mode 100644
index 0000000000..6d2e707bdf
--- /dev/null
+++ b/test/files/jvm/varargs/varargs.scala
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+object Test {
+ def main(args: Array[String]) {
+ JavaClass.callSomeAnnotations
+ }
+}
+
+
+
+
+
+
+
+
+
+
diff --git a/test/files/jvm/xml01.scala b/test/files/jvm/xml01.scala
index e305f516d7..2fab650637 100644
--- a/test/files/jvm/xml01.scala
+++ b/test/files/jvm/xml01.scala
@@ -1,12 +1,10 @@
import java.io.StringReader
import org.xml.sax.InputSource
-import scala.testing.SUnit._
import scala.util.logging._
import scala.xml._
-
-object Test extends Application with Assert {
+object Test extends App {
val e: scala.xml.MetaData = Null //Node.NoAttributes
val sc: scala.xml.NamespaceBinding = TopScope
@@ -18,211 +16,166 @@ object Test extends Application with Assert {
val c = new Node {
def label = "hello"
- override def hashCode() =
+ override def hashCode() =
Utility.hashCode(prefix, label, attributes.hashCode(), scope.hashCode(), child);
def child = Elem(null, "world", e, sc);
//def attributes = e;
override def text = ""
}
- assertSameElements(List(3), List(3))
-
println("equality")
- assertEquals(c, parsedxml11)
- assertEquals(parsedxml1, parsedxml11)
- assertSameElements(List(parsedxml1), List(parsedxml11))
- assertSameElements(Array(parsedxml1).toList, List(parsedxml11))
+ assert(c == parsedxml11)
+ assert(parsedxml1 == parsedxml11)
+ assert(List(parsedxml1) sameElements List(parsedxml11))
+ assert(Array(parsedxml1).toList sameElements List(parsedxml11))
val x2 = "<book><author>Peter Buneman</author><author>Dan Suciu</author><title>Data on ze web</title></book>";
val i = new InputSource(new StringReader(x2))
val x2p = XML.load(i)
- assertEquals(x2p, Elem(null, "book" , e, sc,
- Elem(null, "author", e, sc,Text("Peter Buneman")),
- Elem(null, "author", e, sc,Text("Dan Suciu")),
- Elem(null, "title" , e, sc,Text("Data on ze web"))));
+ assert(x2p == Elem(null, "book" , e, sc,
+ Elem(null, "author", e, sc,Text("Peter Buneman")),
+ Elem(null, "author", e, sc,Text("Dan Suciu")),
+ Elem(null, "title" , e, sc,Text("Data on ze web"))))
val xmlFile2 = "<bib><book><author>Peter Buneman</author><author>Dan Suciu</author><title>Data on ze web</title></book><book><author>John Mitchell</author><title>Foundations of Programming Languages</title></book></bib>";
val isrc2 = new InputSource(new StringReader(xmlFile2))
val parsedxml2 = XML.load(isrc2)
- // xmlFile2/book -> book,book
println("xpath \\")
+ assert(parsedxml1 \ "_" sameElements List(Elem(null,"world", e, sc)))
- assertSameElements(parsedxml1 \ "_" , List(Elem(null,"world", e, sc)))
-
- assertSameElements(parsedxml1 \ "world", List(Elem(null,"world", e, sc)))
+ assert(parsedxml1 \ "world" sameElements List(Elem(null,"world", e, sc)))
-/*
- Console.println( parsedxml2 \ "_" );
- Console.println( (parsedxml2 \ "_" ).iterator);
- for( val i <- (parsedxml2 \ "_" ).iterator) {
- Console.println( i );
- };
- */
-
- assertSameElements(
- parsedxml2 \ "_" ,
-
- List(
+ assert(
+ (parsedxml2 \ "_") sameElements List(
Elem(null,"book", e, sc,
- Elem(null,"author", e, sc, Text("Peter Buneman")),
- Elem(null,"author", e, sc, Text("Dan Suciu")),
+ Elem(null,"author", e, sc, Text("Peter Buneman")),
+ Elem(null,"author", e, sc, Text("Dan Suciu")),
Elem(null,"title" , e, sc, Text("Data on ze web"))),
Elem(null,"book",e,sc,
Elem(null,"author",e,sc,Text("John Mitchell")),
Elem(null,"title",e,sc,Text("Foundations of Programming Languages"))))
- );
- assertEquals( (parsedxml2 \ "author").length, 0 );
-
- assertSameElements(
- parsedxml2 \ "book",
+ )
+ assert((parsedxml2 \ "author").isEmpty)
- List(
+ assert(
+ (parsedxml2 \ "book") sameElements List(
Elem(null,"book",e,sc,
- Elem(null,"author", e, sc, Text("Peter Buneman")),
- Elem(null,"author", e, sc, Text("Dan Suciu")),
+ Elem(null,"author", e, sc, Text("Peter Buneman")),
+ Elem(null,"author", e, sc, Text("Dan Suciu")),
Elem(null,"title" , e, sc, Text("Data on ze web"))),
Elem(null,"book",e,sc,
Elem(null,"author", e, sc, Text("John Mitchell")),
Elem(null,"title" , e, sc, Text("Foundations of Programming Languages")))
)
- );
+ )
- assertSameElements(
-
- parsedxml2 \ "_" \ "_",
-
- List(
- Elem(null,"author", e, sc, Text("Peter Buneman")),
- Elem(null,"author", e, sc, Text("Dan Suciu")),
+ assert(
+ (parsedxml2 \ "_" \ "_") sameElements List(
+ Elem(null,"author", e, sc, Text("Peter Buneman")),
+ Elem(null,"author", e, sc, Text("Dan Suciu")),
Elem(null,"title" , e, sc, Text("Data on ze web")),
Elem(null,"author", e, sc, Text("John Mitchell")),
Elem(null,"title" , e, sc, Text("Foundations of Programming Languages"))
)
- );
-
- assertSameElements(
+ )
- parsedxml2 \ "_" \ "author",
-
- List(
- Elem(null,"author", e, sc, Text("Peter Buneman")),
- Elem(null,"author", e, sc, Text("Dan Suciu")),
+ assert(
+ (parsedxml2 \ "_" \ "author") sameElements List(
+ Elem(null,"author", e, sc, Text("Peter Buneman")),
+ Elem(null,"author", e, sc, Text("Dan Suciu")),
Elem(null,"author", e, sc, Text("John Mitchell"))
)
+ )
- );
-
- assertSameElements( (parsedxml2 \ "_" \ "_" \ "author"), List() );
+ assert((parsedxml2 \ "_" \ "_" \ "author").isEmpty)
Console.println("xpath \\\\ DESCENDANTS");
- assertSameElements(
-
- parsedxml2 \\ "author",
-
- List(
- Elem(null,"author", e, sc, Text("Peter Buneman")),
- Elem(null,"author", e, sc, Text("Dan Suciu")),
+ assert(
+ (parsedxml2 \\ "author") sameElements List(
+ Elem(null,"author", e, sc, Text("Peter Buneman")),
+ Elem(null,"author", e, sc, Text("Dan Suciu")),
Elem(null,"author", e, sc, Text("John Mitchell"))
)
+ )
- );
-
-
- assertSameElements(
-
- parsedxml2 \\ "title",
-
- List(
+ assert(
+ (parsedxml2 \\ "title") sameElements List(
Elem(null,"title", e, sc, Text("Data on ze web")),
Elem(null,"title", e, sc, Text("Foundations of Programming Languages")))
- );
+ )
println(
- (parsedxml2 \\ "book" ){ n:Node => n \ "title" == "Data on ze web" }
- );
+ (parsedxml2 \\ "book" ){ n:Node => (n \ "title") xml_== "Data on ze web" }
+ )
- assertEquals(
-
- (new NodeSeq { val theSeq = List( parsedxml2 ) }) \\ "_",
-
- List(
+ assert(
+ ((new NodeSeq { val theSeq = List( parsedxml2 ) }) \\ "_") sameElements List(
Elem(null,"bib",e,sc,
Elem(null,"book",e,sc,
- Elem(null, "author", e, sc, Text("Peter Buneman")),
- Elem(null, "author", e, sc, Text("Dan Suciu")),
+ Elem(null, "author", e, sc, Text("Peter Buneman")),
+ Elem(null, "author", e, sc, Text("Dan Suciu")),
Elem(null, "title" , e, sc, Text("Data on ze web"))),
Elem(null,"book",e,sc,
Elem(null,"author",e,sc,Text("John Mitchell")),
Elem(null,"title",e,sc,Text("Foundations of Programming Languages")))),
Elem(null,"book",e,sc,
- Elem(null,"author",e,sc,Text("Peter Buneman")),
- Elem(null,"author",e,sc,Text("Dan Suciu")),
+ Elem(null,"author",e,sc,Text("Peter Buneman")),
+ Elem(null,"author",e,sc,Text("Dan Suciu")),
Elem(null,"title",e,sc,Text("Data on ze web"))),
Elem(null,"author",e,sc,Text("Peter Buneman")),
- //Text("Peter Buneman"),
Elem(null,"author",e,sc,Text("Dan Suciu")),
- //Text("Dan Suciu"),
Elem(null,"title",e,sc,Text("Data on ze web")),
- //Text("Data on ze web"),
Elem(null,"book",e,sc,
Elem(null,"author",e,sc,Text("John Mitchell")),
Elem(null,"title",e,sc,Text("Foundations of Programming Languages"))),
Elem(null,"author",e,sc,Text("John Mitchell")),
- //Text("John Mitchell"),
Elem(null,"title",e,sc,Text("Foundations of Programming Languages"))
- //Text("Foundations of Programming Languages")
)
- );
-
- // test group node
- Console println "-- group nodes"
- val zx1: Node = Group { <a/><b/><c/> }
- val zy1 = <f>{zx1}</f>
- Console println zy1.toString()
+ )
- val zx2: Node = Group { List(<a/>,zy1,zx1) }
- Console println zx2.toString()
+ // test group node
+ Console println "-- group nodes"
+ val zx1: Node = Group { <a/><b/><c/> }
+ val zy1 = <f>{zx1}</f>
+ Console println zy1.toString()
- val zz1 = <xml:group><a/><b/><c/></xml:group>
+ val zx2: Node = Group { List(<a/>,zy1,zx1) }
+ Console println zx2.toString()
- assertTrue(zx1 == zz1)
- assertTrue(zz1.length == 3)
+ val zz1 = <xml:group><a/><b/><c/></xml:group>
- // unparsed
+ assert(zx1 xml_== zz1)
+ assert(zz1.length == 3)
- val uup = <xml:unparsed>&<<>""^%@$!#</xml:unparsed>
- assertTrue(uup == "&<<>\"\"^%@$!#")
- // test unicode escapes backslash u
+ // unparsed
println("attribute value normalization")
val xmlAttrValueNorm = "<personne id='p0003' nom='&#x015e;ahingöz' />";
- {
- val isrcA = new InputSource( new StringReader(xmlAttrValueNorm) );
- val parsedxmlA = XML.load(isrcA);
- val c = (parsedxmlA \ "@nom").text.charAt(0);
- //Console.println("char '"+c+"' \u015e");
- assertTrue(c == '\u015e');
- }
- // buraq: if the following test fails with 'character x not allowed', it is
- // related to the mutable variable in a closures in MarkupParser.parsecharref
- {
- val isr = scala.io.Source.fromString(xmlAttrValueNorm);
- val pxmlB = scala.xml.parsing.ConstructingParser.fromSource(isr,false);
- val parsedxmlB = pxmlB.element(TopScope);
- val c = (parsedxmlB \ "@nom").text.charAt(0);
- //Console.println("char '"+c+"' \u015e");
- assertTrue(c == '\u015e');
- }
+ {
+ val isrcA = new InputSource( new StringReader(xmlAttrValueNorm) );
+ val parsedxmlA = XML.load(isrcA);
+ val c = (parsedxmlA \ "@nom").text.charAt(0);
+ assert(c == '\u015e');
+ }
+ // buraq: if the following test fails with 'character x not allowed', it is
+ // related to the mutable variable in a closures in MarkupParser.parsecharref
+ {
+ val isr = scala.io.Source.fromString(xmlAttrValueNorm);
+ val pxmlB = scala.xml.parsing.ConstructingParser.fromSource(isr,false);
+ val parsedxmlB = pxmlB.element(TopScope);
+ val c = (parsedxmlB \ "@nom").text.charAt(0);
+ assert(c == '\u015e');
+ }
// #60 test by round trip
val p = scala.xml.parsing.ConstructingParser.fromSource(scala.io.Source.fromString("<foo bar:attr='&amp;'/>"),true)
val n = p.element(new scala.xml.NamespaceBinding("bar","BAR",scala.xml.TopScope))(0)
- assertFalse( n.attributes.get("BAR", n, "attr").isEmpty)
+ assert( n.attributes.get("BAR", n, "attr").nonEmpty)
}
diff --git a/test/files/jvm/xml02.check b/test/files/jvm/xml02.check
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/test/files/jvm/xml02.check
diff --git a/test/files/jvm/xml02.scala b/test/files/jvm/xml02.scala
index 0cbeb27ce2..b830a0e694 100644
--- a/test/files/jvm/xml02.scala
+++ b/test/files/jvm/xml02.scala
@@ -1,6 +1,11 @@
-import testing.SUnit._
+object Test {
-object Test extends TestConsoleMain {
+ def main(args: Array[String]) {
+ XmlEx.run()
+ XmlEy.run()
+ XmlPat.run()
+ DodgyNamespace.run()
+ }
import scala.xml.{NodeSeq, Utility}
import NodeSeq.seqToNodeSeq
@@ -15,64 +20,59 @@ object Test extends TestConsoleMain {
val bx = <hello foo="bar&amp;x"></hello>
- object XmlEx extends TestCase("attributes") with Assert {
+ object XmlEx {
- override def runTest = {
- assertTrue("@one", ax \ "@foo" == "bar") // uses NodeSeq.view!
- assertTrue("@two", ax \ "@foo" == xml.Text("bar")) // dto.
- assertTrue("@three", bx \ "@foo" == "bar&x") // dto.
- assertTrue ("@four", (bx \ "@foo") sameElements List(xml.Text("bar&x")))
- assertEquals("@five", "<hello foo=\"bar&amp;x\"></hello>", bx.toString)
+ def run() {
+ assert((ax \ "@foo") xml_== "bar") // uses NodeSeq.view!
+ assert((ax \ "@foo") xml_== xml.Text("bar")) // dto.
+ assert((bx \ "@foo") xml_== "bar&x") // dto.
+ assert((bx \ "@foo") xml_sameElements List(xml.Text("bar&x")))
+ assert("<hello foo=\"bar&amp;x\"></hello>" == bx.toString)
}
}
- object XmlEy extends TestCase("attributes with namespace") with Assert {
- override def runTest = {
+ object XmlEy {
+ def run() {
val z = ax \ "@{the namespace from outer space}foo"
- assertTrue("@six", ax \ "@{the namespace from outer space}foo" == "baz")
- assertTrue("@eight", cx \ "@{the namespace from outer space}foo" == "baz")
-
+ assert((ax \ "@{the namespace from outer space}foo") xml_== "baz")
+ assert((cx \ "@{the namespace from outer space}foo") xml_== "baz")
+
try {
ax \ "@"
- assertTrue("wrong1", false)
+ assert(false)
} catch {
- case _: IllegalArgumentException =>
+ case _: IllegalArgumentException =>
}
try {
ax \ "@{"
- assertTrue("wrong2", false)
+ assert(false)
} catch {
- case _: IllegalArgumentException =>
+ case _: IllegalArgumentException =>
}
try {
ax \ "@{}"
- assertTrue("wrong3", false)
+ assert(false)
} catch {
- case _: IllegalArgumentException =>
+ case _: IllegalArgumentException =>
}
-
+
}
}
- object XmlPat extends TestCase("patterns") with Assert {
- override def runTest = {
- assertTrue(<hello/> match { case <hello/> => true; case _ => false; })
- assertTrue(<x:ga xmlns:x="z"/> match { case <x:ga/> => true; case _ => false; });
- assertTrue(Utility.trim(cx) match { case n @ <hello>crazy text world</hello> if n \ "@foo" == "bar" => true; })
- assertTrue(Utility.trim(cx) match { case n @ <z:hello>crazy text world</z:hello> if n \ "@foo" == "bar" => true; })
+ object XmlPat {
+ def run() {
+ assert(<hello/> match { case <hello/> => true; case _ => false; })
+ assert(<x:ga xmlns:x="z"/> match { case <x:ga/> => true; case _ => false; });
+ assert(Utility.trim(cx) match { case n @ <hello>crazy text world</hello> if (n \ "@foo") xml_== "bar" => true; })
+ assert(Utility.trim(cx) match { case n @ <z:hello>crazy text world</z:hello> if (n \ "@foo") xml_== "bar" => true; })
}
}
- object DodgyNamespace extends TestCase("DodgyNamespace") with Assert {
- override def runTest = {
+ object DodgyNamespace {
+ def run() {
val x = <flog xmlns:ee="http://ee.com"><foo xmlns:dog="http://dog.com"><dog:cat/></foo></flog>
- assertTrue(x.toString.matches(".*xmlns:dog=\"http://dog.com\".*"));
+ assert(x.toString.matches(".*xmlns:dog=\"http://dog.com\".*"));
}
}
- def suite = new TestSuite(
- XmlEx,
- XmlEy,
- XmlPat,
- DodgyNamespace
- )
+
}
diff --git a/test/files/jvm/xml03syntax.check b/test/files/jvm/xml03syntax.check
index fd1e10cac9..75dc539137 100644
--- a/test/files/jvm/xml03syntax.check
+++ b/test/files/jvm/xml03syntax.check
@@ -1,9 +1,18 @@
+true
+true
+true
<hello>world</hello>
+true
<hello>1.5</hello>
+true
<hello>5</hello>
+true
<hello>true</hello>
+true
<hello>5</hello>
+true
<hello>27</hello>
+true
<hello>1 2 3 4</hello>
1
2
diff --git a/test/files/jvm/xml03syntax.scala b/test/files/jvm/xml03syntax.scala
index 2fee0243a6..2c93f7c176 100644
--- a/test/files/jvm/xml03syntax.scala
+++ b/test/files/jvm/xml03syntax.scala
@@ -1,7 +1,6 @@
-import scala.testing.SUnit._
import scala.xml._
-object Test extends AnyRef with Assert {
+object Test {
private def handle[A](x: Node): A = {
println(x)
@@ -9,15 +8,15 @@ object Test extends AnyRef with Assert {
}
def main(args: Array[String]) {
- test1
- test2
- test3
+ test1()
+ test2()
+ test3()
}
- private def test1 {
+ private def test1() {
val xNull = <hello>{null}</hello> // these used to be Atom(unit), changed to empty children
- assertSameElements(xNull.child, Nil)
+ println(xNull.child sameElements Nil)
val x0 = <hello>{}</hello> // these used to be Atom(unit), changed to empty children
val x00 = <hello>{ }</hello> // dto.
@@ -25,29 +24,29 @@ object Test extends AnyRef with Assert {
val xa = <hello>{ "world" }</hello>
- assertSameElements(x0.child, Nil)
- assertSameElements(x00.child, Nil)
- assertEquals(handle[String](xa), "world")
+ println(x0.child sameElements Nil)
+ println(x00.child sameElements Nil)
+ println(handle[String](xa) == "world")
val xb = <hello>{ 1.5 }</hello>
- assertEquals(handle[Double](xb), 1.5)
+ println(handle[Double](xb) == 1.5)
val xc = <hello>{ 5 }</hello>
- assertEquals(handle[Int](xc), 5)
+ println(handle[Int](xc) == 5)
val xd = <hello>{ true }</hello>
- assertEquals(handle[Boolean](xd), true)
+ println(handle[Boolean](xd) == true)
val xe = <hello>{ 5:Short }</hello>
- assertEquals(handle[Short](xe), 5:Short)
+ println(handle[Short](xe) == (5:Short))
val xf = <hello>{ val x = 27; x }</hello>
- assertEquals(handle[Int](xf), 27)
+ println(handle[Int](xf) == 27)
val xg = <hello>{ List(1,2,3,4) }</hello>
@@ -68,7 +67,7 @@ object Test extends AnyRef with Assert {
/** see SVN r13821 (emir): support for <elem key={x:Option[Seq[Node]]} />,
* so that Options can be used for optional attributes.
*/
- private def test2 {
+ private def test2() {
val x1: Option[Seq[Node]] = Some(<b>hello</b>)
val n1 = <elem key={x1} />;
println("node="+n1+", key="+n1.attribute("key"))
@@ -78,7 +77,7 @@ object Test extends AnyRef with Assert {
println("node="+n2+", key="+n2.attribute("key"))
}
- private def test3 {
+ private def test3() {
// this demonstrates how to handle entities
val s = io.Source.fromString("<a>&nbsp;</a>")
object parser extends xml.parsing.ConstructingParser(s, false /*ignore ws*/) {
diff --git a/test/files/jvm/xml04embed.check b/test/files/jvm/xml04embed.check
index e69de29bb2..e71e645149 100644
--- a/test/files/jvm/xml04embed.check
+++ b/test/files/jvm/xml04embed.check
@@ -0,0 +1,3 @@
+{
+}
+{}{}{}
diff --git a/test/files/jvm/xml04embed.scala b/test/files/jvm/xml04embed.scala
index 249e8ceb06..fa453e4295 100644
--- a/test/files/jvm/xml04embed.scala
+++ b/test/files/jvm/xml04embed.scala
@@ -1,15 +1,10 @@
-import scala.testing.SUnit._
-
-object Test extends AnyRef with Assert {
+object Test {
def main(args: Array[String]) {
val ya = <x>{{</x>
- assertEquals(ya.text, "{")
-
+ println(ya.text)
val ua = <x>}}</x>
- assertEquals(ua.text, "}")
-
+ println(ua.text)
val za = <x>{{}}{{}}{{}}</x>
- assertEquals(za.text, "{}{}{}")
-
+ println(za.text)
}
}
diff --git a/test/files/jvm/xml05.check b/test/files/jvm/xml05.check
new file mode 100644
index 0000000000..00e617c578
--- /dev/null
+++ b/test/files/jvm/xml05.check
@@ -0,0 +1,11 @@
+Type in expressions to have them evaluated.
+Type :help for more information.
+
+scala>
+
+scala> <city name="San Jos&eacute;"/>
+res0: scala.xml.Elem = <city name="San Jos&eacute;"></city>
+
+scala>
+
+scala>
diff --git a/test/files/jvm/xml05.scala b/test/files/jvm/xml05.scala
new file mode 100644
index 0000000000..52ae255393
--- /dev/null
+++ b/test/files/jvm/xml05.scala
@@ -0,0 +1,7 @@
+import scala.tools.partest.ReplTest
+
+object Test extends ReplTest {
+ def code = """
+<city name="San Jos&eacute;"/>
+ """
+} \ No newline at end of file
diff --git a/test/files/jvm/xmlattr.check b/test/files/jvm/xmlattr.check
index e69de29bb2..af80b60fb2 100644
--- a/test/files/jvm/xmlattr.check
+++ b/test/files/jvm/xmlattr.check
@@ -0,0 +1,18 @@
+true
+true
+true
+true
+true
+true
+removal of duplicates for unprefixed attributes in append = 1
+true
+true
+true
+true
+true
+true
+true
+true
+true
+<b x="&amp;"></b>
+<b x="&amp;"></b>
diff --git a/test/files/jvm/xmlattr.scala b/test/files/jvm/xmlattr.scala
index a947adf231..d214642eb6 100644
--- a/test/files/jvm/xmlattr.scala
+++ b/test/files/jvm/xmlattr.scala
@@ -1,60 +1,63 @@
-import testing.SUnit.{Assert, TestCase, TestConsoleMain, TestSuite}
-import xml.{NodeSeq, Null, Text, UnprefixedAttribute}
+import xml.{ NodeSeq, Null, Text, UnprefixedAttribute }
-object Test extends TestConsoleMain {
- def suite = new TestSuite(UnprefixedAttributeTest, AttributeWithOptionTest)
-
- object UnprefixedAttributeTest extends TestCase("UnprefixedAttribute") with Assert {
- override def runTest {
- var x = new UnprefixedAttribute("foo","bar", Null)
-
- // always assertX(expected, actual)
- assertEquals(Some(Text("bar")), x.get("foo"));
- assertEquals(Text("bar"), x("foo"))
- assertEquals(None, x.get("no_foo"))
- assertEquals(null, x("no_foo"))
+object Test {
+ def main(args: Array[String]) {
+ UnprefixedAttributeTest()
+ AttributeWithOptionTest()
+ AttributeOutputTest()
+ }
+
+ object UnprefixedAttributeTest {
+ def apply() {
+ val x = new UnprefixedAttribute("foo","bar", Null)
+ println(Some(Text("bar")) == x.get("foo"))
+ println(Text("bar") == x("foo"))
+ println(None == x.get("no_foo"))
+ println(null == x("no_foo"))
+
val y = x.remove("foo")
- assertEquals(Null, y)
+ println(Null == y)
val z = new UnprefixedAttribute("foo", null:NodeSeq, x)
- assertEquals(None, z.get("foo"))
-
+ println(None == z.get("foo"))
+
var appended = x append x append x append x
var len = 0; while (appended ne Null) {
appended = appended.next
len = len + 1
}
- assertEquals("removal of duplicates for unprefixed attributes in append", 1, len)
+ println("removal of duplicates for unprefixed attributes in append = " + len)
}
}
- object AttributeWithOptionTest extends TestCase("AttributeWithOption") with Assert {
- override def runTest {
- var x = new UnprefixedAttribute("foo", Some(Text("bar")), Null)
+ object AttributeWithOptionTest {
+ def apply() {
+ val x = new UnprefixedAttribute("foo", Some(Text("bar")), Null)
- assertEquals(Some(Text("bar")), x.get("foo"));
- assertEquals(Text("bar"), x("foo"))
- assertEquals(None, x.get("no_foo"))
- assertEquals(null, x("no_foo"))
+ println(Some(Text("bar")) == x.get("foo"))
+ println(Text("bar") == x("foo"))
+ println(None == x.get("no_foo"))
+ println(null == x("no_foo"))
val attr1 = Some(Text("foo value"))
val attr2 = None
val y = <b foo={attr1} bar={attr2} />
- assertEquals(Some(Text("foo value")), y.attributes.get("foo"));
- assertEquals(Text("foo value"), y.attributes("foo"))
- assertEquals(None, y.attributes.get("bar"))
- assertEquals(null, y.attributes("bar"))
+ println(Some(Text("foo value")) == y.attributes.get("foo"));
+ println(Text("foo value") == y.attributes("foo"))
+ println(None == y.attributes.get("bar"))
+ println(null == y.attributes("bar"))
val z = new UnprefixedAttribute("foo", None, x)
- assertEquals(None, z.get("foo")) // None
+ println(None == z.get("foo"))
}
}
- object AttributeOutputTest extends TestCase("AttributeOutput") with Assert {
- override def runTest {
- assertEquals(<b x="&amp;"/>.toString, "<b x=\"&amp;\"></b>")
- assertEquals( <b x={"&"}/>.toString, "<b x=\"&amp;\"></b>")
+ object AttributeOutputTest {
+ def apply() {
+ println(<b x="&amp;"/>)
+ println(<b x={"&"}/>)
}
}
+
}
diff --git a/test/files/jvm/xmlmore.scala b/test/files/jvm/xmlmore.scala
index 0ba60b05b7..04d0a6c759 100644
--- a/test/files/jvm/xmlmore.scala
+++ b/test/files/jvm/xmlmore.scala
@@ -1,6 +1,6 @@
object myBreak extends scala.xml.Unparsed("<br />")
-object Test extends Application {
+object Test extends App {
val com = <!-- thissa comment -->
val pi = <?this is a pi foo bar = && {{ ?>
val crz = <![CDATA[
@@ -11,7 +11,7 @@ Ours is the portal of hope, come as you are."
Mevlana Celaleddin Rumi]]>
val nazim = <foo>{myBreak}</foo> // shows use of unparsed
-
+
Console println com
Console println pi
Console println crz // this guy will escaped, and rightly so
diff --git a/test/files/jvm/xmlpull.scala b/test/files/jvm/xmlpull.scala
index d2bb72a071..9ba7d4cf02 100644
--- a/test/files/jvm/xmlpull.scala
+++ b/test/files/jvm/xmlpull.scala
@@ -5,7 +5,7 @@ import scala.io.Source
object Test {
val src = Source.fromString("<hello><world/>!</hello>")
-
+
def main(args: Array[String]) {
var er = new XMLEventReader(src)
er.next match {
@@ -28,4 +28,4 @@ object Test {
//println("6")
}
}
-
+
diff --git a/test/files/jvm/xmlstuff.scala b/test/files/jvm/xmlstuff.scala
index 46faf283dc..45234c7139 100644
--- a/test/files/jvm/xmlstuff.scala
+++ b/test/files/jvm/xmlstuff.scala
@@ -1,10 +1,8 @@
import java.io.StringReader
import org.xml.sax.InputSource
-
-import scala.testing.SUnit.Assert
import scala.xml.{Node, NodeSeq, Elem, Text, XML}
-object Test extends AnyRef with Assert {
+object Test {
/** returns true if exception was thrown */
def catcher(att: Function1[Unit, scala.xml.MetaData]): Boolean = {
@@ -21,193 +19,163 @@ object Test extends AnyRef with Assert {
def main(args: Array[String]) {
- //val e: scala.xml.MetaData = null; //Node.NoAttributes;
- //val sc: scala.xml.NamespaceBinding = null;
-
- // ------------------------------------------ tests for class NodeSeq
-
- /**
- println("checking wellformed attributes");
- {
- import scala.xml.{ UnprefixedAttribute, Null }
- assertTrue(catcher {x:Unit => new UnprefixedAttribute("key", "<", Null)}); // < illegal
- assertTrue(catcher(x:Unit => new UnprefixedAttribute("key", "&", Null))); // & illegal
- assertTrue(catcher(x:Unit => new UnprefixedAttribute("key", "a&a", Null))); // & illegal
- assertTrue(catcher(x:Unit => new UnprefixedAttribute("key", "a&a;&", Null))); // 2nd &
-
- assertFalse(catcher(x:Unit => new UnprefixedAttribute("key", "a&a; &lt;&lt;", Null)));
- }
-*/
-
-/*
-checking wellformed attributes
-< not allowed in attribute value
-passed ok
-malformed entity reference in attribute value [&]
-passed ok
-malformed entity reference in attribute value [a&a]
-passed ok
-malformed entity reference in attribute value [a&a;&]
-passed ok
-passed ok
-*/
-
- println("NodeSeq")
+ println("NodeSeq")
val p = <foo>
- <bar gt='ga' value="3"/>
- <baz bazValue="8"/>
- <bar value="5" gi='go'/>
- </foo>;
-
- val pelems_1 = for( val x <- p \ "bar"; val y <- p \ "baz" ) yield {
+ <bar gt='ga' value="3"/>
+ <baz bazValue="8"/>
+ <bar value="5" gi='go'/>
+ </foo>;
+
+ val pelems_1 = for (x <- p \ "bar"; y <- p \ "baz" ) yield {
Text(x.attributes("value").toString + y.attributes("bazValue").toString+ "!")
};
val pelems_2 = new NodeSeq { val theSeq = List(Text("38!"),Text("58!")) };
- assertSameElements(pelems_1, pelems_2)
+ assert(pelems_1 sameElements pelems_2)
- assertEquals(p \\ "@bazValue", Text("8"))
+ assert(Text("8") sameElements (p \\ "@bazValue"))
- val books =
- <bks>
- <book><title>Blabla</title></book>
- <book><title>Blubabla</title></book>
- <book><title>Baaaaaaalabla</title></book>
+ val books =
+ <bks>
+ <book><title>Blabla</title></book>
+ <book><title>Blubabla</title></book>
+ <book><title>Baaaaaaalabla</title></book>
</bks>;
- val reviews =
- <reviews>
- <entry><title>Blabla</title>
- <remarks>
- Hallo Welt.
- </remarks>
+ val reviews =
+ <reviews>
+ <entry><title>Blabla</title>
+ <remarks>
+ Hallo Welt.
+ </remarks>
+ </entry>
+ <entry><title>Blubabla</title>
+ <remarks>
+ Hello Blu
+ </remarks>
+ </entry>
+ <entry><title>Blubabla</title>
+ <remarks>
+ rem 2
+ </remarks>
</entry>
- <entry><title>Blubabla</title>
- <remarks>
- Hello Blu
- </remarks>
- </entry>
- <entry><title>Blubabla</title>
- <remarks>
- rem 2
- </remarks>
- </entry>
</reviews>;
- println( new scala.xml.PrettyPrinter(80, 5).formatNodes (
- for (t <- books \\ "title";
- r <- reviews \\ "entry"
- if r \ "title" == t) yield
- <result>
- { t }
- { r \ "remarks" }
- </result>
- ));
-
- // example
- println(
- for (t @ <book><title>Blabla</title></book> <- new NodeSeq { val theSeq = books.child }.toList)
- yield t
- );
-val phoneBook =
- <phonebook>
- <descr>
- This is the <b>phonebook</b> of the
- <a href="http://acme.org">ACME</a> corporation.
- </descr>
- <entry>
- <name>John</name>
- <phone where="work"> +41 21 693 68 67</phone>
- <phone where="mobile">+41 79 602 23 23</phone>
- </entry>
+ println( new scala.xml.PrettyPrinter(80, 5).formatNodes (
+ for (t <- books \\ "title";
+ r <- reviews \\ "entry"
+ if (r \ "title") xml_== t) yield
+ <result>
+ { t }
+ { r \ "remarks" }
+ </result>
+ ));
+
+ // example
+ println(
+ for (t @ <book><title>Blabla</title></book> <- new NodeSeq { val theSeq = books.child }.toList)
+ yield t
+ );
+ val phoneBook =
+ <phonebook>
+ <descr>
+ This is the <b>phonebook</b> of the
+ <a href="http://acme.org">ACME</a> corporation.
+ </descr>
+ <entry>
+ <name>John</name>
+ <phone where="work"> +41 21 693 68 67</phone>
+ <phone where="mobile">+41 79 602 23 23</phone>
+ </entry>
</phonebook>;
-val addrBook =
- <addrbook>
- <descr>
- This is the <b>addressbook</b> of the
- <a href="http://acme.org">ACME</a> corporation.
- </descr>
- <entry>
- <name>John</name>
- <street> Elm Street</street>
- <city>Dolphin City</city>
- </entry>
+ val addrBook =
+ <addrbook>
+ <descr>
+ This is the <b>addressbook</b> of the
+ <a href="http://acme.org">ACME</a> corporation.
+ </descr>
+ <entry>
+ <name>John</name>
+ <street> Elm Street</street>
+ <city>Dolphin City</city>
+ </entry>
</addrbook>;
- println( new scala.xml.PrettyPrinter(80, 5).formatNodes (
- for (t <- addrBook \\ "entry";
- r <- phoneBook \\ "entry"
- if t \ "name" == r \ "name") yield
- <result>
- { t.child }
- { r \ "phone" }
- </result>
- ));
-
-
- /* namespaces */
- // begin tmp
- println("namespaces")
- val cuckoo = <cuckoo xmlns="http://cuckoo.com">
+ println( new scala.xml.PrettyPrinter(80, 5).formatNodes (
+ for (t <- addrBook \\ "entry";
+ r <- phoneBook \\ "entry"
+ if (t \ "name") xml_== (r \ "name")) yield
+ <result>
+ { t.child }
+ { r \ "phone" }
+ </result>
+ ));
+
+
+ /* namespaces */
+ // begin tmp
+ println("namespaces")
+ val cuckoo = <cuckoo xmlns="http://cuckoo.com">
<foo/>
<bar/>
- </cuckoo>;
- assertEquals(cuckoo.namespace, "http://cuckoo.com")
- for (n <- cuckoo \ "_" ) {
- //println("n = "+n);
- //println("n.prefix = "+n.prefix);
- //.println("n.scope = "+n.scope);
- assertEquals( n.namespace, "http://cuckoo.com")
- }
-
- println("validation - elements")
- val vtor = new scala.xml.dtd.ElementValidator();
- {
- import scala.xml.dtd.ELEMENTS
- import scala.xml.dtd.ContentModel._
- vtor.setContentModel(
- ELEMENTS(
- Sequ(
- Letter(ElemName("bar")),
- Star(Letter(ElemName("baz"))) )));
-
- }
- assertEquals(vtor( <foo><bar/><baz/><baz/></foo> ), true);
- {
- import scala.xml.dtd.MIXED
- import scala.xml.dtd.ContentModel._
-
- vtor.setContentModel(
- MIXED(
- Alt(Letter(ElemName("bar")),
- Letter(ElemName("baz")),
- Letter(ElemName("bal")))));
- }
+ </cuckoo>;
+ assert(cuckoo.namespace == "http://cuckoo.com")
+ for (n <- cuckoo \ "_" ) {
+ //println("n = "+n);
+ //println("n.prefix = "+n.prefix);
+ //.println("n.scope = "+n.scope);
+ assert( n.namespace == "http://cuckoo.com")
+ }
- assertEquals(vtor(<foo><bar/><baz/><baz/></foo> ), true)
- assertEquals(vtor(<foo>ab<bar/>cd<baz/>ed<baz/>gh</foo> ), true)
- assertEquals(vtor(<foo> <ugha/> <bugha/> </foo> ), false)
+ println("validation - elements")
+ val vtor = new scala.xml.dtd.ElementValidator();
+ {
+ import scala.xml.dtd.ELEMENTS
+ import scala.xml.dtd.ContentModel._
+ vtor.setContentModel(
+ ELEMENTS(
+ Sequ(
+ Letter(ElemName("bar")),
+ Star(Letter(ElemName("baz"))) )));
- println("validation - attributes")
- vtor.setContentModel(null)
- vtor.setMetaData(List())
- assertEquals(vtor( <foo bar="hello"/> ), false)
+ }
+ assert(vtor( <foo><bar/><baz/><baz/></foo> ))
- {
- import scala.xml.dtd._
- vtor setMetaData List(AttrDecl("bar", "CDATA", IMPLIED))
- }
- assertEquals(vtor(<foo href="http://foo.com" bar="hello"/>), false)
- assertEquals(vtor(<foo bar="hello"/>), true)
+ {
+ import scala.xml.dtd.MIXED
+ import scala.xml.dtd.ContentModel._
+
+ vtor.setContentModel(
+ MIXED(
+ Alt(Letter(ElemName("bar")),
+ Letter(ElemName("baz")),
+ Letter(ElemName("bal")))));
+ }
- {
- import scala.xml.dtd._
- vtor.setMetaData(List(AttrDecl("bar","CDATA",REQUIRED)))
- }
- assertEquals( vtor( <foo href="http://foo.com" /> ), false )
- assertEquals( vtor( <foo bar="http://foo.com" /> ), true )
+ assert(vtor(<foo><bar/><baz/><baz/></foo> ))
+ assert(vtor(<foo>ab<bar/>cd<baz/>ed<baz/>gh</foo> ))
+ assert(!vtor(<foo> <ugha/> <bugha/> </foo> ))
+
+ println("validation - attributes")
+ vtor.setContentModel(null)
+ vtor.setMetaData(List())
+ assert(!vtor( <foo bar="hello"/> ))
+
+ {
+ import scala.xml.dtd._
+ vtor setMetaData List(AttrDecl("bar", "CDATA", IMPLIED))
+ }
+ assert(!vtor(<foo href="http://foo.com" bar="hello"/>))
+ assert(vtor(<foo bar="hello"/>))
+ {
+ import scala.xml.dtd._
+ vtor.setMetaData(List(AttrDecl("bar","CDATA",REQUIRED)))
+ }
+ assert(!vtor( <foo href="http://foo.com" /> ))
+ assert( vtor( <foo bar="http://foo.com" /> ))
+
}
}
diff --git a/test/files/lib/scalacheck.jar.desired.sha1 b/test/files/lib/scalacheck.jar.desired.sha1
new file mode 100644
index 0000000000..b104f58897
--- /dev/null
+++ b/test/files/lib/scalacheck.jar.desired.sha1
@@ -0,0 +1 @@
+2a3e19c3d8d93be661e66f941f19e7d49c667c2b ?scalacheck.jar
diff --git a/test/files/neg/abstract-class-2.check b/test/files/neg/abstract-class-2.check
new file mode 100644
index 0000000000..ca79dd8293
--- /dev/null
+++ b/test/files/neg/abstract-class-2.check
@@ -0,0 +1,5 @@
+abstract-class-2.scala:11: error: object creation impossible, since method f in trait S2 of type (x: P2.this.p.S1)Int is not defined
+(Note that P.this.p.S1 does not match P2.this.S1: their prefixes (i.e. enclosing instances) differ)
+ object O2 extends S2 {
+ ^
+one error found
diff --git a/test/files/neg/abstract-class-2.scala b/test/files/neg/abstract-class-2.scala
new file mode 100644
index 0000000000..be45a09343
--- /dev/null
+++ b/test/files/neg/abstract-class-2.scala
@@ -0,0 +1,14 @@
+class P {
+ trait S1
+ val p = new P
+
+ trait S2 {
+ def f(x: p.S1): Int
+ }
+}
+
+class P2 extends P {
+ object O2 extends S2 {
+ def f(x: S1) = 5
+ }
+}
diff --git a/test/files/neg/abstract-class-error.check b/test/files/neg/abstract-class-error.check
new file mode 100644
index 0000000000..87d148ecc5
--- /dev/null
+++ b/test/files/neg/abstract-class-error.check
@@ -0,0 +1,5 @@
+S.scala:1: error: class S needs to be abstract, since method g in class J of type (y: Int, z: java.util.List)Int is not defined
+(Note that java.util.List does not match java.util.List[String]. To implement a raw type, use java.util.List[_])
+class S extends J {
+ ^
+one error found
diff --git a/test/files/neg/abstract-class-error/J.java b/test/files/neg/abstract-class-error/J.java
new file mode 100644
index 0000000000..5877f5cc5b
--- /dev/null
+++ b/test/files/neg/abstract-class-error/J.java
@@ -0,0 +1,4 @@
+public abstract class J {
+ public abstract int f();
+ public abstract int g(int y, java.util.List z);
+} \ No newline at end of file
diff --git a/test/files/neg/abstract-class-error/S.scala b/test/files/neg/abstract-class-error/S.scala
new file mode 100644
index 0000000000..67f6d8593e
--- /dev/null
+++ b/test/files/neg/abstract-class-error/S.scala
@@ -0,0 +1,4 @@
+class S extends J {
+ def f() = 55
+ def g(y: Int, z: java.util.List[String]) = 11
+}
diff --git a/test/files/neg/abstract-concrete-methods.check b/test/files/neg/abstract-concrete-methods.check
new file mode 100644
index 0000000000..e128f77e26
--- /dev/null
+++ b/test/files/neg/abstract-concrete-methods.check
@@ -0,0 +1,5 @@
+abstract-concrete-methods.scala:7: error: class Outer2 needs to be abstract, since method score in trait Outer of type (i: Outer2#Inner)Double is not defined
+(Note that This#Inner does not match Outer2#Inner: class Inner in class Outer2 is a subclass of trait Inner in trait Outer, but method parameter types must match exactly.)
+class Outer2 extends Outer[Outer2] {
+ ^
+one error found
diff --git a/test/files/neg/abstract-concrete-methods.scala b/test/files/neg/abstract-concrete-methods.scala
new file mode 100644
index 0000000000..7f1aea0dbc
--- /dev/null
+++ b/test/files/neg/abstract-concrete-methods.scala
@@ -0,0 +1,10 @@
+trait Outer[This <: Outer[This]] {
+ self: This =>
+
+ trait Inner
+ def score(i: This#Inner): Double
+}
+class Outer2 extends Outer[Outer2] {
+ class Inner extends super.Inner
+ def score(i: Outer2#Inner) = 0.0
+}
diff --git a/test/files/neg/abstract-inaccessible.check b/test/files/neg/abstract-inaccessible.check
new file mode 100644
index 0000000000..42b98ac026
--- /dev/null
+++ b/test/files/neg/abstract-inaccessible.check
@@ -0,0 +1,13 @@
+abstract-inaccessible.scala:5: error: method implementMe in trait YourTrait references private[foo] trait Bippy.
+Classes which cannot access Bippy may be unable to provide a concrete implementation of implementMe.
+ def implementMe(f: Int => (String, Bippy)): Unit
+ ^
+abstract-inaccessible.scala:6: error: method overrideMe in trait YourTrait references private[foo] trait Bippy.
+Classes which cannot access Bippy may be unable to override overrideMe.
+ def overrideMe[T <: Bippy](x: T): T = x
+ ^
+abstract-inaccessible.scala:7: error: method overrideMeAlso in trait YourTrait references private[foo] trait Bippy.
+Classes which cannot access Bippy may be unable to override overrideMeAlso.
+ def overrideMeAlso(x: Map[Int, Set[Bippy]]) = 5
+ ^
+three errors found
diff --git a/test/files/neg/abstract-inaccessible.flags b/test/files/neg/abstract-inaccessible.flags
new file mode 100644
index 0000000000..6c1dd108ae
--- /dev/null
+++ b/test/files/neg/abstract-inaccessible.flags
@@ -0,0 +1 @@
+-Xfatal-warnings -Xlint \ No newline at end of file
diff --git a/test/files/neg/abstract-inaccessible.scala b/test/files/neg/abstract-inaccessible.scala
new file mode 100644
index 0000000000..7eaaf2d620
--- /dev/null
+++ b/test/files/neg/abstract-inaccessible.scala
@@ -0,0 +1,9 @@
+package foo {
+ private[foo] trait Bippy { }
+
+ trait YourTrait {
+ def implementMe(f: Int => (String, Bippy)): Unit
+ def overrideMe[T <: Bippy](x: T): T = x
+ def overrideMeAlso(x: Map[Int, Set[Bippy]]) = 5
+ }
+}
diff --git a/test/files/neg/abstract-report.check b/test/files/neg/abstract-report.check
new file mode 100644
index 0000000000..bd550f39f4
--- /dev/null
+++ b/test/files/neg/abstract-report.check
@@ -0,0 +1,24 @@
+abstract-report.scala:1: error: class Unimplemented needs to be abstract, since:
+it has 12 unimplemented members.
+/** As seen from class Unimplemented, the missing signatures are as follows.
+ * For convenience, these are usable as stub implementations.
+ */
+ // Members declared in scala.collection.GenTraversableOnce
+ def isTraversableAgain: Boolean = ???
+ def toIterator: Iterator[String] = ???
+ def toStream: Stream[String] = ???
+
+ // Members declared in scala.collection.TraversableOnce
+ def copyToArray[B >: String](xs: Array[B],start: Int,len: Int): Unit = ???
+ def exists(p: String => Boolean): Boolean = ???
+ def find(p: String => Boolean): Option[String] = ???
+ def forall(p: String => Boolean): Boolean = ???
+ def foreach[U](f: String => U): Unit = ???
+ def hasDefiniteSize: Boolean = ???
+ def isEmpty: Boolean = ???
+ def seq: scala.collection.TraversableOnce[String] = ???
+ def toTraversable: Traversable[String] = ???
+
+class Unimplemented extends TraversableOnce[String] { }
+ ^
+one error found
diff --git a/test/files/neg/abstract-report.scala b/test/files/neg/abstract-report.scala
new file mode 100644
index 0000000000..538e093547
--- /dev/null
+++ b/test/files/neg/abstract-report.scala
@@ -0,0 +1 @@
+class Unimplemented extends TraversableOnce[String] { } \ No newline at end of file
diff --git a/test/files/neg/abstract-report2.check b/test/files/neg/abstract-report2.check
new file mode 100644
index 0000000000..35a99bdd25
--- /dev/null
+++ b/test/files/neg/abstract-report2.check
@@ -0,0 +1,103 @@
+abstract-report2.scala:3: error: class Foo needs to be abstract, since:
+it has 13 unimplemented members.
+/** As seen from class Foo, the missing signatures are as follows.
+ * For convenience, these are usable as stub implementations.
+ */
+ def add(x$1: Int): Boolean = ???
+ def addAll(x$1: java.util.Collection[_ <: Int]): Boolean = ???
+ def clear(): Unit = ???
+ def contains(x$1: Any): Boolean = ???
+ def containsAll(x$1: java.util.Collection[_]): Boolean = ???
+ def isEmpty(): Boolean = ???
+ def iterator(): java.util.Iterator[Int] = ???
+ def remove(x$1: Any): Boolean = ???
+ def removeAll(x$1: java.util.Collection[_]): Boolean = ???
+ def retainAll(x$1: java.util.Collection[_]): Boolean = ???
+ def size(): Int = ???
+ def toArray[T](x$1: Array[T with Object]): Array[T with Object] = ???
+ def toArray(): Array[Object] = ???
+
+class Foo extends Collection[Int]
+ ^
+abstract-report2.scala:5: error: class Bar needs to be abstract, since:
+it has 13 unimplemented members.
+/** As seen from class Bar, the missing signatures are as follows.
+ * For convenience, these are usable as stub implementations.
+ */
+ def add(x$1: List[_ <: String]): Boolean = ???
+ def addAll(x$1: java.util.Collection[_ <: List[_ <: String]]): Boolean = ???
+ def clear(): Unit = ???
+ def contains(x$1: Any): Boolean = ???
+ def containsAll(x$1: java.util.Collection[_]): Boolean = ???
+ def isEmpty(): Boolean = ???
+ def iterator(): java.util.Iterator[List[_ <: String]] = ???
+ def remove(x$1: Any): Boolean = ???
+ def removeAll(x$1: java.util.Collection[_]): Boolean = ???
+ def retainAll(x$1: java.util.Collection[_]): Boolean = ???
+ def size(): Int = ???
+ def toArray[T](x$1: Array[T with Object]): Array[T with Object] = ???
+ def toArray(): Array[Object] = ???
+
+class Bar extends Collection[List[_ <: String]]
+ ^
+abstract-report2.scala:7: error: class Baz needs to be abstract, since:
+it has 13 unimplemented members.
+/** As seen from class Baz, the missing signatures are as follows.
+ * For convenience, these are usable as stub implementations.
+ */
+ def add(x$1: T): Boolean = ???
+ def addAll(x$1: java.util.Collection[_ <: T]): Boolean = ???
+ def clear(): Unit = ???
+ def contains(x$1: Any): Boolean = ???
+ def containsAll(x$1: java.util.Collection[_]): Boolean = ???
+ def isEmpty(): Boolean = ???
+ def iterator(): java.util.Iterator[T] = ???
+ def remove(x$1: Any): Boolean = ???
+ def removeAll(x$1: java.util.Collection[_]): Boolean = ???
+ def retainAll(x$1: java.util.Collection[_]): Boolean = ???
+ def size(): Int = ???
+ def toArray[T](x$1: Array[T with Object]): Array[T with Object] = ???
+ def toArray(): Array[Object] = ???
+
+class Baz[T] extends Collection[T]
+ ^
+abstract-report2.scala:11: error: class Dingus needs to be abstract, since:
+it has 24 unimplemented members.
+/** As seen from class Dingus, the missing signatures are as follows.
+ * For convenience, these are usable as stub implementations.
+ */
+ // Members declared in java.util.Collection
+ def add(x$1: String): Boolean = ???
+ def addAll(x$1: java.util.Collection[_ <: String]): Boolean = ???
+ def clear(): Unit = ???
+ def contains(x$1: Any): Boolean = ???
+ def containsAll(x$1: java.util.Collection[_]): Boolean = ???
+ def iterator(): java.util.Iterator[String] = ???
+ def remove(x$1: Any): Boolean = ???
+ def removeAll(x$1: java.util.Collection[_]): Boolean = ???
+ def retainAll(x$1: java.util.Collection[_]): Boolean = ???
+ def toArray[T](x$1: Array[T with Object]): Array[T with Object] = ???
+ def toArray(): Array[Object] = ???
+
+ // Members declared in scala.collection.GenTraversableOnce
+ def isTraversableAgain: Boolean = ???
+ def toIterator: Iterator[(Set[Int], String)] = ???
+ def toStream: Stream[(Set[Int], String)] = ???
+
+ // Members declared in scala.math.Ordering
+ def compare(x: List[Int],y: List[Int]): Int = ???
+
+ // Members declared in scala.collection.TraversableOnce
+ def copyToArray[B >: (Set[Int], String)](xs: Array[B],start: Int,len: Int): Unit = ???
+ def exists(p: ((Set[Int], String)) => Boolean): Boolean = ???
+ def find(p: ((Set[Int], String)) => Boolean): Option[(Set[Int], String)] = ???
+ def forall(p: ((Set[Int], String)) => Boolean): Boolean = ???
+ def foreach[U](f: ((Set[Int], String)) => U): Unit = ???
+ def hasDefiniteSize: Boolean = ???
+ def isEmpty: Boolean = ???
+ def seq: scala.collection.TraversableOnce[(Set[Int], String)] = ???
+ def toTraversable: Traversable[(Set[Int], String)] = ???
+
+class Dingus extends Bippy[String, Set[Int], List[Int]]
+ ^
+four errors found
diff --git a/test/files/neg/abstract-report2.scala b/test/files/neg/abstract-report2.scala
new file mode 100644
index 0000000000..b6327b0766
--- /dev/null
+++ b/test/files/neg/abstract-report2.scala
@@ -0,0 +1,11 @@
+import java.util.Collection
+
+class Foo extends Collection[Int]
+
+class Bar extends Collection[List[_ <: String]]
+
+class Baz[T] extends Collection[T]
+
+trait Bippy[T1, T2, T3] extends Collection[T1] with TraversableOnce[(T2, String)] with Ordering[T3]
+
+class Dingus extends Bippy[String, Set[Int], List[Int]] \ No newline at end of file
diff --git a/test/files/neg/abstract-vars.check b/test/files/neg/abstract-vars.check
new file mode 100644
index 0000000000..8aa47745f6
--- /dev/null
+++ b/test/files/neg/abstract-vars.check
@@ -0,0 +1,21 @@
+abstract-vars.scala:5: error: class Fail1 needs to be abstract, since variable x is not defined
+(Note that variables need to be initialized to be defined)
+class Fail1 extends A {
+ ^
+abstract-vars.scala:9: error: class Fail2 needs to be abstract, since variable x in class A of type Int is not defined
+(Note that variables need to be initialized to be defined)
+class Fail2 extends A { }
+ ^
+abstract-vars.scala:11: error: class Fail3 needs to be abstract, since variable x in class A of type Int is not defined
+(Note that an abstract var requires a setter in addition to the getter)
+class Fail3 extends A {
+ ^
+abstract-vars.scala:14: error: class Fail4 needs to be abstract, since variable x in class A of type Int is not defined
+(Note that an abstract var requires a setter in addition to the getter)
+class Fail4 extends A {
+ ^
+abstract-vars.scala:18: error: class Fail5 needs to be abstract, since variable x in class A of type Int is not defined
+(Note that an abstract var requires a getter in addition to the setter)
+class Fail5 extends A {
+ ^
+5 errors found
diff --git a/test/files/neg/abstract-vars.scala b/test/files/neg/abstract-vars.scala
new file mode 100644
index 0000000000..df6109d3a8
--- /dev/null
+++ b/test/files/neg/abstract-vars.scala
@@ -0,0 +1,29 @@
+abstract class A {
+ var x: Int
+}
+
+class Fail1 extends A {
+ var x: Int
+}
+
+class Fail2 extends A { }
+
+class Fail3 extends A {
+ val x: Int = 5
+}
+class Fail4 extends A {
+ def x: Int = 5
+}
+
+class Fail5 extends A {
+ def x_=(y: Int) = ()
+}
+
+class Success1 extends A {
+ val x: Int = 5
+ def x_=(y: Int) = ()
+}
+
+class Success2 extends A {
+ var x: Int = 5
+}
diff --git a/test/files/neg/accesses.check b/test/files/neg/accesses.check
index 94fcd615bc..db58af12ce 100644
--- a/test/files/neg/accesses.check
+++ b/test/files/neg/accesses.check
@@ -1,17 +1,17 @@
-accesses.scala:23: error: overriding method f2 in class A of type => Unit;
+accesses.scala:23: error: overriding method f2 in class A of type ()Unit;
method f2 has weaker access privileges; it should not be private
- private def f2: Unit = ()
+ private def f2(): Unit = ()
^
-accesses.scala:24: error: overriding method f3 in class A of type => Unit;
+accesses.scala:24: error: overriding method f3 in class A of type ()Unit;
method f3 has weaker access privileges; it should be at least protected
- private[p2] def f3: Unit = ()
+ private[p2] def f3(): Unit = ()
^
-accesses.scala:25: error: overriding method f4 in class A of type => Unit;
+accesses.scala:25: error: overriding method f4 in class A of type ()Unit;
method f4 has weaker access privileges; it should be at least private[p1]
- private[p2] def f4: Unit
+ private[p2] def f4(): Unit
^
-accesses.scala:26: error: overriding method f5 in class A of type => Unit;
+accesses.scala:26: error: overriding method f5 in class A of type ()Unit;
method f5 has weaker access privileges; it should be at least protected[p1]
- protected[p2] def f5: Unit
+ protected[p2] def f5(): Unit
^
four errors found
diff --git a/test/files/neg/accesses.scala b/test/files/neg/accesses.scala
index 2a6b45c35b..290291586c 100644
--- a/test/files/neg/accesses.scala
+++ b/test/files/neg/accesses.scala
@@ -1,27 +1,27 @@
package test.p1.p2
abstract class A {
- private[p2] def f2: Unit
- protected def f3: Unit
- private[p1] def f4: Unit
- protected[p1] def f5: Unit
+ private[p2] def f2(): Unit
+ protected def f3(): Unit
+ private[p1] def f4(): Unit
+ protected[p1] def f5(): Unit
}
-
+
abstract class OK1 extends A {
- private[p1] def f2: Unit
- protected[p2] def f3: Unit
- private[test] def f4: Unit
- protected[test] def f5: Unit
+ private[p1] def f2(): Unit
+ protected[p2] def f3(): Unit
+ private[test] def f4(): Unit
+ protected[test] def f5(): Unit
}
abstract class OK2 extends A {
- protected[p1] def f2: Unit
- def f3: Unit
- protected[p1] def f4: Unit
- def f5: Unit
+ protected[p1] def f2(): Unit
+ def f3(): Unit
+ protected[p1] def f4(): Unit
+ def f5(): Unit
}
abstract class Err1 extends A {
- private def f2: Unit = ()
- private[p2] def f3: Unit = ()
- private[p2] def f4: Unit
- protected[p2] def f5: Unit
+ private def f2(): Unit = ()
+ private[p2] def f3(): Unit = ()
+ private[p2] def f4(): Unit
+ protected[p2] def f5(): Unit
}
diff --git a/test/files/neg/ambiguous-float-dots.check b/test/files/neg/ambiguous-float-dots.check
new file mode 100644
index 0000000000..6c21056d7a
--- /dev/null
+++ b/test/files/neg/ambiguous-float-dots.check
@@ -0,0 +1,16 @@
+ambiguous-float-dots.scala:2: error: This lexical syntax is deprecated. From scala 2.11, a dot will only be considered part of a number if it is immediately followed by a digit.
+ val x0 = 5.
+ ^
+ambiguous-float-dots.scala:6: error: This lexical syntax is deprecated. From scala 2.11, a dot will only be considered part of a number if it is immediately followed by a digit.
+ val x1 = 5.f
+ ^
+ambiguous-float-dots.scala:7: error: Treating numbers with a leading zero as octal is deprecated.
+ val y0 = 055
+ ^
+ambiguous-float-dots.scala:11: error: This lexical syntax is deprecated. From scala 2.11, a dot will only be considered part of a number if it is immediately followed by a digit.
+ 1.+(2)
+ ^
+ambiguous-float-dots.scala:12: error: This lexical syntax is deprecated. From scala 2.11, a dot will only be considered part of a number if it is immediately followed by a digit.
+ 1. + 2
+ ^
+5 errors found
diff --git a/test/files/neg/ambiguous-float-dots.flags b/test/files/neg/ambiguous-float-dots.flags
new file mode 100644
index 0000000000..65faf53579
--- /dev/null
+++ b/test/files/neg/ambiguous-float-dots.flags
@@ -0,0 +1 @@
+-Xfatal-warnings -deprecation \ No newline at end of file
diff --git a/test/files/neg/ambiguous-float-dots.scala b/test/files/neg/ambiguous-float-dots.scala
new file mode 100644
index 0000000000..87e948db35
--- /dev/null
+++ b/test/files/neg/ambiguous-float-dots.scala
@@ -0,0 +1,14 @@
+class A {
+ val x0 = 5.
+}
+
+class B {
+ val x1 = 5.f
+ val y0 = 055
+}
+
+class D {
+ 1.+(2)
+ 1. + 2
+ 1 + 2
+}
diff --git a/test/files/neg/ambiguous-float-dots2.check b/test/files/neg/ambiguous-float-dots2.check
new file mode 100644
index 0000000000..8919d2c6a8
--- /dev/null
+++ b/test/files/neg/ambiguous-float-dots2.check
@@ -0,0 +1,10 @@
+ambiguous-float-dots2.scala:7: error: Non-zero numbers may not have a leading zero.
+ val y0 = 055
+ ^
+ambiguous-float-dots2.scala:3: error: identifier expected but '}' found.
+}
+^
+ambiguous-float-dots2.scala:12: error: ';' expected but integer literal found.
+ 1. + 2
+ ^
+three errors found
diff --git a/test/files/neg/ambiguous-float-dots2.flags b/test/files/neg/ambiguous-float-dots2.flags
new file mode 100644
index 0000000000..112fc720a0
--- /dev/null
+++ b/test/files/neg/ambiguous-float-dots2.flags
@@ -0,0 +1 @@
+-Xfuture \ No newline at end of file
diff --git a/test/files/neg/ambiguous-float-dots2.scala b/test/files/neg/ambiguous-float-dots2.scala
new file mode 100644
index 0000000000..87e948db35
--- /dev/null
+++ b/test/files/neg/ambiguous-float-dots2.scala
@@ -0,0 +1,14 @@
+class A {
+ val x0 = 5.
+}
+
+class B {
+ val x1 = 5.f
+ val y0 = 055
+}
+
+class D {
+ 1.+(2)
+ 1. + 2
+ 1 + 2
+}
diff --git a/test/files/neg/annot-nonconst.check b/test/files/neg/annot-nonconst.check
index 23429bb11a..e4166e08b6 100644
--- a/test/files/neg/annot-nonconst.check
+++ b/test/files/neg/annot-nonconst.check
@@ -1,9 +1,9 @@
-annot-nonconst.scala:1: warning: implementation restriction: subclassing Classfile does not
+annot-nonconst.scala:1: warning: Implementation restriction: subclassing Classfile does not
make your annotation visible at runtime. If that is what
you want, you must write the annotation class in Java.
class Length(value: Int) extends ClassfileAnnotation
^
-annot-nonconst.scala:2: warning: implementation restriction: subclassing Classfile does not
+annot-nonconst.scala:2: warning: Implementation restriction: subclassing Classfile does not
make your annotation visible at runtime. If that is what
you want, you must write the annotation class in Java.
class Ann2(value: String) extends ClassfileAnnotation
@@ -11,7 +11,7 @@ class Ann2(value: String) extends ClassfileAnnotation
annot-nonconst.scala:6: error: annotation argument needs to be a constant; found: n
@Length(n) def foo = "foo"
^
-annot-nonconst.scala:7: error: annotation argument needs to be a constant; found: null
+annot-nonconst.scala:7: error: annotation argument cannot be null
@Ann2(null) def bar = "bar"
^
two warnings found
diff --git a/test/files/neg/anyval-sealed.check b/test/files/neg/anyval-sealed.check
new file mode 100644
index 0000000000..48a457b496
--- /dev/null
+++ b/test/files/neg/anyval-sealed.check
@@ -0,0 +1,12 @@
+anyval-sealed.scala:2: error: match is not exhaustive!
+missing combination Byte
+missing combination Char
+missing combination Double
+missing combination Float
+missing combination Long
+missing combination Short
+missing combination Unit
+
+ def f(x: AnyVal) = x match {
+ ^
+one error found
diff --git a/test/files/neg/anyval-sealed.flags b/test/files/neg/anyval-sealed.flags
new file mode 100644
index 0000000000..85d8eb2ba2
--- /dev/null
+++ b/test/files/neg/anyval-sealed.flags
@@ -0,0 +1 @@
+-Xfatal-warnings
diff --git a/test/files/neg/anyval-sealed.scala b/test/files/neg/anyval-sealed.scala
new file mode 100644
index 0000000000..232a183479
--- /dev/null
+++ b/test/files/neg/anyval-sealed.scala
@@ -0,0 +1,6 @@
+class A {
+ def f(x: AnyVal) = x match {
+ case _: Boolean => 1
+ case _: Int => 2
+ }
+} \ No newline at end of file
diff --git a/test/files/neg/array-not-seq.check b/test/files/neg/array-not-seq.check
new file mode 100644
index 0000000000..c16ecdad72
--- /dev/null
+++ b/test/files/neg/array-not-seq.check
@@ -0,0 +1,7 @@
+array-not-seq.scala:2: error: An Array will no longer match as Seq[_].
+ def f1(x: Any) = x.isInstanceOf[Seq[_]]
+ ^
+error: An Array will no longer match as Seq[_].
+error: An Array will no longer match as Seq[_].
+error: An Array will no longer match as Seq[_].
+four errors found
diff --git a/test/files/neg/array-not-seq.flags b/test/files/neg/array-not-seq.flags
new file mode 100644
index 0000000000..4e9f7e4a56
--- /dev/null
+++ b/test/files/neg/array-not-seq.flags
@@ -0,0 +1 @@
+-Xmigration -Xfatal-warnings \ No newline at end of file
diff --git a/test/files/neg/array-not-seq.scala b/test/files/neg/array-not-seq.scala
new file mode 100644
index 0000000000..5f367bdd85
--- /dev/null
+++ b/test/files/neg/array-not-seq.scala
@@ -0,0 +1,26 @@
+object Test {
+ def f1(x: Any) = x.isInstanceOf[Seq[_]]
+ def f2(x: Any) = x match {
+ case _: Seq[_] => true
+ case _ => false
+ }
+
+ def f3(x: Any) = x match {
+ case _: Array[_] => true
+ case _ => false
+ }
+
+ def f4(x: Any) = x.isInstanceOf[Traversable[_]]
+
+ def f5(x1: Any, x2: Any, x3: AnyRef) = (x1, x2, x3) match {
+ case (Some(_: Seq[_]), Nil, _) => 1
+ case (None, List(_: List[_], _), _) => 2
+ case _ => 3
+ }
+
+ def main(args: Array[String]): Unit = {
+ // println(f1(Array(1)))
+ // println(f2(Array(1)))
+ // println(f3(Array(1))
+ }
+}
diff --git a/test/files/neg/bug1010.check b/test/files/neg/bug1010.check
deleted file mode 100644
index 3cf9738eaa..0000000000
--- a/test/files/neg/bug1010.check
+++ /dev/null
@@ -1,6 +0,0 @@
-bug1010.scala:14: error: type mismatch;
- found : MailBox#Message
- required: _3.in.Message where val _3: Actor
- unstable.send(msg) // in.Message becomes unstable.Message, but that's ok since Message is a concrete type member
- ^
-one error found
diff --git a/test/files/neg/bug1011.check b/test/files/neg/bug1011.check
deleted file mode 100644
index 7de677639a..0000000000
--- a/test/files/neg/bug1011.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug1011.scala:8: error: not found: value entity
- <dl><code>{Text(entity)}</code>
- ^
-one error found
diff --git a/test/files/neg/bug1011.scala b/test/files/neg/bug1011.scala
deleted file mode 100644
index 7dc3f49469..0000000000
--- a/test/files/neg/bug1011.scala
+++ /dev/null
@@ -1,127 +0,0 @@
-package test;
-import scala.xml._;
-
-abstract class Test {
- //val entity : String;
- def primitiveHeader : NodeSeq =
- Group({
- <dl><code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code>
- <code>{Text(entity)}</code></dl>
- } ++ // 3 seconds
- {}++ // 5 seconds
- {}++ // 10 seconds
- {}++ // 20 seconds
- {}++ // 40 seconds
- {}++ // 40 seconds
- {}++ // 40 seconds
- {}++ // 40 seconds
- {}++ // 40 seconds
- {}++ // 40 seconds
- {}++ // 40 seconds
- {}++ // 40 seconds
- {}++ // 40 seconds
- {}++ // 40 seconds
- {}++ // 40 seconds
- {}++ // 40 seconds
- {}++ // 40 seconds
- {}++ // 5 seconds
- {}++ // 10 seconds
- {}++ // 20 seconds
- {}++ // 40 seconds
- {}++ // 40 seconds
- {}++ // 40 seconds
- {}++ // 40 seconds
- {}++ // 40 seconds
- {}++ // 40 seconds
- {}++ // 40 seconds
- {}++ // 40 seconds
- {}++ // 40 seconds
- {}++ // 40 seconds
- {}++ // 40 seconds
- {}++ // 40 seconds
- {}++ // 40 seconds
- {}++ // 5 seconds
- {}++ // 10 seconds
- {}++ // 20 seconds
- {}++ // 40 seconds
- {}++ // 40 seconds
- {}++ // 40 seconds
- {}++ // 40 seconds
- {}++ // 40 seconds
- {}++ // 40 seconds
- {}++ // 40 seconds
- {}++ // 40 seconds
- {}++ // 40 seconds
- {}++ // 40 seconds
- {}++ // 40 seconds
- {}++ // 40 seconds
- {}++ // 40 seconds
- <hr/>);
-}
diff --git a/test/files/neg/bug1017.check b/test/files/neg/bug1017.check
deleted file mode 100644
index ad88a10401..0000000000
--- a/test/files/neg/bug1017.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug1017.scala:3: error: not found: value foo
-<x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>{ foo }</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x>
- ^
-one error found
diff --git a/test/files/neg/bug1038.check b/test/files/neg/bug1038.check
deleted file mode 100644
index e09cbbc510..0000000000
--- a/test/files/neg/bug1038.check
+++ /dev/null
@@ -1,5 +0,0 @@
-bug1038.scala:4: error: not enough arguments for constructor X: (x: Int)X.
-Unspecified value parameter x.
- val a = new X
- ^
-one error found
diff --git a/test/files/neg/bug1041.check b/test/files/neg/bug1041.check
deleted file mode 100644
index c366364241..0000000000
--- a/test/files/neg/bug1041.check
+++ /dev/null
@@ -1,6 +0,0 @@
-bug1041.scala:3: error: type mismatch;
- found : Int(1)
- required: List[Int]
- case 1 => 4
- ^
-one error found
diff --git a/test/files/neg/bug1106.check b/test/files/neg/bug1106.check
deleted file mode 100644
index 3fa595abf1..0000000000
--- a/test/files/neg/bug1106.check
+++ /dev/null
@@ -1,7 +0,0 @@
-bug1106.scala:2: error: expected class or object definition
-val p = new Par[String]
-^
-bug1106.scala:5: error: expected class or object definition
-new Foo[p.type](p) // crashes compiler
-^
-two errors found
diff --git a/test/files/neg/bug1112.check b/test/files/neg/bug1112.check
deleted file mode 100644
index d94dba9448..0000000000
--- a/test/files/neg/bug1112.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug1112.scala:12: error: too many arguments for method call: (p: Int)(f: => () => Unit)Unit
- call(0,() => System.out.println("here we are"))
- ^
-one error found
diff --git a/test/files/neg/bug1112.scala b/test/files/neg/bug1112.scala
deleted file mode 100644
index 1a88629faf..0000000000
--- a/test/files/neg/bug1112.scala
+++ /dev/null
@@ -1,14 +0,0 @@
-// checks that error doesn't crash the compiler
-// (due to isFunctionType normalizing Type1 to a function type,
-// but then the code that used that test not using the normalized type for further operations)
-class Test {
- type Type1 = () => Unit
-
- def call(p: Int)(f: => Type1) = {
- f()
- }
-
- def run = {
- call(0,() => System.out.println("here we are"))
- }
-}
diff --git a/test/files/neg/bug112706A.check b/test/files/neg/bug112706A.check
deleted file mode 100644
index 8fb5bfc390..0000000000
--- a/test/files/neg/bug112706A.check
+++ /dev/null
@@ -1,6 +0,0 @@
-bug112706A.scala:5: error: constructor cannot be instantiated to expected type;
- found : (T1, T2)
- required: java.lang.String
- case Tuple2(node,_) =>
- ^
-one error found
diff --git a/test/files/neg/bug112706A.scala b/test/files/neg/bug112706A.scala
deleted file mode 100644
index 11304720bc..0000000000
--- a/test/files/neg/bug112706A.scala
+++ /dev/null
@@ -1,8 +0,0 @@
-package test;
-trait Test {
- def foo(p : List[Tuple2[String,String]]) = {
- for (t <- p) t._1 match {
- case Tuple2(node,_) =>
- }
- }
-}
diff --git a/test/files/neg/bug1181.check b/test/files/neg/bug1181.check
deleted file mode 100644
index 38045eda87..0000000000
--- a/test/files/neg/bug1181.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug1181.scala:9: error: missing parameter type
- _ => buildMap(map.update(keyList.head, valueList.head), keyList.tail, valueList.tail)
- ^
-one error found
diff --git a/test/files/neg/bug1181.scala b/test/files/neg/bug1181.scala
deleted file mode 100644
index fbbb2a84d4..0000000000
--- a/test/files/neg/bug1181.scala
+++ /dev/null
@@ -1,12 +0,0 @@
-package test
-
-import scala.collection.immutable.Map
-
-class CompilerTest(val valueList: List[Symbol]) {
- def buildMap(map: Map[Symbol, Symbol], keyList: List[Symbol], valueList: List[Symbol]): Map[Symbol, Symbol] = {
- (keyList, valueList) match {
- case (Nil, Nil) => map
- _ => buildMap(map.update(keyList.head, valueList.head), keyList.tail, valueList.tail)
- }
- }
-}
diff --git a/test/files/neg/bug1183.check b/test/files/neg/bug1183.check
deleted file mode 100644
index ebbf8aca23..0000000000
--- a/test/files/neg/bug1183.check
+++ /dev/null
@@ -1,17 +0,0 @@
-bug1183.scala:10: error: name clash: class Foo defines object Baz
-and its companion object Foo also defines class Baz
- object Baz
- ^
-bug1183.scala:11: error: name clash: class Foo defines class Bam
-and its companion object Foo also defines object Bam
- class Bam
- ^
-bug1183.scala:12: error: name clash: class Foo defines object Bar
-and its companion object Foo also defines class Bar
- object Bar
- ^
-bug1183.scala:13: error: name clash: class Foo defines class Bar
-and its companion object Foo also defines class Bar
- case class Bar(i:Int)
- ^
-four errors found
diff --git a/test/files/neg/bug1183.scala b/test/files/neg/bug1183.scala
deleted file mode 100644
index a845126488..0000000000
--- a/test/files/neg/bug1183.scala
+++ /dev/null
@@ -1,38 +0,0 @@
-import scala.testing.SUnit._
-
-object Test extends TestConsoleMain {
-
- def suite = new TestSuite(
- new Test717
- )
-
- class Foo(j:Int) {
- object Baz
- class Bam
- object Bar
- case class Bar(i:Int)
- }
-
-
- class Test717 extends TestCase("#717 test path of case classes") {
- val foo1 = new Foo(1)
-
- override def runTest() = {
- val res = (foo1.Bar(2):Any) match {
- case foo1.Bar(2) => true // (1)
- }
- assertTrue("ok", res);
- }
- }
-
- // (2)
- object Foo {
- class Bar(val x : String)
- class Baz
- object Bam
- object Bar
-
- def unapply(s : String) : Option[Bar] = Some(new Bar(s))
- }
-
-}
diff --git a/test/files/neg/bug1210.check b/test/files/neg/bug1210.check
deleted file mode 100644
index 4db920556f..0000000000
--- a/test/files/neg/bug1210.check
+++ /dev/null
@@ -1,7 +0,0 @@
-bug1210.scala:13: error: illegal cyclic reference involving type Settings
- val v: List[selfType] = f[selfType]((x: selfType) => x.v)
- ^
-bug1210.scala:24: error: illegal cyclic reference involving type Settings
- f[selfType](_.g)
- ^
-two errors found
diff --git a/test/files/neg/bug1224.check b/test/files/neg/bug1224.check
deleted file mode 100644
index 515f823e50..0000000000
--- a/test/files/neg/bug1224.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug1224.scala:4: error: illegal cyclic reference involving type T
- type T >: C[T] <: C[C[T]]
- ^
-one error found
diff --git a/test/files/neg/bug1241.check b/test/files/neg/bug1241.check
deleted file mode 100644
index 48c86cabb7..0000000000
--- a/test/files/neg/bug1241.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug1241.scala:5: error: class type required but AnyRef{def hello(): Unit} found
- val x4 = new T { def hello() { println("4") } } // error!
- ^
-one error found
diff --git a/test/files/neg/bug1241.scala b/test/files/neg/bug1241.scala
deleted file mode 100644
index 68a2c963c4..0000000000
--- a/test/files/neg/bug1241.scala
+++ /dev/null
@@ -1,8 +0,0 @@
-object test extends Application {
- // more..
- type T = { def hello() }
- //val x4 = new AnyRef { def hello() { println("4") } } // ok!
- val x4 = new T { def hello() { println("4") } } // error!
- x4.hello()
- // more..
-}
diff --git a/test/files/neg/bug1275.check b/test/files/neg/bug1275.check
deleted file mode 100644
index 9f806c0689..0000000000
--- a/test/files/neg/bug1275.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug1275.scala:13: error: The kind of type MyType does not conform to the expected kind of type MyType[+t] <: TestCovariance.Seq[t] in trait Seq.
- def span[a, s <: Seq[a] { type MyType <: s } ](xs: s): s = xs f
- ^
-one error found
diff --git a/test/files/neg/bug1275.scala b/test/files/neg/bug1275.scala
deleted file mode 100644
index 7b9b044346..0000000000
--- a/test/files/neg/bug1275.scala
+++ /dev/null
@@ -1,14 +0,0 @@
-// tested using Scala compiler version 2.6.0-RC1 -- (c) 2002-2009 LAMP/EPFL
-
-// prompted by "Covariant return types" mailing list question
-object TestCovariance {
-
- // see Type constructor polymorphism in http://www.scala-lang.org/docu/changelog.html
- trait Seq[+t] {
- type MyType[+t] <: Seq[t]
-
- def f: MyType[t]
- }
-
- def span[a, s <: Seq[a] { type MyType <: s } ](xs: s): s = xs f
-}
diff --git a/test/files/neg/bug1279a.check b/test/files/neg/bug1279a.check
deleted file mode 100644
index edfd1fe871..0000000000
--- a/test/files/neg/bug1279a.check
+++ /dev/null
@@ -1,6 +0,0 @@
-bug1279a.scala:34: error: type mismatch;
- found : first.selfType
- required: M{type T <: this.T}
- def all4Impl[U](first: M {type T <: U}): Stream[M {type T <: U}] = Stream.cons(first, all4Impl(first.next))
- ^
-one error found
diff --git a/test/files/neg/bug1286.check b/test/files/neg/bug1286.check
deleted file mode 100644
index 9bf63252cc..0000000000
--- a/test/files/neg/bug1286.check
+++ /dev/null
@@ -1,2 +0,0 @@
-error: fatal error: Companions 'object Foo' and 'trait Foo' must be defined in same file.
-one error found
diff --git a/test/files/neg/bug1333.check b/test/files/neg/bug1333.check
deleted file mode 100644
index 11ba633194..0000000000
--- a/test/files/neg/bug1333.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug1333.scala:1: error: case classes limited by implementation: maximum of 2 constructor parameter lists.
-case class A(a: Int)(b: Int)(c: Int)
- ^
-one error found
diff --git a/test/files/neg/bug1333.scala b/test/files/neg/bug1333.scala
deleted file mode 100644
index e16b38cefc..0000000000
--- a/test/files/neg/bug1333.scala
+++ /dev/null
@@ -1 +0,0 @@
-case class A(a: Int)(b: Int)(c: Int)
diff --git a/test/files/neg/bug1392.check b/test/files/neg/bug1392.check
deleted file mode 100644
index e4c9630435..0000000000
--- a/test/files/neg/bug1392.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug1392.scala:1: error: object Int is not a value
-object X extends Application { Int }
- ^
-one error found
diff --git a/test/files/neg/bug1392.scala b/test/files/neg/bug1392.scala
deleted file mode 100644
index 54a4b9e908..0000000000
--- a/test/files/neg/bug1392.scala
+++ /dev/null
@@ -1 +0,0 @@
-object X extends Application { Int }
diff --git a/test/files/neg/bug1523.check b/test/files/neg/bug1523.check
deleted file mode 100644
index 96d052fa4c..0000000000
--- a/test/files/neg/bug1523.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug1523.scala:4: error: too many arguments for method bug: (x: Any)Any
- def go() = bug("a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a")
- ^
-one error found
diff --git a/test/files/neg/bug1523.scala b/test/files/neg/bug1523.scala
deleted file mode 100644
index 219fb0c060..0000000000
--- a/test/files/neg/bug1523.scala
+++ /dev/null
@@ -1,5 +0,0 @@
-object test {
- def bug(x: Any) = x
-
- def go() = bug("a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a")
-}
diff --git a/test/files/neg/bug1623.check b/test/files/neg/bug1623.check
deleted file mode 100644
index cfc2b533d4..0000000000
--- a/test/files/neg/bug1623.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug1623.scala:11: error: class BImpl cannot be instantiated because it does not conform to its self-type test.BImpl with test.A
- val b = new BImpl
- ^
-one error found
diff --git a/test/files/neg/bug1623.scala b/test/files/neg/bug1623.scala
deleted file mode 100644
index 1c368e7ef5..0000000000
--- a/test/files/neg/bug1623.scala
+++ /dev/null
@@ -1,12 +0,0 @@
-package test
-
-trait A
-trait B
-
-class BImpl extends B {
- this: A =>
-}
-
-object Test2 extends Application {
- val b = new BImpl
-}
diff --git a/test/files/neg/bug1838.check b/test/files/neg/bug1838.check
deleted file mode 100644
index 0c08bfe283..0000000000
--- a/test/files/neg/bug1838.check
+++ /dev/null
@@ -1,7 +0,0 @@
-bug1838.scala:6: error: `sealed' modifier can be used only for classes
- sealed val v = 0
- ^
-bug1838.scala:5: error: `sealed' modifier can be used only for classes
- sealed def f = 0
- ^
-two errors found
diff --git a/test/files/neg/bug1878.check b/test/files/neg/bug1878.check
deleted file mode 100644
index 5484d675af..0000000000
--- a/test/files/neg/bug1878.check
+++ /dev/null
@@ -1,10 +0,0 @@
-bug1878.scala:3: error: _* may only come last
- val err1 = "" match { case Seq(f @ _*, ',') => f }
- ^
-bug1878.scala:9: error: _* may only come last
- val List(List(_*, arg2), _) = List(List(1,2,3), List(4,5,6))
- ^
-bug1878.scala:13: error: _* may only come last
- case <p> { _* } </p> =>
- ^
-three errors found
diff --git a/test/files/neg/bug1878.scala b/test/files/neg/bug1878.scala
deleted file mode 100644
index df0e1b6caf..0000000000
--- a/test/files/neg/bug1878.scala
+++ /dev/null
@@ -1,15 +0,0 @@
-object Test extends Application {
- // illegal
- val err1 = "" match { case Seq(f @ _*, ',') => f }
-
- // no error
- val List(List(arg1, _*), _) = List(List(1,2,3), List(4,5,6))
-
- // illegal
- val List(List(_*, arg2), _) = List(List(1,2,3), List(4,5,6))
-
- // illegal - bug #1764
- null match {
- case <p> { _* } </p> =>
- }
-}
diff --git a/test/files/neg/bug1909b.check b/test/files/neg/bug1909b.check
deleted file mode 100644
index e5de5fefe9..0000000000
--- a/test/files/neg/bug1909b.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug1909b.scala:4: error: this can be used only in a class, object, or template
- def bar() = this.z + 5
- ^
-one error found
diff --git a/test/files/neg/bug1960.check b/test/files/neg/bug1960.check
deleted file mode 100644
index 6615d90036..0000000000
--- a/test/files/neg/bug1960.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug1960.scala:5: error: parameter 'p' requires field but conflicts with p in 'TBase'
-class Aclass (p: Int) extends TBase { def g{ f(p) } }
- ^
-one error found
diff --git a/test/files/neg/bug1960.scala b/test/files/neg/bug1960.scala
deleted file mode 100644
index b381e9df23..0000000000
--- a/test/files/neg/bug1960.scala
+++ /dev/null
@@ -1,5 +0,0 @@
-object ClassFormatErrorExample extends Application { new Aclass(1) }
-
-trait TBase { var p:Int = 0; def f(p1: Int) {} }
-
-class Aclass (p: Int) extends TBase { def g{ f(p) } }
diff --git a/test/files/neg/bug200.check b/test/files/neg/bug200.check
deleted file mode 100644
index d3670060cd..0000000000
--- a/test/files/neg/bug200.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug200.scala:7: error: method foo is defined twice
- def foo: Int;
- ^
-one error found
diff --git a/test/files/neg/bug2102.check b/test/files/neg/bug2102.check
deleted file mode 100644
index 075aa85e48..0000000000
--- a/test/files/neg/bug2102.check
+++ /dev/null
@@ -1,6 +0,0 @@
-bug2102.scala:2: error: type mismatch;
- found : java.util.Iterator[Int]
- required: scala.Iterator[_]
- val x: Iterator[_] = new java.util.ArrayList[Int]().iterator
- ^
-one error found
diff --git a/test/files/neg/bug2144.check b/test/files/neg/bug2144.check
deleted file mode 100644
index 989bddc21e..0000000000
--- a/test/files/neg/bug2144.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug2144.scala:2: error: Parameter type in structural refinement may not refer to an abstract type defined outside that refinement
- def foo[A](a: A) = new { def bar(x: A): A = x }
- ^
-one error found
diff --git a/test/files/neg/bug2275a.check b/test/files/neg/bug2275a.check
deleted file mode 100644
index 892a903948..0000000000
--- a/test/files/neg/bug2275a.check
+++ /dev/null
@@ -1,13 +0,0 @@
-bug2275a.scala:4: error: in XML literal: in XML content, please use '}}' to express '}'
- }else{
- ^
-bug2275a.scala:3: error: I encountered a '}' where I didn't expect one, maybe this tag isn't closed <br>
- <br>
- ^
-bug2275a.scala:4: error: ';' expected but 'else' found.
- }else{
- ^
-bug2275a.scala:7: error: '}' expected but eof found.
-}
- ^
-four errors found
diff --git a/test/files/neg/bug2275b.check b/test/files/neg/bug2275b.check
deleted file mode 100644
index 4b61f242d0..0000000000
--- a/test/files/neg/bug2275b.check
+++ /dev/null
@@ -1,13 +0,0 @@
-bug2275b.scala:2: error: in XML literal: in XML content, please use '}}' to express '}'
- {<br>}xx
- ^
-bug2275b.scala:2: error: I encountered a '}' where I didn't expect one, maybe this tag isn't closed <br>
- {<br>}xx
- ^
-bug2275b.scala:2: error: ';' expected but identifier found.
- {<br>}xx
- ^
-bug2275b.scala:3: error: '}' expected but eof found.
-}
- ^
-four errors found
diff --git a/test/files/neg/bug276.check b/test/files/neg/bug276.check
deleted file mode 100644
index edc4ec568f..0000000000
--- a/test/files/neg/bug276.check
+++ /dev/null
@@ -1,5 +0,0 @@
-bug276.scala:6: error: overriding type Bar in class Foo, which equals (Int, Int);
- class Bar cannot be used here - classes and objects can only override abstract types
- class Bar
- ^
-one error found
diff --git a/test/files/neg/bug278.check b/test/files/neg/bug278.check
deleted file mode 100644
index a3d44f6508..0000000000
--- a/test/files/neg/bug278.check
+++ /dev/null
@@ -1,7 +0,0 @@
-bug278.scala:5: error: overloaded method value a with alternatives => (C.this.A) => Unit <and> => () => Unit does not take type parameters
- a[A]
- ^
-bug278.scala:4: error: method a is defined twice
- def a = (p:A) => ()
- ^
-two errors found
diff --git a/test/files/neg/bug278.scala b/test/files/neg/bug278.scala
deleted file mode 100644
index 16ffe10595..0000000000
--- a/test/files/neg/bug278.scala
+++ /dev/null
@@ -1,6 +0,0 @@
-class C {
- class A
- def a = () => ()
- def a = (p:A) => ()
- a[A]
-}
diff --git a/test/files/neg/bug284.check b/test/files/neg/bug284.check
deleted file mode 100644
index 821727b96a..0000000000
--- a/test/files/neg/bug284.check
+++ /dev/null
@@ -1,8 +0,0 @@
-bug284.scala:2: warning: Detected apparent refinement of Unit; are you missing an '=' sign?
- def f1(a: T): Unit { }
- ^
-bug284.scala:5: error: Unmatched closing brace '}' ignored here
- }
- ^
-one warning found
-one error found
diff --git a/test/files/neg/bug343.check b/test/files/neg/bug343.check
deleted file mode 100644
index 9b6af98be3..0000000000
--- a/test/files/neg/bug343.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug343.scala:5: error: private class Foo escapes its defining scope as part of type C.this.Foo
- def get:Foo = new Foo();
- ^
-one error found
diff --git a/test/files/neg/bug391.check b/test/files/neg/bug391.check
deleted file mode 100644
index 18f36a5757..0000000000
--- a/test/files/neg/bug391.check
+++ /dev/null
@@ -1,13 +0,0 @@
-bug391.scala:2: error: identifier expected but 'def' found.
- def fun1(def x: Int): Int = x; // the "def x" is illegal
- ^
-bug391.scala:4: error: ':' expected but '}' found.
-}
-^
-bug391.scala:6: error: identifier expected but 'def' found.
-class E(def x: Int); // the "def x" is illegal
- ^
-bug391.scala:6: error: ':' expected but eof found.
-class E(def x: Int); // the "def x" is illegal
- ^
-four errors found
diff --git a/test/files/neg/bug409.check b/test/files/neg/bug409.check
deleted file mode 100644
index 25e5a41d16..0000000000
--- a/test/files/neg/bug409.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug409.scala:6: error: traits or objects may not have parameters
-class Toto extends Expr with Case1(12);
- ^
-one error found
diff --git a/test/files/neg/bug412.check b/test/files/neg/bug412.check
deleted file mode 100644
index f25ad6fa7e..0000000000
--- a/test/files/neg/bug412.check
+++ /dev/null
@@ -1,5 +0,0 @@
-bug412.scala:11: error: stable identifier required, but A.this.c found.
- Note that value c is not stable because its type, A.this.CX with A.this.C2, is volatile.
- def castA(x: c.T): T2 = x;
- ^
-one error found
diff --git a/test/files/neg/bug414.check b/test/files/neg/bug414.check
deleted file mode 100644
index c0f039ad26..0000000000
--- a/test/files/neg/bug414.check
+++ /dev/null
@@ -1,16 +0,0 @@
-bug414.scala:1: warning: case classes without a parameter list have been deprecated;
-use either case objects or case classes with `()' as parameter list.
-case class Empty[a] extends IntMap[a];
- ^
-bug414.scala:5: error: pattern type is incompatible with expected type;
- found : object Empty
- required: IntMap[a]
- case Empty =>
- ^
-bug414.scala:7: error: type mismatch;
- found : Unit
- required: a
- case _ =>
- ^
-one warning found
-two errors found
diff --git a/test/files/neg/bug414.scala b/test/files/neg/bug414.scala
deleted file mode 100644
index 7983fe88b9..0000000000
--- a/test/files/neg/bug414.scala
+++ /dev/null
@@ -1,10 +0,0 @@
-case class Empty[a] extends IntMap[a];
-case class Node[a](left: IntMap[a], keyVal: Pair[Int, a], right: IntMap[a]) extends IntMap[a];
-abstract class IntMap[a] {
- def lookup(key: Int): a = this match {
- case Empty =>
- error("clef inexistante")
- case _ =>
- };
-
-};
diff --git a/test/files/neg/bug418.check b/test/files/neg/bug418.check
deleted file mode 100644
index e7580beaf4..0000000000
--- a/test/files/neg/bug418.check
+++ /dev/null
@@ -1,7 +0,0 @@
-bug418.scala:2: error: not found: value Foo12340771
- null match { case Foo12340771.Bar(x) => x }
- ^
-bug418.scala:2: error: not found: value x
- null match { case Foo12340771.Bar(x) => x }
- ^
-two errors found
diff --git a/test/files/neg/bug421.check b/test/files/neg/bug421.check
deleted file mode 100644
index 71daba2881..0000000000
--- a/test/files/neg/bug421.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug421.scala:5: error: star patterns must correspond with varargs parameters
- case Bar("foo",_*) => error("huh?");
- ^
-one error found
diff --git a/test/files/neg/bug452.check b/test/files/neg/bug452.check
deleted file mode 100644
index ac23ebc560..0000000000
--- a/test/files/neg/bug452.check
+++ /dev/null
@@ -1,6 +0,0 @@
-bug452.scala:3: error: type mismatch;
- found : Test.type (with underlying type object Test)
- required: Test.Foo
- def this() = this(this);
- ^
-one error found
diff --git a/test/files/neg/bug473.check b/test/files/neg/bug473.check
deleted file mode 100644
index 7d21dfb210..0000000000
--- a/test/files/neg/bug473.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug473.scala:3: error: super constructor cannot be passed a self reference unless parameter is declared by-name
-case object Voop extends Foo(Voop)
- ^
-one error found
diff --git a/test/files/neg/bug500.check b/test/files/neg/bug500.check
deleted file mode 100644
index ff4443caee..0000000000
--- a/test/files/neg/bug500.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug500.scala:3: error: lower bound X does not conform to upper bound Y
- type T >: X <: Y;
- ^
-one error found
diff --git a/test/files/neg/bug501.check b/test/files/neg/bug501.check
deleted file mode 100644
index 112e49aad5..0000000000
--- a/test/files/neg/bug501.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug501.scala:3: error: lower bound X does not conform to upper bound Y
- abstract class I { type T >: X <: Y; }
- ^
-one error found
diff --git a/test/files/neg/bug510.check b/test/files/neg/bug510.check
deleted file mode 100644
index 14b715ea68..0000000000
--- a/test/files/neg/bug510.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug510.scala:19: error: cyclic aliasing or subtyping involving type T
- def g(t: e.T): Unit = {
- ^
-one error found
diff --git a/test/files/neg/bug512.check b/test/files/neg/bug512.check
deleted file mode 100644
index f3d0e18a79..0000000000
--- a/test/files/neg/bug512.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug512.scala:3: error: not found: value something
- val xxx = something ||
- ^
-one error found
diff --git a/test/files/neg/bug515.check b/test/files/neg/bug515.check
deleted file mode 100644
index a38c8b62d8..0000000000
--- a/test/files/neg/bug515.check
+++ /dev/null
@@ -1,6 +0,0 @@
-bug515.scala:7: error: type mismatch;
- found : java.lang.String
- required: Test.Truc
- val parent: Truc = file.getMachin
- ^
-one error found
diff --git a/test/files/neg/bug515.scala b/test/files/neg/bug515.scala
deleted file mode 100644
index 34f965231c..0000000000
--- a/test/files/neg/bug515.scala
+++ /dev/null
@@ -1,8 +0,0 @@
-object Test extends Application {
- class Truc {
- def getMachin() = "machin"
- def getMachinAsTruc() = this
- }
- val file = new Truc
- val parent: Truc = file.getMachin
-}
diff --git a/test/files/neg/bug520.check b/test/files/neg/bug520.check
deleted file mode 100644
index 258f8112e3..0000000000
--- a/test/files/neg/bug520.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug520.scala:8: error: overloaded method verifyKeyword needs result type
- verifyKeyword("", source, pos);
- ^
-one error found
diff --git a/test/files/neg/bug520.scala b/test/files/neg/bug520.scala
deleted file mode 100644
index 076aca3122..0000000000
--- a/test/files/neg/bug520.scala
+++ /dev/null
@@ -1,9 +0,0 @@
-object test {
-
- def verifyKeyword(keyword : String, source : java.io.File, pos : Int) = {
- assert(keyword != null);
- }
-
- def verifyKeyword(source : java.io.File, pos : Int) =
- verifyKeyword("", source, pos);
-}
diff --git a/test/files/neg/bug521.check b/test/files/neg/bug521.check
deleted file mode 100644
index d8e92688dd..0000000000
--- a/test/files/neg/bug521.check
+++ /dev/null
@@ -1,15 +0,0 @@
-bug521.scala:10: error: class PlainFile needs to be abstract, since method path in class AbstractFile of type => String is not defined
-class PlainFile(val file : File) extends AbstractFile {}
- ^
-bug521.scala:13: error: overriding value file in class PlainFile of type java.io.File;
- value file needs `override' modifier
-final class ZipArchive(val file : File, archive : ZipFile) extends PlainFile(file) {
- ^
-bug521.scala:13: error: class ZipArchive needs to be abstract, since method path in class AbstractFile of type => String is not defined
-final class ZipArchive(val file : File, archive : ZipFile) extends PlainFile(file) {
- ^
-bug521.scala:15: error: overriding value path in class VirtualFile of type String;
- method path needs to be a stable, immutable value
- override def path = "";
- ^
-four errors found
diff --git a/test/files/neg/bug545.check b/test/files/neg/bug545.check
deleted file mode 100644
index d184f90e85..0000000000
--- a/test/files/neg/bug545.check
+++ /dev/null
@@ -1,7 +0,0 @@
-bug545.scala:4: error: value blah is not a member of Test.Foo
- val x = foo.blah match {
- ^
-bug545.scala:5: error: recursive value x needs type
- case List(x) => x
- ^
-two errors found
diff --git a/test/files/neg/bug550.check b/test/files/neg/bug550.check
deleted file mode 100644
index e1650b7ab1..0000000000
--- a/test/files/neg/bug550.check
+++ /dev/null
@@ -1,7 +0,0 @@
-bug550.scala:6: error: type List takes type parameters
- def sum[a](xs: List)(implicit m: Monoid[a]): a =
- ^
-bug550.scala:8: error: could not find implicit value for parameter m: Monoid[a]
- sum(List(1,2,3))
- ^
-two errors found
diff --git a/test/files/neg/bug556.check b/test/files/neg/bug556.check
deleted file mode 100644
index 26aa2f1129..0000000000
--- a/test/files/neg/bug556.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug556.scala:3: error: wrong number of parameters; expected = 1
- def g:Int = f((x,y)=>x)
- ^
-one error found
diff --git a/test/files/neg/bug556.scala b/test/files/neg/bug556.scala
deleted file mode 100644
index 4f4e905fbb..0000000000
--- a/test/files/neg/bug556.scala
+++ /dev/null
@@ -1,4 +0,0 @@
-object Main extends Application {
- def f(a:Int=>Int):Int = a(4)
- def g:Int = f((x,y)=>x)
-}
diff --git a/test/files/neg/bug558.check b/test/files/neg/bug558.check
deleted file mode 100644
index 061f64f7bb..0000000000
--- a/test/files/neg/bug558.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug558.scala:13: error: value file is not a member of NewModel.this.RootURL
- final val source = top.file;
- ^
-one error found
diff --git a/test/files/neg/bug558.scala b/test/files/neg/bug558.scala
deleted file mode 100644
index 58b030347c..0000000000
--- a/test/files/neg/bug558.scala
+++ /dev/null
@@ -1,19 +0,0 @@
-package scala.tools.nsc.models;
-import scala.tools.nsc.io.AbstractFile;
-
-abstract class NewModel {
- abstract class SymbolURL {
- val top : RootURL;
- val name : String;
- val source : AbstractFile;
- }
- abstract class NodeURL extends SymbolURL {
- val parent : SymbolURL;
- final val top = parent.top;
- final val source = top.file;
-
- }
- abstract class RootURL extends SymbolURL {
- final val top : RootURL = this;
- }
-}
diff --git a/test/files/neg/bug562.check b/test/files/neg/bug562.check
deleted file mode 100644
index 638d758b8d..0000000000
--- a/test/files/neg/bug562.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug562.scala:10: error: super may be not be used on value y
- override val y = super.y;
- ^
-one error found
diff --git a/test/files/neg/bug563.check b/test/files/neg/bug563.check
deleted file mode 100644
index c10f504635..0000000000
--- a/test/files/neg/bug563.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug563.scala:6: error: missing parameter type
- map(n,ptr => new Cell(ptr.elem));
- ^
-one error found
diff --git a/test/files/neg/bug563.scala b/test/files/neg/bug563.scala
deleted file mode 100644
index d8e026e656..0000000000
--- a/test/files/neg/bug563.scala
+++ /dev/null
@@ -1,7 +0,0 @@
-object Test {
- def map[A,R](a : List[A], f : A => R) : List[R] = a.map(f);
-
- def split(sn : Iterable[List[Cell[int]]]) : unit =
- for (n <- sn)
- map(n,ptr => new Cell(ptr.elem));
-}
diff --git a/test/files/neg/bug565.check b/test/files/neg/bug565.check
deleted file mode 100644
index 47a1ebd169..0000000000
--- a/test/files/neg/bug565.check
+++ /dev/null
@@ -1,5 +0,0 @@
-bug565.scala:2: error: only classes can have declared but undefined members
-(Note that variables need to be initialized to be defined)
- var s0: String
- ^
-one error found
diff --git a/test/files/neg/bug576.check b/test/files/neg/bug576.check
deleted file mode 100644
index b496ccafd4..0000000000
--- a/test/files/neg/bug576.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug576.scala:14: error: overloaded method insert needs result type
- if (true) sibling.insert(node);
- ^
-one error found
diff --git a/test/files/neg/bug576.scala b/test/files/neg/bug576.scala
deleted file mode 100644
index fd83217a45..0000000000
--- a/test/files/neg/bug576.scala
+++ /dev/null
@@ -1,20 +0,0 @@
-package lampion.collections;
-
-abstract class BaseListXXX {
- type Node <: BaseNode;
- abstract class BaseNode {
- }
-}
-trait PriorityTreeXXX extends BaseListXXX {
- type Node <: BasicTreeNode;
-
- trait BasicTreeNode extends BaseNode {
- def sibling: Node;
- def insert(dir : Int, node : Node) = {
- if (true) sibling.insert(node);
- //else insert(node);
-
- }
- def insert(node : Node) : Unit = {}
- }
-}
diff --git a/test/files/neg/bug585.check b/test/files/neg/bug585.check
deleted file mode 100644
index 4f4c5bf31d..0000000000
--- a/test/files/neg/bug585.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug585.scala:1: error: unclosed comment
-/*
-^
-one error found
diff --git a/test/files/neg/bug588.check b/test/files/neg/bug588.check
deleted file mode 100644
index 5f55c95619..0000000000
--- a/test/files/neg/bug588.check
+++ /dev/null
@@ -1,13 +0,0 @@
-bug588.scala:3: error: double definition:
-method visit:(f: (Int) => String)Boolean and
-method visit:(f: (Int) => Unit)Boolean at line 2
-have same type after erasure: (f: Function1)Boolean
- def visit(f: Int => String): Boolean
- ^
-bug588.scala:10: error: double definition:
-method f:(brac: Test.this.TypeB)Unit and
-method f:(node: Test.this.TypeA)Unit at line 9
-have same type after erasure: (brac: Test#TraitA)Unit
- def f(brac : TypeB) : Unit;
- ^
-two errors found
diff --git a/test/files/neg/bug588.scala b/test/files/neg/bug588.scala
deleted file mode 100644
index f30937377e..0000000000
--- a/test/files/neg/bug588.scala
+++ /dev/null
@@ -1,15 +0,0 @@
-abstract class Test0 {
- def visit(f: Int => Unit): Boolean
- def visit(f: Int => String): Boolean
-}
-trait Test {
- type TypeA <: TraitA;
- type TypeB <: TypeA with TraitB;
-
- def f(node : TypeA) : Unit;
- def f(brac : TypeB) : Unit;
-
- trait TraitA;
- trait TraitB;
-
-}
diff --git a/test/files/neg/bug591.check b/test/files/neg/bug591.check
deleted file mode 100644
index 2c2e08da99..0000000000
--- a/test/files/neg/bug591.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug591.scala:38: error: method input_= is defined twice
- def input_=(in : Input) = {}
- ^
-one error found
diff --git a/test/files/neg/bug591.scala b/test/files/neg/bug591.scala
deleted file mode 100644
index 0f0b02395c..0000000000
--- a/test/files/neg/bug591.scala
+++ /dev/null
@@ -1,41 +0,0 @@
-abstract class BaseList {
- type Node <: BaseNode;
-
-
- abstract class BaseNode {
- protected def self : Node;
- private[BaseList] def self00 = self;
- def dirty : Unit = {}
- def replaceWith(node : Node) = {}
- }
-
- implicit def baseNode2Node(bnode : BaseNode): Node = bnode.self00;
-
-
-}
-
-
-trait BaseFlow extends BaseList {
- type Node <: BFNode;
- type Flow <: FlowBase;
- type Output <: OutputBase;
- type Input <: InputBase;
-
- abstract class FlowBase {
-
- }
- trait OutputBase extends FlowBase {
-
- }
- trait InputBase extends FlowBase {
-
- }
-
- trait BFNode extends BaseNode {
- private var input : Input = _;
- private var output : Output = _;
-
- def input_=(in : Input) = {}
-
- }
-}
diff --git a/test/files/neg/bug593.check b/test/files/neg/bug593.check
deleted file mode 100644
index f71affec5a..0000000000
--- a/test/files/neg/bug593.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug593.scala:1: error: traits or objects may not have parameters
-trait Wrapper[T](x : T) {
- ^
-one error found
diff --git a/test/files/neg/bug608.check b/test/files/neg/bug608.check
deleted file mode 100644
index 4e8eb4d709..0000000000
--- a/test/files/neg/bug608.check
+++ /dev/null
@@ -1,6 +0,0 @@
-bug608.scala:16: error: type mismatch;
- found : (a) => a
- required: (ha) => ?
- = g(f(x).bimap(id))
- ^
-one error found
diff --git a/test/files/neg/bug608.scala b/test/files/neg/bug608.scala
deleted file mode 100644
index 24f515651a..0000000000
--- a/test/files/neg/bug608.scala
+++ /dev/null
@@ -1,17 +0,0 @@
-trait CrashDueToTypeError {
- def id[a](x :a) :a = x
-
- trait Bifunctor {
- type a; // content
- type s <: Bifunctor
-
- // uncomment this-vvvvvvvvvvvvvvvvvvvvvvvvvvvv, and it compiles
- def bimap[c](f :a=>c) :s{/*type s=Bifunctor.this.s;*/type a=c; }
- }
-
- def hylo[hs <: Bifunctor,ha,hb,hc]
- (f :hb=>hs{type s=hs; type a=ha},
- g :hs{type s=hs; type a=ha}=>hc)(x :hb)
- :hc
- = g(f(x).bimap(id))
-}
diff --git a/test/files/neg/bug630.check b/test/files/neg/bug630.check
deleted file mode 100644
index 739d214fe5..0000000000
--- a/test/files/neg/bug630.check
+++ /dev/null
@@ -1,5 +0,0 @@
-bug630.scala:20: error: overriding value foo in trait Bar of type Req2;
- object foo has incompatible type
- object foo extends Req1
- ^
-one error found
diff --git a/test/files/neg/bug630.scala b/test/files/neg/bug630.scala
deleted file mode 100644
index d236b51ffd..0000000000
--- a/test/files/neg/bug630.scala
+++ /dev/null
@@ -1,23 +0,0 @@
-trait Req1
-
-trait Req2 {
- def test = Console.println("Test")
-}
-
-trait Foo {
- val foo : Req1
-}
-
-trait Bar {
- val foo : Req2
- def test = foo.test
-}
-
-object Test
- extends Foo
- with Bar
-{
- object foo extends Req1
-
- def main(argv : Array[String]) = test
-}
diff --git a/test/files/neg/bug631.check b/test/files/neg/bug631.check
deleted file mode 100644
index 0650c701d9..0000000000
--- a/test/files/neg/bug631.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug631.scala:1: error: `implicit' modifier cannot be used for top-level objects
-implicit object Test {
- ^
-one error found
diff --git a/test/files/neg/bug633.check b/test/files/neg/bug633.check
deleted file mode 100644
index 90f2f42c18..0000000000
--- a/test/files/neg/bug633.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug633.scala:3: error: not found: type ListBuffer
- def t(a : ListBuffer[String]) = {
- ^
-one error found
diff --git a/test/files/neg/bug639.check b/test/files/neg/bug639.check
deleted file mode 100644
index 2c6055cb96..0000000000
--- a/test/files/neg/bug639.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug639.scala:3: error: not found: value a
-import a._
- ^
-one error found
diff --git a/test/files/neg/bug649.check b/test/files/neg/bug649.check
deleted file mode 100644
index 2a1533d2dc..0000000000
--- a/test/files/neg/bug649.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug649.scala:3: error: overloaded method foo needs result type
- def foo[A] = foo[A]
- ^
-one error found
diff --git a/test/files/neg/bug650.check b/test/files/neg/bug650.check
deleted file mode 100644
index 1120d68879..0000000000
--- a/test/files/neg/bug650.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug650.scala:4: error: missing type arguments
-trait Test2 extends LinkedList;
- ^
-one error found
diff --git a/test/files/neg/bug663.check b/test/files/neg/bug663.check
deleted file mode 100644
index 6ae7198f0d..0000000000
--- a/test/files/neg/bug663.check
+++ /dev/null
@@ -1,7 +0,0 @@
-bug663.scala:11: error: name clash between defined and inherited member:
-method asMatch:(m: Test.this.Node)Any and
-method asMatch:(node: Test.this.Matchable)Any in trait MatchableImpl
-have same type after erasure: (m: test.Test#NodeImpl)java.lang.Object
- def asMatch(m : Node) : Any = {
- ^
-one error found
diff --git a/test/files/neg/bug664.check b/test/files/neg/bug664.check
deleted file mode 100644
index c29f9b6c7c..0000000000
--- a/test/files/neg/bug664.check
+++ /dev/null
@@ -1,7 +0,0 @@
-bug664.scala:4: error: type Foo is not a member of test.Test with ScalaObject
- trait Foo extends super.Foo {
- ^
-bug664.scala:5: error: type Bar is not a member of AnyRef with ScalaObject
- trait Bar extends super.Bar;
- ^
-two errors found
diff --git a/test/files/neg/bug667.check b/test/files/neg/bug667.check
deleted file mode 100644
index 704e3178ff..0000000000
--- a/test/files/neg/bug667.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug667.scala:8: error: class Ni inherits itself
- class Ni extends super.Ni with Ni;
- ^
-one error found
diff --git a/test/files/neg/bug668.check b/test/files/neg/bug668.check
deleted file mode 100644
index 10be0c8d14..0000000000
--- a/test/files/neg/bug668.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug668.scala:1: error: type Iterable takes type parameters
-class Test extends Iterable
- ^
-one error found
diff --git a/test/files/neg/bug677.check b/test/files/neg/bug677.check
deleted file mode 100644
index 5b0bb2705f..0000000000
--- a/test/files/neg/bug677.check
+++ /dev/null
@@ -1,6 +0,0 @@
-bug677.scala:2: error: type mismatch;
- found : () => Int
- required: Nothing
- val zx: Nothing = {() => 4}
- ^
-one error found
diff --git a/test/files/neg/bug691.check b/test/files/neg/bug691.check
deleted file mode 100644
index 47ac8c3888..0000000000
--- a/test/files/neg/bug691.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug691.scala:27: error: ambiguous parent class qualifier
- trait TiC extends super[Arrow].Ti2 with super[AssignArrow].Ti1;
- ^
-one error found
diff --git a/test/files/neg/bug692.check b/test/files/neg/bug692.check
deleted file mode 100644
index 9e96027899..0000000000
--- a/test/files/neg/bug692.check
+++ /dev/null
@@ -1,24 +0,0 @@
-bug692.scala:3: error: not found: type T
- trait Type[T0] extends Type0[T];
- ^
-bug692.scala:10: error: class Foo takes type parameters
- case class FooType() extends ClassType[Foo,AnyRef](ObjectType());
- ^
-bug692.scala:13: error: class Foo takes type parameters
- case class BarType[T3 <: Foo](tpeT : RefType[T3]) extends ClassType[Bar[T3],Foo](FooType);
- ^
-bug692.scala:13: error: class Foo takes type parameters
- case class BarType[T3 <: Foo](tpeT : RefType[T3]) extends ClassType[Bar[T3],Foo](FooType);
- ^
-bug692.scala:14: error: class Foo takes type parameters
- implicit def typeOfBar[T4 <: Foo](implicit elem : RefType[T4]) : RefType[Bar[T4]] =
- ^
-bug692.scala:15: error: type mismatch;
- found : test3.this.BarType[T4]
- required: test3.this.RefType[test3.this.Bar[T4]]
- BarType(elem);
- ^
-bug692.scala:19: error: class Foo takes type parameters
- class Bar[A <: Foo](implicit tpeA : Type[A]) extends Foo;
- ^
-7 errors found
diff --git a/test/files/neg/bug692.scala b/test/files/neg/bug692.scala
deleted file mode 100644
index 24e1d2fea3..0000000000
--- a/test/files/neg/bug692.scala
+++ /dev/null
@@ -1,20 +0,0 @@
-abstract class test3 {
- trait Type0[+T0];
- trait Type[T0] extends Type0[T];
- trait ClassType0[+C <: AnyRef] extends Type0[C];
- abstract class RefType[C <: AnyRef] extends Type[C];
- case class ObjectType() extends RefType[AnyRef];
- abstract class ClassType[C <: Z, Z <: AnyRef](zuper : RefType[Z]) extends RefType[C];
-
-
- case class FooType() extends ClassType[Foo,AnyRef](ObjectType());
- implicit def typeOfFoo = FooType();
-
- case class BarType[T3 <: Foo](tpeT : RefType[T3]) extends ClassType[Bar[T3],Foo](FooType);
- implicit def typeOfBar[T4 <: Foo](implicit elem : RefType[T4]) : RefType[Bar[T4]] =
- BarType(elem);
-
-
- class Foo[A <: AnyRef];
- class Bar[A <: Foo](implicit tpeA : Type[A]) extends Foo;
-}
diff --git a/test/files/neg/bug693.check b/test/files/neg/bug693.check
deleted file mode 100644
index d341d025e2..0000000000
--- a/test/files/neg/bug693.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug693.scala:4: error: x is already defined as value x
- val x : Int = 10;
- ^
-one error found
diff --git a/test/files/neg/bug693.scala b/test/files/neg/bug693.scala
deleted file mode 100644
index 3a9e6247a8..0000000000
--- a/test/files/neg/bug693.scala
+++ /dev/null
@@ -1,5 +0,0 @@
-abstract class test4 {
- trait Type;
- val x : Type = null;
- val x : Int = 10;
-}
diff --git a/test/files/neg/bug696.check b/test/files/neg/bug696.check
deleted file mode 100644
index 1ca740c211..0000000000
--- a/test/files/neg/bug696.check
+++ /dev/null
@@ -1,5 +0,0 @@
-bug696.scala:4: error: diverging implicit expansion for type TypeUtil0.Type[Any]
-starting with method WithType in object TypeUtil0
- as[Any](null);
- ^
-one error found
diff --git a/test/files/neg/bug700.check b/test/files/neg/bug700.check
deleted file mode 100644
index 33a67e5094..0000000000
--- a/test/files/neg/bug700.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug700.scala:6: error: method foobar in trait Foo is accessed from super. It may not be abstract unless it is overridden by a member declared `abstract' and `override'
- def foobar: unit = super.foobar
- ^
-one error found
diff --git a/test/files/neg/bug700.scala b/test/files/neg/bug700.scala
deleted file mode 100644
index 7477bb54f6..0000000000
--- a/test/files/neg/bug700.scala
+++ /dev/null
@@ -1,10 +0,0 @@
-trait Foo {
- def foobar: Unit;
-}
-
-trait Bar extends Foo {
- def foobar: unit = super.foobar
-}
-
-// the following definition breaks the compiler
-abstract class Foobar extends Bar
diff --git a/test/files/neg/bug708.check b/test/files/neg/bug708.check
deleted file mode 100644
index cfeb01c87f..0000000000
--- a/test/files/neg/bug708.check
+++ /dev/null
@@ -1,5 +0,0 @@
-bug708.scala:8: error: overriding type S in trait X with bounds >: Nothing <: A.this.T;
- type S has incompatible type
- override private[A] type S = Any;
- ^
-one error found
diff --git a/test/files/neg/bug712.check b/test/files/neg/bug712.check
deleted file mode 100644
index 532eb4aec0..0000000000
--- a/test/files/neg/bug712.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug712.scala:10: error: value self is not a member of B.this.ParentImpl
- implicit def coerce(p : ParentImpl) = p.self;
- ^
-one error found
diff --git a/test/files/neg/bug715.check b/test/files/neg/bug715.check
deleted file mode 100644
index 8ea1ddb0eb..0000000000
--- a/test/files/neg/bug715.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug715.scala:12: error: method chilren in trait NodeImpl is accessed from super. It may not be abstract unless it is overridden by a member declared `abstract' and `override'
- override def children = super.chilren;
- ^
-one error found
diff --git a/test/files/neg/bug715.scala b/test/files/neg/bug715.scala
deleted file mode 100644
index 87b2525a63..0000000000
--- a/test/files/neg/bug715.scala
+++ /dev/null
@@ -1,15 +0,0 @@
-package test;
-trait B {
- type Node <: NodeImpl;
- trait NodeImpl {
- def self : Node;
- def chilren : List[Node];
- }
-}
-trait C extends B {
- type Node <: NodeImpl;
- trait NodeImpl extends super.NodeImpl {
- override def children = super.chilren;
- children;
- }
-}
diff --git a/test/files/neg/bug729.check b/test/files/neg/bug729.check
deleted file mode 100644
index 0b38b9bc1d..0000000000
--- a/test/files/neg/bug729.check
+++ /dev/null
@@ -1,6 +0,0 @@
-bug729.scala:20: error: type mismatch;
- found : ScalaParserAutoEdit.this.NodeImpl(in trait Parser)
- required: ScalaParserAutoEdit.this.NodeImpl(in trait ScalaParserAutoEdit)
- val yyy : NodeImpl = link.from;
- ^
-one error found
diff --git a/test/files/neg/bug752.check b/test/files/neg/bug752.check
deleted file mode 100644
index dddab530e4..0000000000
--- a/test/files/neg/bug752.check
+++ /dev/null
@@ -1,6 +0,0 @@
-bug752.scala:6: error: type mismatch;
- found : (String) => Unit
- required: (Int) => Unit
- f(g _)
- ^
-one error found
diff --git a/test/files/neg/bug765.check b/test/files/neg/bug765.check
deleted file mode 100644
index 02bd111ef7..0000000000
--- a/test/files/neg/bug765.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug765.scala:3: error: not found: type Bar123
- val bar = new Bar123
- ^
-one error found
diff --git a/test/files/neg/bug766.check b/test/files/neg/bug766.check
deleted file mode 100644
index d259db6835..0000000000
--- a/test/files/neg/bug766.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug766.scala:5: error: not found: value badIdentifier
- val p = badIdentifier
- ^
-one error found
diff --git a/test/files/neg/bug779.check b/test/files/neg/bug779.check
deleted file mode 100644
index 941951900e..0000000000
--- a/test/files/neg/bug779.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug779.scala:6: error: method ast has return statement; needs result type
- override def ast = return null
- ^
-one error found
diff --git a/test/files/neg/bug783.check b/test/files/neg/bug783.check
deleted file mode 100644
index bf82edc843..0000000000
--- a/test/files/neg/bug783.check
+++ /dev/null
@@ -1,6 +0,0 @@
-bug783.scala:12: error: type mismatch;
- found : Contexts.this.Global#Template
- required: Contexts.this.global.Template
- globalInit0.Template(10, 20);
- ^
-one error found
diff --git a/test/files/neg/bug783.scala b/test/files/neg/bug783.scala
deleted file mode 100644
index 3818910b8e..0000000000
--- a/test/files/neg/bug783.scala
+++ /dev/null
@@ -1,29 +0,0 @@
-package test;
-
-object Main extends Application {
- class Global {
- case class Template(x : Int, y : Int) {
- Console.println("outer: " + Global.this);
- }
- }
- trait Contexts { self: Analyzer =>
- val xxx : global.Template = {
- assert(globalInit0 != null);
- globalInit0.Template(10, 20);
- }
- }
- abstract class Analyzer extends Contexts {
- type Global <: Main.Global;
- final val global : Global = globalInit;
- def globalInit : Global;
- final def globalInit0 = globalInit.asInstanceOf[global.type];
- }
-
- object global0 extends Global {
- object analyzer extends Analyzer {
- type Global = global0.type;
- override def globalInit = global0;
- }
- }
- Console.println(global0.analyzer.xxx);
-}
diff --git a/test/files/neg/bug798.check b/test/files/neg/bug798.check
deleted file mode 100644
index 5859e1e769..0000000000
--- a/test/files/neg/bug798.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug798.scala:2: error: cyclic aliasing or subtyping involving type Bracks
-trait Test[Bracks <: Bracks] {
- ^
-one error found
diff --git a/test/files/neg/bug798.scala b/test/files/neg/bug798.scala
deleted file mode 100644
index a2bf66d19b..0000000000
--- a/test/files/neg/bug798.scala
+++ /dev/null
@@ -1,8 +0,0 @@
-package test;
-trait Test[Bracks <: Bracks] {
- def f(list : Any) = null;
- class C[T]
- val bracks : Bracks;
- val singletons = f(bracks);
-
-}
diff --git a/test/files/neg/bug800.check b/test/files/neg/bug800.check
deleted file mode 100644
index 00ca02070e..0000000000
--- a/test/files/neg/bug800.check
+++ /dev/null
@@ -1,13 +0,0 @@
-bug800.scala:4: error: qualification is already defined as value qualification
- val qualification = false;
- ^
-bug800.scala:8: error: method qualification is defined twice
- val qualification = false;
- ^
-bug800.scala:12: error: value qualification is defined twice
- var qualification = false;
- ^
-bug800.scala:16: error: method qualification is defined twice
- var qualification = false;
- ^
-four errors found
diff --git a/test/files/neg/bug835.check b/test/files/neg/bug835.check
deleted file mode 100644
index 79ea97b71f..0000000000
--- a/test/files/neg/bug835.check
+++ /dev/null
@@ -1,9 +0,0 @@
-bug835.scala:2: error: no `: _*' annotation allowed here
-(such annotations are only allowed in arguments to *-parameters)
- Console.println(List(List(1, 2, 3) : _*, List(4, 5, 6) : _*))
- ^
-bug835.scala:2: error: no `: _*' annotation allowed here
-(such annotations are only allowed in arguments to *-parameters)
- Console.println(List(List(1, 2, 3) : _*, List(4, 5, 6) : _*))
- ^
-two errors found
diff --git a/test/files/neg/bug835.scala b/test/files/neg/bug835.scala
deleted file mode 100644
index 1eb724406b..0000000000
--- a/test/files/neg/bug835.scala
+++ /dev/null
@@ -1,3 +0,0 @@
-object Test extends Application {
- Console.println(List(List(1, 2, 3) : _*, List(4, 5, 6) : _*))
-}
diff --git a/test/files/neg/bug836.check b/test/files/neg/bug836.check
deleted file mode 100644
index 4949e2cd66..0000000000
--- a/test/files/neg/bug836.check
+++ /dev/null
@@ -1,6 +0,0 @@
-bug836.scala:9: error: type mismatch;
- found : Any
- required: A.this.S
- val some: S = any // compiles => type X is set to scala.Any
- ^
-one error found
diff --git a/test/files/neg/bug836.scala b/test/files/neg/bug836.scala
deleted file mode 100644
index 3633b816c6..0000000000
--- a/test/files/neg/bug836.scala
+++ /dev/null
@@ -1,16 +0,0 @@
-abstract class Obj { type S }
-class ObjImpl extends Obj { type S = String }
-
-abstract class A {
- type MyObj <: Obj
- type S = MyObj#S
-
- val any: Any = 0
- val some: S = any // compiles => type X is set to scala.Any
-}
-
-class B extends A {
- type MyObj = ObjImpl
- val myString: S = "hello"
- val realString: String = myString // error: type missmatch
-}
diff --git a/test/files/neg/bug845.check b/test/files/neg/bug845.check
deleted file mode 100644
index a5b92e2aee..0000000000
--- a/test/files/neg/bug845.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug845.scala:4: error: only classes can have declared but undefined members
- type Bar;
- ^
-one error found
diff --git a/test/files/neg/bug845.scala b/test/files/neg/bug845.scala
deleted file mode 100644
index 26c2df52dc..0000000000
--- a/test/files/neg/bug845.scala
+++ /dev/null
@@ -1,16 +0,0 @@
-package test;
-
-object Test extends Application {
- type Bar;
- trait FooImpl;
-
- trait Bob {
- def bar : Bar with FooImpl;
- }
- def ifn[A,B](a : A)(f : A => B) =
- if (a != null) f(a) else null;
-
- val bob : Bob = null;
- val bar = ifn(bob)(_.bar);
- assert(bar == null);
-}
diff --git a/test/files/neg/bug846.check b/test/files/neg/bug846.check
deleted file mode 100644
index 9a17238c64..0000000000
--- a/test/files/neg/bug846.check
+++ /dev/null
@@ -1,6 +0,0 @@
-bug846.scala:9: error: type mismatch;
- found : Null(null)
- required: B
- if (a != null) f(a) else null
- ^
-one error found
diff --git a/test/files/neg/bug856.check b/test/files/neg/bug856.check
deleted file mode 100644
index e1d0801c5f..0000000000
--- a/test/files/neg/bug856.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug856.scala:3: error: class ComplexRect needs to be abstract, since method _2 in trait Product2 of type => Double is not defined
-class ComplexRect(val _1:Double, _2:Double) extends Complex {
- ^
-one error found
diff --git a/test/files/neg/bug856.scala b/test/files/neg/bug856.scala
deleted file mode 100644
index fea216bfad..0000000000
--- a/test/files/neg/bug856.scala
+++ /dev/null
@@ -1,11 +0,0 @@
-trait Complex extends Product2[Double,Double]
-
-class ComplexRect(val _1:Double, _2:Double) extends Complex {
- override def toString = "ComplexRect("+_1+","+_2+")"
-}
-
-object Test {
- def main(args:Array[String]) = {
- new ComplexRect(1,1)._2
- }
-}
diff --git a/test/files/neg/bug875.check b/test/files/neg/bug875.check
deleted file mode 100644
index d547c8d69c..0000000000
--- a/test/files/neg/bug875.check
+++ /dev/null
@@ -1,17 +0,0 @@
-bug875.scala:3: error: no `: _*' annotation allowed here
-(such annotations are only allowed in arguments to *-parameters)
- val ys = List(1, 2, 3, xs: _*)
- ^
-bug875.scala:6: error: no `: _*' annotation allowed here
-(such annotations are only allowed in arguments to *-parameters)
- mkList(xs: _*)
- ^
-bug875.scala:15: error: no `: _*' annotation allowed here
-(such annotations are only allowed in arguments to *-parameters)
- f(true, 1, xs: _*)
- ^
-bug875.scala:16: error: no `: _*' annotation allowed here
-(such annotations are only allowed in arguments to *-parameters)
- g(1, xs:_*)
- ^
-four errors found
diff --git a/test/files/neg/bug875.scala b/test/files/neg/bug875.scala
deleted file mode 100644
index 9c579b0166..0000000000
--- a/test/files/neg/bug875.scala
+++ /dev/null
@@ -1,18 +0,0 @@
-object Test extends Application {
- val xs = List(4, 5, 6)
- val ys = List(1, 2, 3, xs: _*)
- def mkList(x: Int) = List(x)
- def mkList(x: Boolean) = List(x)
- mkList(xs: _*)
-
-
- def f(x: Int*) = List(x: _*)
-
- def f(x: Boolean, y: Int*) = List(y: _*)
-
- def g[a](x: a*) = List(x: _*)
-
- f(true, 1, xs: _*)
- g(1, xs:_*)
-
-}
diff --git a/test/files/neg/bug876.check b/test/files/neg/bug876.check
deleted file mode 100644
index 85522423a8..0000000000
--- a/test/files/neg/bug876.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug876.scala:25: error: too many arguments for method apply: (key: AssertionError.A)manager.B in trait MapLike
- assert(manager.map(A2) == List(manager.map(A2, A1)))
- ^
-one error found
diff --git a/test/files/neg/bug876.scala b/test/files/neg/bug876.scala
deleted file mode 100644
index 8a94dd9db5..0000000000
--- a/test/files/neg/bug876.scala
+++ /dev/null
@@ -1,28 +0,0 @@
-import scala.collection.mutable.HashMap
-
-object AssertionError extends AnyRef with Application
-{
- abstract class A {}
-
- object A1 extends A {}
-
- object A2 extends A {}
-
- class Manager
- {
- final class B {}
-
- val map = new HashMap[A, B]
- }
-
-
- def test[T](f: => T) { f }
-
- test {
- val manager = new Manager
-
- // This line is illegal and causes a compiler crash with Scala 2.3.1
- assert(manager.map(A2) == List(manager.map(A2, A1)))
- }
-
-}
diff --git a/test/files/neg/bug877.check b/test/files/neg/bug877.check
deleted file mode 100644
index ddd1154698..0000000000
--- a/test/files/neg/bug877.check
+++ /dev/null
@@ -1,7 +0,0 @@
-bug877.scala:3: error: Invalid literal number
-trait Foo extends A(22A, Bug!) {}
- ^
-bug877.scala:3: error: parents of traits may not have parameters
-trait Foo extends A(22A, Bug!) {}
- ^
-two errors found
diff --git a/test/files/neg/bug877.scala b/test/files/neg/bug877.scala
deleted file mode 100644
index 5e132a1dd4..0000000000
--- a/test/files/neg/bug877.scala
+++ /dev/null
@@ -1,3 +0,0 @@
-class A
-
-trait Foo extends A(22A, Bug!) {}
diff --git a/test/files/neg/bug882.check b/test/files/neg/bug882.check
deleted file mode 100644
index 8f47fefd9b..0000000000
--- a/test/files/neg/bug882.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug882.scala:2: error: traits cannot have type parameters with context bounds `: ...'
-trait SortedSet[A <% Ordered[A]] {
- ^
-one error found
diff --git a/test/files/neg/bug900.check b/test/files/neg/bug900.check
deleted file mode 100644
index 6085ffea06..0000000000
--- a/test/files/neg/bug900.check
+++ /dev/null
@@ -1,10 +0,0 @@
-bug900.scala:4: error: type mismatch;
- found : Foo.this.x.type (with underlying type Foo.this.bar)
- required: AnyRef
-Note that implicit conversions are not applicable because they are ambiguous:
- both method any2stringadd in object Predef of type (x: Any)scala.runtime.StringAdd
- and method any2ArrowAssoc in object Predef of type [A](x: A)ArrowAssoc[A]
- are possible conversion functions from Foo.this.x.type to AnyRef
- def break(): x.type
- ^
-one error found
diff --git a/test/files/neg/bug908.check b/test/files/neg/bug908.check
deleted file mode 100644
index c73f1d7857..0000000000
--- a/test/files/neg/bug908.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug908.scala:8: error: not found: value makeA
- this(makeA)
- ^
-one error found
diff --git a/test/files/neg/bug909.check b/test/files/neg/bug909.check
deleted file mode 100644
index 6dbe8aa024..0000000000
--- a/test/files/neg/bug909.check
+++ /dev/null
@@ -1,6 +0,0 @@
-bug909.scala:6: error: type mismatch;
- found : java.lang.String("Hello")
- required: Int
- case Foo("Hello") =>
- ^
-one error found
diff --git a/test/files/neg/bug910.check b/test/files/neg/bug910.check
deleted file mode 100644
index fe4ad4fca4..0000000000
--- a/test/files/neg/bug910.check
+++ /dev/null
@@ -1,6 +0,0 @@
-bug910.scala:4: error: type mismatch;
- found : Seq[Char]
- required: scala.Seq[int]
- val y: Seq[int] = rest
- ^
-one error found
diff --git a/test/files/neg/bug910.scala b/test/files/neg/bug910.scala
deleted file mode 100644
index 2f28ea408f..0000000000
--- a/test/files/neg/bug910.scala
+++ /dev/null
@@ -1,7 +0,0 @@
-object RegExpTest1 extends Application {
- def co(x: Seq[Char]) = x match {
- case Seq('s','c','a','l','a', rest @ _*) =>
- val y: Seq[int] = rest
- y
- }
-}
diff --git a/test/files/neg/bug935.check b/test/files/neg/bug935.check
deleted file mode 100644
index 63b267964b..0000000000
--- a/test/files/neg/bug935.check
+++ /dev/null
@@ -1,7 +0,0 @@
-bug935.scala:5: error: type arguments [Test3.B] do not conform to class E's type parameter bounds [T <: String]
- @E[B](new B) val b = "hi"
- ^
-bug935.scala:11: error: type arguments [Test4.B] do not conform to class E's type parameter bounds [T <: String]
- val b: String @E[B](new B) = "hi"
- ^
-two errors found
diff --git a/test/files/neg/bug935.scala b/test/files/neg/bug935.scala
deleted file mode 100644
index 8677efaf3f..0000000000
--- a/test/files/neg/bug935.scala
+++ /dev/null
@@ -1,12 +0,0 @@
-object Test3 {
- class E[T >: Nothing <: String](s: T) extends Annotation
- class B
- // val a = new E[B](new B)
- @E[B](new B) val b = "hi"
-}
-
-object Test4 {
- class E[T <: String](s: T) extends Annotation
- class B
- val b: String @E[B](new B) = "hi"
-}
diff --git a/test/files/neg/bug944.check b/test/files/neg/bug944.check
deleted file mode 100644
index d45b968e9e..0000000000
--- a/test/files/neg/bug944.check
+++ /dev/null
@@ -1,4 +0,0 @@
-bug944.scala:5: error: implementation restricts functions to 22 parameters
- a23:Int) => 1
- ^
-one error found
diff --git a/test/files/neg/bug944.scala b/test/files/neg/bug944.scala
deleted file mode 100644
index dc80e5f49f..0000000000
--- a/test/files/neg/bug944.scala
+++ /dev/null
@@ -1,6 +0,0 @@
-object TooManyArgsFunction {
- val f = (a1:Int, a2:Int, a3:Int, a4:Int, a5:Int, a6:Int, a7:Int, a8:Int,
- a9:Int, a10:Int, a11:Int, a12:Int, a13:Int, a14:Int, a15:Int,
- a16:Int, a17:Int, a18:Int, a19:Int, a20:Int, a21:Int, a22:Int,
- a23:Int) => 1
-}
diff --git a/test/files/neg/bug960.check b/test/files/neg/bug960.check
deleted file mode 100644
index ebfc3c6638..0000000000
--- a/test/files/neg/bug960.check
+++ /dev/null
@@ -1,10 +0,0 @@
-bug960.scala:18: error: ambiguous reference to overloaded definition,
-both method unapply in object List of type [a](xs: List[a])Option[Null]
-and method unapply in object List of type [a](xs: List[a])Option[(a, List[a])]
-match argument types (List[a])
- case List(x, xs) => 7
- ^
-bug960.scala:12: error: method unapply is defined twice
- def unapply[a](xs: List[a]): Option[Null] = xs match {
- ^
-two errors found
diff --git a/test/files/neg/bug961.check b/test/files/neg/bug961.check
deleted file mode 100644
index 8b407d1d0c..0000000000
--- a/test/files/neg/bug961.check
+++ /dev/null
@@ -1,9 +0,0 @@
-bug961.scala:4: warning: case classes without a parameter list have been deprecated;
-use either case objects or case classes with `()' as parameter list.
- private case class B_inner extends A
- ^
-bug961.scala:11: error: Temp.this.B of type object Temp.B does not take parameters
- B() match {
- ^
-one warning found
-one error found
diff --git a/test/files/neg/bug961.scala b/test/files/neg/bug961.scala
deleted file mode 100644
index 15309b96b4..0000000000
--- a/test/files/neg/bug961.scala
+++ /dev/null
@@ -1,14 +0,0 @@
-object Temp{
- abstract class A
- object B{
- private case class B_inner extends A
- def apply: A = B_inner()
- def unapply(a: A) = a match {
- case B_inner() => true
- case _ => false
- }
- }
- B() match {
- case B() => Console.println("match")
- }
-}
diff --git a/test/files/neg/bug987.check b/test/files/neg/bug987.check
deleted file mode 100644
index 4cad622ab8..0000000000
--- a/test/files/neg/bug987.check
+++ /dev/null
@@ -1,19 +0,0 @@
-bug987.scala:15: error: illegal inheritance;
- class E inherits different type instances of trait B:
-B[D] and B[C]
-class E extends D
- ^
-bug987.scala:20: error: illegal inheritance;
- class F inherits different type instances of trait B:
-B[D] and B[C]
-class F extends D
- ^
-bug987.scala:25: error: illegal inheritance;
- class D inherits different type instances of trait B:
-B[D] and B[C]
-abstract class D extends C with B[D] {}
- ^
-bug987.scala:25: error: type arguments [D] do not conform to trait B's type parameter bounds [T <: B[T]]
-abstract class D extends C with B[D] {}
- ^
-four errors found
diff --git a/test/files/neg/bug987.scala b/test/files/neg/bug987.scala
deleted file mode 100644
index 0c65b98049..0000000000
--- a/test/files/neg/bug987.scala
+++ /dev/null
@@ -1,25 +0,0 @@
-// tested using Scala compiler version 2.4.0-RC1 -- (c) 2002-2009 LAMP/EPFL
-
-// Many thanks to all at LAMP for the work that goes into Scala.
-
-
-class A {}
-
-trait B[T <: B[T]] { self: T => }
-
-abstract class C extends A with B[C]
-{
- protected val data: List[Int]
-}
-
-class E extends D
-{
- val data = Nil
-}
-
-class F extends D
-{
- val data = Nil
-}
-
-abstract class D extends C with B[D] {}
diff --git a/test/files/neg/bug997.check b/test/files/neg/bug997.check
deleted file mode 100644
index 44e383228d..0000000000
--- a/test/files/neg/bug997.check
+++ /dev/null
@@ -1,13 +0,0 @@
-bug997.scala:7: error: wrong number of arguments for object Foo
-"x" match { case Foo(a) => Console.println(a) }
- ^
-bug997.scala:7: error: not found: value a
-"x" match { case Foo(a) => Console.println(a) }
- ^
-bug997.scala:13: error: wrong number of arguments for object Foo
-"x" match { case Foo(a, b, c) => Console.println((a,b,c)) }
- ^
-bug997.scala:13: error: not found: value a
-"x" match { case Foo(a, b, c) => Console.println((a,b,c)) }
- ^
-four errors found
diff --git a/test/files/neg/bug997.scala b/test/files/neg/bug997.scala
deleted file mode 100644
index b6897e62df..0000000000
--- a/test/files/neg/bug997.scala
+++ /dev/null
@@ -1,15 +0,0 @@
-// An extractor with 2 results
-object Foo { def unapply(x : String) = Some(Pair(x, x)) }
-
-object Test extends Application {
-
-// Prints 'x'; ought not to compile (or maybe a should be the Pair?).
-"x" match { case Foo(a) => Console.println(a) }
-
-// Prints '(x,x)' as expected.
-"x" match { case Foo(a, b) => Console.println((a,b)) }
-
-// Gives confusing error 'not found: value c'.
-"x" match { case Foo(a, b, c) => Console.println((a,b,c)) }
-
-}
diff --git a/test/files/neg/caseinherit.check b/test/files/neg/caseinherit.check
new file mode 100644
index 0000000000..09327a4ffa
--- /dev/null
+++ b/test/files/neg/caseinherit.check
@@ -0,0 +1,10 @@
+caseinherit.scala:3: error: case class B has case ancestor foo.A, but case-to-case inheritance is prohibited. To overcome this limitation, use extractors to pattern match on non-leaf nodes.
+ case class B(y: Int) extends A(y)
+ ^
+caseinherit.scala:4: error: case object Bippy has case ancestor foo.A, but case-to-case inheritance is prohibited. To overcome this limitation, use extractors to pattern match on non-leaf nodes.
+ case object Bippy extends A(55)
+ ^
+caseinherit.scala:11: error: case class Dingus has case ancestor foo.A, but case-to-case inheritance is prohibited. To overcome this limitation, use extractors to pattern match on non-leaf nodes.
+ case class Dingus(y: Int) extends Innocent
+ ^
+three errors found
diff --git a/test/files/neg/caseinherit.scala b/test/files/neg/caseinherit.scala
new file mode 100644
index 0000000000..5c8da13d31
--- /dev/null
+++ b/test/files/neg/caseinherit.scala
@@ -0,0 +1,13 @@
+package foo {
+ case class A(x: Int)
+ case class B(y: Int) extends A(y)
+ case object Bippy extends A(55)
+}
+import foo._
+
+package bar {
+ class Blameless(x: Int)
+ class Innocent extends A(5)
+ case class Dingus(y: Int) extends Innocent
+ case object Hungle extends Blameless(5)
+} \ No newline at end of file
diff --git a/test/files/neg/check-dead.check b/test/files/neg/check-dead.check
new file mode 100644
index 0000000000..29601c1d4a
--- /dev/null
+++ b/test/files/neg/check-dead.check
@@ -0,0 +1,13 @@
+check-dead.scala:7: error: dead code following this construct
+ def z1 = y1(throw new Exception) // should warn
+ ^
+check-dead.scala:10: error: dead code following this construct
+ def z2 = y2(throw new Exception) // should warn
+ ^
+check-dead.scala:29: error: dead code following this construct
+ throw new Exception // should warn
+ ^
+check-dead.scala:33: error: dead code following this construct
+ throw new Exception // should warn
+ ^
+four errors found
diff --git a/test/files/neg/check-dead.flags b/test/files/neg/check-dead.flags
new file mode 100644
index 0000000000..c7d406c649
--- /dev/null
+++ b/test/files/neg/check-dead.flags
@@ -0,0 +1 @@
+-Ywarn-dead-code -Xfatal-warnings \ No newline at end of file
diff --git a/test/files/neg/check-dead.scala b/test/files/neg/check-dead.scala
new file mode 100644
index 0000000000..aadd788814
--- /dev/null
+++ b/test/files/neg/check-dead.scala
@@ -0,0 +1,37 @@
+object Other {
+ def oops(msg: String = "xxx"): Nothing = throw new Exception(msg) // should not warn
+}
+
+class NoDeads {
+ def y1(arg: Any) = println("foo")
+ def z1 = y1(throw new Exception) // should warn
+
+ def y2[T](arg: T) = println("foo")
+ def z2 = y2(throw new Exception) // should warn
+
+ def y3[T](arg: => T) = println("foo")
+ def z3 = y3(throw new Exception) // should not warn: by name arg
+
+ def nowarn1 = synchronized { throw new Exception } // should not warn: synchronized should be by name
+
+ def nowarn2: Int = synchronized { // should not warn
+ val i = 10 + 2
+ return i
+ }
+ def nowarn3: Int = synchronized { // should not warn
+ val i = 10 + 2
+ i
+ }
+
+ def nowarn4: String = Other.oops("don't warn about me") // should not warn
+
+ def yeswarn1 = synchronized {
+ throw new Exception // should warn
+ 5 * 5
+ }
+ def yeswarn2: Int = synchronized {
+ throw new Exception // should warn
+ return 5
+ }
+}
+
diff --git a/test/files/neg/checksensible.check b/test/files/neg/checksensible.check
index 9d0487f9a2..d45d16165f 100644
--- a/test/files/neg/checksensible.check
+++ b/test/files/neg/checksensible.check
@@ -1,44 +1,103 @@
-checksensible.scala:1: error: class Test needs to be abstract, since method isabstract is not defined
-class Test {
+checksensible.scala:13: error: comparing a fresh object using `eq' will always yield false
+ (new AnyRef) eq (new AnyRef)
+ ^
+checksensible.scala:14: error: comparing a fresh object using `ne' will always yield true
+ (new AnyRef) ne (new AnyRef)
+ ^
+checksensible.scala:15: error: comparing a fresh object using `eq' will always yield false
+ Shmoopie eq (new AnyRef)
+ ^
+checksensible.scala:16: error: comparing a fresh object using `eq' will always yield false
+ (Shmoopie: AnyRef) eq (new AnyRef)
+ ^
+checksensible.scala:17: error: comparing a fresh object using `eq' will always yield false
+ (new AnyRef) eq Shmoopie
+ ^
+checksensible.scala:18: error: comparing a fresh object using `eq' will always yield false
+ (new AnyRef) eq null
+ ^
+checksensible.scala:19: error: comparing a fresh object using `eq' will always yield false
+ null eq new AnyRef
+ ^
+checksensible.scala:26: error: comparing values of types Unit and Int using `==' will always yield false
+ (c = 1) == 0
+ ^
+checksensible.scala:27: error: comparing values of types Int and Unit using `==' will always yield false
+ 0 == (c = 1)
+ ^
+checksensible.scala:29: error: comparing values of types Int and String using `==' will always yield false
+ 1 == "abc"
+ ^
+checksensible.scala:32: error: String and Int are unrelated: they will most likely never compare equal
+ "abc" == 1 // warns because the lub of String and Int is Any
+ ^
+checksensible.scala:33: error: Some[Int] and Int are unrelated: they will most likely never compare equal
+ Some(1) == 1 // as above
+ ^
+checksensible.scala:38: error: comparing a fresh object using `==' will always yield false
+ new AnyRef == 1
+ ^
+checksensible.scala:41: error: comparing values of types Int and Boolean using `==' will always yield false
+ 1 == (new java.lang.Boolean(true))
+ ^
+checksensible.scala:43: error: comparing values of types Int and Boolean using `!=' will always yield true
+ 1 != true
+ ^
+checksensible.scala:44: error: comparing values of types Unit and Boolean using `==' will always yield false
+ () == true
+ ^
+checksensible.scala:45: error: comparing values of types Unit and Unit using `==' will always yield true
+ () == ()
+ ^
+checksensible.scala:46: error: comparing values of types Unit and Unit using `==' will always yield true
+ () == println
+ ^
+checksensible.scala:47: error: comparing values of types Unit and scala.runtime.BoxedUnit using `==' will always yield true
+ () == scala.runtime.BoxedUnit.UNIT // these should warn for always being true/false
+ ^
+checksensible.scala:48: error: comparing values of types scala.runtime.BoxedUnit and Unit using `!=' will always yield false
+ scala.runtime.BoxedUnit.UNIT != ()
+ ^
+checksensible.scala:51: error: comparing values of types Int and Unit using `!=' will always yield true
+ (1 != println)
+ ^
+checksensible.scala:52: error: comparing values of types Int and Symbol using `!=' will always yield true
+ (1 != 'sym)
+ ^
+checksensible.scala:58: error: comparing a fresh object using `==' will always yield false
+ ((x: Int) => x + 1) == null
+ ^
+checksensible.scala:59: error: comparing a fresh object using `==' will always yield false
+ Bep == ((_: Int) + 1)
^
-checksensible.scala:3: warning: comparing values of types Unit and Int using `==' will always yield false
- println((c = 1) == 0)
+checksensible.scala:61: error: comparing a fresh object using `==' will always yield false
+ new Object == new Object
+ ^
+checksensible.scala:62: error: comparing a fresh object using `==' will always yield false
+ new Object == "abc"
+ ^
+checksensible.scala:63: error: comparing a fresh object using `!=' will always yield true
+ new Exception() != new Exception()
^
-checksensible.scala:5: warning: comparing values of types Int and java.lang.String using `==' will always yield false
- println(1 == "abc")
- ^
-checksensible.scala:6: warning: comparing values of types Int and Boolean using `!=' will always yield true
- println(1 != true)
- ^
-checksensible.scala:8: warning: comparing a fresh object using `==' will always yield false
- println(((x: Int) => x + 1) == null)
- ^
-checksensible.scala:9: warning: comparing a fresh object using `==' will always yield false
- println(new Object == new Object)
- ^
-checksensible.scala:10: warning: comparing a fresh object using `!=' will always yield true
- println(new Exception() != new Exception())
- ^
-checksensible.scala:13: warning: comparing values of types Int and Null using `==' will always yield false
- if (foo.length == null) // == 0 makes more sense, but still
+checksensible.scala:66: error: comparing values of types Int and Null using `==' will always yield false
+ if (foo.length == null) "plante" else "plante pas"
^
-checksensible.scala:22: warning: comparing values of types Unit and Int using `!=' will always yield true
+checksensible.scala:71: error: comparing values of types Bip and Bop using `==' will always yield false
+ (x1 == x2)
+ ^
+checksensible.scala:81: error: comparing values of types EqEqRefTest.this.C3 and EqEqRefTest.this.Z1 using `==' will always yield false
+ c3 == z1
+ ^
+checksensible.scala:82: error: comparing values of types EqEqRefTest.this.Z1 and EqEqRefTest.this.C3 using `==' will always yield false
+ z1 == c3
+ ^
+checksensible.scala:83: error: comparing values of types EqEqRefTest.this.Z1 and EqEqRefTest.this.C3 using `!=' will always yield true
+ z1 != c3
+ ^
+checksensible.scala:84: error: comparing values of types EqEqRefTest.this.C3 and String using `!=' will always yield true
+ c3 != "abc"
+ ^
+checksensible.scala:95: error: comparing values of types Unit and Int using `!=' will always yield true
while ((c = in.read) != -1)
^
-checksensible.scala:28: warning: comparing values of types Unit and Boolean using `==' will always yield false
- println({} == true)
- ^
-checksensible.scala:30: warning: comparing a fresh object using `==' will always yield false
- println(new Object == 1)
- ^
-checksensible.scala:31: warning: comparing values of types Int and java.lang.Object using `==' will always yield false
- println(1 == (new Object))
- ^
-checksensible.scala:35: warning: comparing values of types Int and Unit using `!=' will always yield true
- println(1 != println)
- ^
-checksensible.scala:36: warning: comparing values of types Int and Symbol using `!=' will always yield true
- println(1 != 'sym)
- ^
-13 warnings found
-one error found
+34 errors found
diff --git a/test/files/neg/checksensible.flags b/test/files/neg/checksensible.flags
new file mode 100644
index 0000000000..e8fb65d50c
--- /dev/null
+++ b/test/files/neg/checksensible.flags
@@ -0,0 +1 @@
+-Xfatal-warnings \ No newline at end of file
diff --git a/test/files/neg/checksensible.scala b/test/files/neg/checksensible.scala
index 092c08592f..27ee908153 100644
--- a/test/files/neg/checksensible.scala
+++ b/test/files/neg/checksensible.scala
@@ -1,38 +1,100 @@
-class Test {
+final class Bip { def <=(other: Bop) = true }
+final class Bop { }
+object Bep { }
+
+final class Zing {
+ def !=(other: Zing) = false
+}
+
+// 7 warnings
+class RefEqTest {
+ object Shmoopie
+
+ (new AnyRef) eq (new AnyRef)
+ (new AnyRef) ne (new AnyRef)
+ Shmoopie eq (new AnyRef)
+ (Shmoopie: AnyRef) eq (new AnyRef)
+ (new AnyRef) eq Shmoopie
+ (new AnyRef) eq null
+ null eq new AnyRef
+}
+
+// 13 warnings
+class EqEqValTest {
var c = 0
- println((c = 1) == 0)
+
+ (c = 1) == 0
+ 0 == (c = 1)
+
+ 1 == "abc"
+ 1 == ("abc": Any) // doesn't warn because an Any may be a boxed Int
+ 1 == (1: Any) // as above
+ "abc" == 1 // warns because the lub of String and Int is Any
+ Some(1) == 1 // as above
+
+ true == new java.lang.Boolean(true) // none of these should warn
+ new java.lang.Boolean(true) == true
+
+ new AnyRef == 1
+ 1 == new AnyRef // doesn't warn because it could be...
+ 1 == (new java.lang.Integer(1)) // ...something like this
+ 1 == (new java.lang.Boolean(true))
+
+ 1 != true
+ () == true
+ () == ()
+ () == println
+ () == scala.runtime.BoxedUnit.UNIT // these should warn for always being true/false
+ scala.runtime.BoxedUnit.UNIT != ()
+ (scala.runtime.BoxedUnit.UNIT: java.io.Serializable) != () // shouldn't warn
+
+ (1 != println)
+ (1 != 'sym)
+}
- println(1 == "abc")
- println(1 != true)
+// 12 warnings
+class EqEqRefTest {
+ val ref = new Bop
+ ((x: Int) => x + 1) == null
+ Bep == ((_: Int) + 1)
- println(((x: Int) => x + 1) == null)
- println(new Object == new Object)
- println(new Exception() != new Exception())
+ new Object == new Object
+ new Object == "abc"
+ new Exception() != new Exception()
val foo: Array[String] = Array("1","2","3")
- if (foo.length == null) // == 0 makes more sense, but still
- println("plante") // this code leads to runtime crash
- else
- println("plante pas")
+ if (foo.length == null) "plante" else "plante pas"
+ // final classes with default equals
+ val x1 = new Bip
+ val x2 = new Bop
+ (x1 == x2)
+
+ class C1 { }
+ class C2 extends C1 { }
+ final class Z1 extends C2 { }
+ final class C3 extends C2 { def !=(other: Z1) = false }
+ val z1 = new Z1
+ val c3 = new C3
+
+ // these should always warn
+ c3 == z1
+ z1 == c3
+ z1 != c3
+ c3 != "abc"
+ // this should warn when feeling chatty
+ c3 != z1
+
+ // non-warners
+ (null: AnyRef) == (null: AnyRef)
+ (x1 <= x2)
+
def main(args: Array[String]) = {
val in = new java.io.FileInputStream(args(0))
-
- var c = 0
+ var c = 0
while ((c = in.read) != -1)
print(c.toChar)
in.close
}
-
- println({} == true)
- println("hello" == 2)
- println(new Object == 1)
- println(1 == (new Object))
-
- def isabstract: Int
-
- println(1 != println)
- println(1 != 'sym)
-
}
diff --git a/test/files/neg/checksensibleUnit.check b/test/files/neg/checksensibleUnit.check
index 1de1aa8031..7fed4e558a 100644
--- a/test/files/neg/checksensibleUnit.check
+++ b/test/files/neg/checksensibleUnit.check
@@ -1,7 +1,7 @@
checksensibleUnit.scala:3: error: value > is not a member of Unit
println((c = 1) > 0)
- ^
+ ^
checksensibleUnit.scala:4: error: value <= is not a member of Unit
println((c = 1) <= 0)
- ^
+ ^
two errors found
diff --git a/test/files/neg/choices.check b/test/files/neg/choices.check
new file mode 100644
index 0000000000..3e63f9999d
--- /dev/null
+++ b/test/files/neg/choices.check
@@ -0,0 +1,2 @@
+partest error: bad flags: -Ylinearizer
+one error found
diff --git a/test/files/neg/choices.flags b/test/files/neg/choices.flags
new file mode 100644
index 0000000000..5464a18c5d
--- /dev/null
+++ b/test/files/neg/choices.flags
@@ -0,0 +1 @@
+-Ylinearizer \ No newline at end of file
diff --git a/test/files/neg/choices.scala b/test/files/neg/choices.scala
new file mode 100644
index 0000000000..fe9236f10f
--- /dev/null
+++ b/test/files/neg/choices.scala
@@ -0,0 +1,5 @@
+object Test {
+ def main(args: Array[String]): Unit = {
+
+ }
+}
diff --git a/test/files/neg/constrs.check b/test/files/neg/constrs.check
index 3524709785..4f4a12bc13 100644
--- a/test/files/neg/constrs.check
+++ b/test/files/neg/constrs.check
@@ -8,7 +8,7 @@ constrs.scala:10: error: called constructor's definition must precede calling co
def this() = this("abc")
^
constrs.scala:12: error: called constructor's definition must precede calling constructor's definition
- def this(x: boolean) = this(x)
+ def this(x: Boolean) = this(x)
^
constrs.scala:16: error: type mismatch;
found : Int(1)
diff --git a/test/files/neg/constrs.scala b/test/files/neg/constrs.scala
index 969f593a2d..016df098f0 100644
--- a/test/files/neg/constrs.scala
+++ b/test/files/neg/constrs.scala
@@ -9,7 +9,7 @@ object test {
class Foo(x: Int) {
def this() = this("abc")
def this(x: String) = this(1)
- def this(x: boolean) = this(x)
+ def this(x: Boolean) = this(x)
}
class Bar[a](x: a) {
diff --git a/test/files/neg/depmet_1.check b/test/files/neg/depmet_1.check
new file mode 100644
index 0000000000..7a4f845fd5
--- /dev/null
+++ b/test/files/neg/depmet_1.check
@@ -0,0 +1,10 @@
+depmet_1.scala:2: error: illegal dependent method type: parameter appears in the type of another parameter in the same section or an earlier one
+ def precise0(y: x.type)(x: String): Unit = {}
+ ^
+depmet_1.scala:3: error: illegal dependent method type: parameter appears in the type of another parameter in the same section or an earlier one
+ def precise1(x: String, y: x.type): Unit = {}
+ ^
+depmet_1.scala:4: error: not found: value y
+ def precise2[T <: y.type](y: String): Unit = {}
+ ^
+three errors found
diff --git a/test/files/neg/depmet_1.scala b/test/files/neg/depmet_1.scala
new file mode 100644
index 0000000000..fc672e1ed8
--- /dev/null
+++ b/test/files/neg/depmet_1.scala
@@ -0,0 +1,5 @@
+object Test {
+ def precise0(y: x.type)(x: String): Unit = {}
+ def precise1(x: String, y: x.type): Unit = {}
+ def precise2[T <: y.type](y: String): Unit = {}
+} \ No newline at end of file
diff --git a/test/files/neg/divergent-implicit.check b/test/files/neg/divergent-implicit.check
index 07af8510d9..5f20df1b91 100644
--- a/test/files/neg/divergent-implicit.check
+++ b/test/files/neg/divergent-implicit.check
@@ -3,15 +3,15 @@ divergent-implicit.scala:4: error: type mismatch;
required: String
val x1: String = 1
^
-divergent-implicit.scala:5: error: diverging implicit expansion for type (Int) => String
+divergent-implicit.scala:5: error: diverging implicit expansion for type Int => String
starting with method cast in object Test1
val x2: String = cast[Int, String](1)
^
-divergent-implicit.scala:14: error: diverging implicit expansion for type (Test2.Baz) => Test2.Bar
+divergent-implicit.scala:14: error: diverging implicit expansion for type Test2.Baz => Test2.Bar
starting with method baz2bar in object Test2
val x: Bar = new Foo
^
-divergent-implicit.scala:15: error: diverging implicit expansion for type (Test2.Foo) => Test2.Bar
+divergent-implicit.scala:15: error: diverging implicit expansion for type Test2.Foo => Test2.Bar
starting with method foo2bar in object Test2
val y: Bar = new Baz
^
diff --git a/test/files/neg/eta-expand-star.check b/test/files/neg/eta-expand-star.check
new file mode 100644
index 0000000000..6765d504fc
--- /dev/null
+++ b/test/files/neg/eta-expand-star.check
@@ -0,0 +1,4 @@
+eta-expand-star.scala:6: error: too many arguments for method apply: (v1: Seq[T])Unit in trait Function1
+ g(1, 2)
+ ^
+one error found
diff --git a/test/files/neg/eta-expand-star.scala b/test/files/neg/eta-expand-star.scala
new file mode 100644
index 0000000000..5749692522
--- /dev/null
+++ b/test/files/neg/eta-expand-star.scala
@@ -0,0 +1,8 @@
+object Test {
+ def f[T](xs: T*): Unit = ()
+ def g[T] = f[T] _
+
+ def main(args: Array[String]): Unit = {
+ g(1, 2)
+ }
+}
diff --git a/test/files/neg/exhausting.check b/test/files/neg/exhausting.check
new file mode 100644
index 0000000000..0bef21e077
--- /dev/null
+++ b/test/files/neg/exhausting.check
@@ -0,0 +1,29 @@
+exhausting.scala:20: error: match is not exhaustive!
+missing combination * Nil
+
+ def fail1[T](xs: List[T]) = xs match {
+ ^
+exhausting.scala:24: error: match is not exhaustive!
+missing combination Nil
+
+ def fail2[T](xs: List[T]) = xs match {
+ ^
+exhausting.scala:27: error: match is not exhaustive!
+missing combination Bar3
+
+ def fail3[T](x: Foo[T]) = x match {
+ ^
+exhausting.scala:31: error: match is not exhaustive!
+missing combination Bar2 Bar2
+
+ def fail4[T <: AnyRef](xx: (Foo[T], Foo[T])) = xx match {
+ ^
+exhausting.scala:36: error: match is not exhaustive!
+missing combination Bar1 Bar2
+missing combination Bar1 Bar3
+missing combination Bar2 Bar1
+missing combination Bar2 Bar2
+
+ def fail5[T](xx: (Foo[T], Foo[T])) = xx match {
+ ^
+5 errors found
diff --git a/test/files/neg/exhausting.flags b/test/files/neg/exhausting.flags
new file mode 100644
index 0000000000..e8fb65d50c
--- /dev/null
+++ b/test/files/neg/exhausting.flags
@@ -0,0 +1 @@
+-Xfatal-warnings \ No newline at end of file
diff --git a/test/files/neg/exhausting.scala b/test/files/neg/exhausting.scala
new file mode 100644
index 0000000000..14b05695aa
--- /dev/null
+++ b/test/files/neg/exhausting.scala
@@ -0,0 +1,45 @@
+object Test {
+ sealed abstract class Foo[T]
+ case object Bar1 extends Foo[Int]
+ case object Bar2 extends Foo[String]
+ case object Bar3 extends Foo[Any]
+
+ def ex1[T](xs: List[T]) = xs match {
+ case ys: List[_] => "ok"
+ }
+ def ex2[T](xx: (Foo[T], Foo[T])) = xx match {
+ case (Bar1, Bar1) => ()
+ case (_, Bar1) => ()
+ case (_, Bar3) => ()
+ case (_, Bar2) => ()
+ }
+ def ex3[T](xx: (Foo[T], Foo[T])) = xx match {
+ case (_: Foo[_], _: Foo[_]) => ()
+ }
+
+ def fail1[T](xs: List[T]) = xs match {
+ case Nil => "ok"
+ case x :: y :: Nil => "ok"
+ }
+ def fail2[T](xs: List[T]) = xs match {
+ case _ :: _ => "ok"
+ }
+ def fail3[T](x: Foo[T]) = x match {
+ case Bar1 => "ok"
+ case Bar2 => "ok"
+ }
+ def fail4[T <: AnyRef](xx: (Foo[T], Foo[T])) = xx match {
+ case (Bar1, Bar1) => ()
+ case (Bar2, Bar3) => ()
+ case (Bar3, _) => ()
+ }
+ def fail5[T](xx: (Foo[T], Foo[T])) = xx match {
+ case (Bar1, Bar1) => ()
+ case (Bar2, Bar3) => ()
+ case (Bar3, _) => ()
+ }
+
+ def main(args: Array[String]): Unit = {
+
+ }
+}
diff --git a/test/files/neg/for-comprehension-old.check b/test/files/neg/for-comprehension-old.check
new file mode 100644
index 0000000000..1ecaf12af4
--- /dev/null
+++ b/test/files/neg/for-comprehension-old.check
@@ -0,0 +1,26 @@
+for-comprehension-old.scala:3: warning: val keyword in for comprehension is deprecated
+ for (x <- 1 to 5 ; val y = x) yield x+y // fail
+ ^
+for-comprehension-old.scala:5: warning: val keyword in for comprehension is deprecated
+ for (val x <- 1 to 5 ; val y = x) yield x+y // fail
+ ^
+for-comprehension-old.scala:8: warning: val keyword in for comprehension is deprecated
+ for (z <- 1 to 2 ; x <- 1 to 5 ; val y = x) yield x+y // fail
+ ^
+for-comprehension-old.scala:10: warning: val keyword in for comprehension is deprecated
+ for (z <- 1 to 2 ; val x <- 1 to 5 ; val y = x) yield x+y // fail
+ ^
+for-comprehension-old.scala:4: error: val in for comprehension must be followed by assignment
+ for (val x <- 1 to 5 ; y = x) yield x+y // fail
+ ^
+for-comprehension-old.scala:5: error: val in for comprehension must be followed by assignment
+ for (val x <- 1 to 5 ; val y = x) yield x+y // fail
+ ^
+for-comprehension-old.scala:9: error: val in for comprehension must be followed by assignment
+ for (z <- 1 to 2 ; val x <- 1 to 5 ; y = x) yield x+y // fail
+ ^
+for-comprehension-old.scala:10: error: val in for comprehension must be followed by assignment
+ for (z <- 1 to 2 ; val x <- 1 to 5 ; val y = x) yield x+y // fail
+ ^
+four warnings found
+four errors found
diff --git a/test/files/neg/for-comprehension-old.scala b/test/files/neg/for-comprehension-old.scala
new file mode 100644
index 0000000000..10ae363bde
--- /dev/null
+++ b/test/files/neg/for-comprehension-old.scala
@@ -0,0 +1,11 @@
+class A {
+ for (x <- 1 to 5 ; y = x) yield x+y // ok
+ for (x <- 1 to 5 ; val y = x) yield x+y // fail
+ for (val x <- 1 to 5 ; y = x) yield x+y // fail
+ for (val x <- 1 to 5 ; val y = x) yield x+y // fail
+
+ for (z <- 1 to 2 ; x <- 1 to 5 ; y = x) yield x+y // ok
+ for (z <- 1 to 2 ; x <- 1 to 5 ; val y = x) yield x+y // fail
+ for (z <- 1 to 2 ; val x <- 1 to 5 ; y = x) yield x+y // fail
+ for (z <- 1 to 2 ; val x <- 1 to 5 ; val y = x) yield x+y // fail
+}
diff --git a/test/files/neg/forward.scala b/test/files/neg/forward.scala
index d5c0851f09..3774fa838f 100644
--- a/test/files/neg/forward.scala
+++ b/test/files/neg/forward.scala
@@ -5,20 +5,20 @@ object Test {
{
def f: Int = x;
val x: Int = f;
- }
+ }
{
def f: Int = g;
val x: Int = f;
def g: Int = x;
- }
+ }
{
def f: Int = g;
var x: Int = f;
def g: Int = x;
- }
+ }
{
def f: Int = g;
Console.println("foo");
def g: Int = f;
- }
+ }
}
diff --git a/test/files/neg/found-req-variance.check b/test/files/neg/found-req-variance.check
new file mode 100644
index 0000000000..cc26458ac5
--- /dev/null
+++ b/test/files/neg/found-req-variance.check
@@ -0,0 +1,185 @@
+found-req-variance.scala:22: error: type mismatch;
+ found : Inv[B]
+ required: Inv[A]
+Note: B <: A, but class Inv is invariant in type T.
+You may wish to define T as +T instead. (SLS 4.5)
+ def f2 = Set[Inv[A]]() + new Inv[B]
+ ^
+found-req-variance.scala:23: error: type mismatch;
+ found : Inv[C]
+ required: Inv[A]
+Note: C <: A, but class Inv is invariant in type T.
+You may wish to define T as +T instead. (SLS 4.5)
+ def f3 = Set[Inv[A]]() + new Inv[C]
+ ^
+found-req-variance.scala:24: error: type mismatch;
+ found : Inv[A]
+ required: Inv[B]
+Note: A >: B, but class Inv is invariant in type T.
+You may wish to define T as -T instead. (SLS 4.5)
+ def f4 = Set[Inv[B]]() + new Inv[A]
+ ^
+found-req-variance.scala:26: error: type mismatch;
+ found : Inv[C]
+ required: Inv[B]
+Note: C <: B, but class Inv is invariant in type T.
+You may wish to define T as +T instead. (SLS 4.5)
+ def f6 = Set[Inv[B]]() + new Inv[C]
+ ^
+found-req-variance.scala:27: error: type mismatch;
+ found : Inv[A]
+ required: Inv[C]
+Note: A >: C, but class Inv is invariant in type T.
+You may wish to define T as -T instead. (SLS 4.5)
+ def f7 = Set[Inv[C]]() + new Inv[A]
+ ^
+found-req-variance.scala:28: error: type mismatch;
+ found : Inv[B]
+ required: Inv[C]
+Note: B >: C, but class Inv is invariant in type T.
+You may wish to define T as -T instead. (SLS 4.5)
+ def f8 = Set[Inv[C]]() + new Inv[B]
+ ^
+found-req-variance.scala:34: error: type mismatch;
+ found : MultiInv[A]
+ required: Multi[A,B,C]
+Note: A >: B (and MultiInv[A] <: Multi[A,A,C]), but class Multi is invariant in type Inv.
+You may wish to define Inv as -Inv instead. (SLS 4.5)
+ def g4 = Set[Multi[A, B, C]]() + new MultiInv[A]
+ ^
+found-req-variance.scala:36: error: type mismatch;
+ found : MultiInv[C]
+ required: Multi[A,B,C]
+Note: C <: B (and MultiInv[C] <: Multi[A,C,C]), but class Multi is invariant in type Inv.
+You may wish to define Inv as +Inv instead. (SLS 4.5)
+ def g6 = Set[Multi[A, B, C]]() + new MultiInv[C]
+ ^
+found-req-variance.scala:47: error: type mismatch;
+ found : FF1[A,A]
+ required: FF1[B,B]
+ def ff1 = f[B, B](h[A, A]) // fail
+ ^
+found-req-variance.scala:48: error: type mismatch;
+ found : FF1[B,A]
+ required: FF1[B,B]
+ def ff2 = f[B, B](h[B, A]) // fail
+ ^
+found-req-variance.scala:49: error: type mismatch;
+ found : FF1[C,A]
+ required: FF1[B,B]
+ def ff3 = f[B, B](h[C, A]) // fail
+ ^
+found-req-variance.scala:50: error: type mismatch;
+ found : FF1[A,B]
+ required: FF1[B,B]
+Note: A >: B, but trait FF1 is invariant in type T.
+You may wish to define T as -T instead. (SLS 4.5)
+ def ff4 = f[B, B](h[A, B]) // suggest
+ ^
+found-req-variance.scala:52: error: type mismatch;
+ found : FF1[C,B]
+ required: FF1[B,B]
+Note: C <: B, but trait FF1 is invariant in type T.
+You may wish to define T as +T instead. (SLS 4.5)
+ def ff6 = f[B, B](h[C, B]) // suggest
+ ^
+found-req-variance.scala:53: error: type mismatch;
+ found : FF1[A,C]
+ required: FF1[B,B]
+Note: A >: B, but trait FF1 is invariant in type T.
+You may wish to define T as -T instead. (SLS 4.5)
+ def ff7 = f[B, B](h[A, C]) // suggest
+ ^
+found-req-variance.scala:55: error: type mismatch;
+ found : FF1[C,C]
+ required: FF1[B,B]
+Note: C <: B, but trait FF1 is invariant in type T.
+You may wish to define T as +T instead. (SLS 4.5)
+ def ff9 = f[B, B](h[C, C]) // suggest
+ ^
+found-req-variance.scala:61: error: type mismatch;
+ found : FF2[A,A]
+ required: FF2[B,B]
+Note: A >: B, but trait FF2 is invariant in type R.
+You may wish to define R as -R instead. (SLS 4.5)
+ def ff1 = f[B, B](h[A, A]) // suggest
+ ^
+found-req-variance.scala:62: error: type mismatch;
+ found : FF2[B,A]
+ required: FF2[B,B]
+Note: A >: B, but trait FF2 is invariant in type R.
+You may wish to define R as -R instead. (SLS 4.5)
+ def ff2 = f[B, B](h[B, A]) // suggest
+ ^
+found-req-variance.scala:63: error: type mismatch;
+ found : FF2[C,A]
+ required: FF2[B,B]
+ def ff3 = f[B, B](h[C, A]) // fail
+ ^
+found-req-variance.scala:66: error: type mismatch;
+ found : FF2[C,B]
+ required: FF2[B,B]
+ def ff6 = f[B, B](h[C, B]) // fail
+ ^
+found-req-variance.scala:67: error: type mismatch;
+ found : FF2[A,C]
+ required: FF2[B,B]
+Note: C <: B, but trait FF2 is invariant in type R.
+You may wish to define R as +R instead. (SLS 4.5)
+ def ff7 = f[B, B](h[A, C]) // suggest
+ ^
+found-req-variance.scala:68: error: type mismatch;
+ found : FF2[B,C]
+ required: FF2[B,B]
+Note: C <: B, but trait FF2 is invariant in type R.
+You may wish to define R as +R instead. (SLS 4.5)
+ def ff8 = f[B, B](h[B, C]) // suggest
+ ^
+found-req-variance.scala:69: error: type mismatch;
+ found : FF2[C,C]
+ required: FF2[B,B]
+ def ff9 = f[B, B](h[C, C]) // fail
+ ^
+found-req-variance.scala:86: error: type mismatch;
+ found : java.util.ArrayList[String]
+ required: java.util.List[AnyRef]
+Note: String <: AnyRef, but Java-defined trait List is invariant in type E.
+You may wish to investigate a wildcard type such as `_ <: AnyRef`. (SLS 3.2.10)
+ def g1 = f[AnyRef](new java.util.ArrayList[String] { })
+ ^
+found-req-variance.scala:87: error: type mismatch;
+ found : scala.math.Ordering[AnyRef]
+ required: java.util.Comparator[String]
+Note: AnyRef >: String, but Java-defined trait Comparator is invariant in type T.
+You may wish to investigate a wildcard type such as `_ >: String`. (SLS 3.2.10)
+ def g2 = g[String](Ordering.fromLessThan[AnyRef](_.toString < _.toString))
+ ^
+found-req-variance.scala:94: error: type mismatch;
+ found : Misc.MyData
+ required: Misc.Data[AnyVal]
+Note: Int <: AnyVal (and Misc.MyData <: Misc.Data[Int]), but class Data is invariant in type A.
+You may wish to define A as +A instead. (SLS 4.5)
+ def f1 = Set[Data[AnyVal]]() + new MyData
+ ^
+found-req-variance.scala:100: error: type mismatch;
+ found : Set[String]
+ required: Set[CharSequence]
+Note: String <: CharSequence, but trait Set is invariant in type A.
+You may wish to investigate a wildcard type such as `_ <: CharSequence`. (SLS 3.2.10)
+ foo(s)
+ ^
+found-req-variance.scala:104: error: type mismatch;
+ found : Misc.Trippy[String,String,String]
+ required: Misc.Trippy[Object,Object,Object]
+Note: String <: Object, but class Trippy is invariant in type T2.
+You may wish to define T2 as +T2 instead. (SLS 4.5)
+ def g1 = Set[Trippy[AnyRef, AnyRef, AnyRef]]() + new Trippy[String, String, String]
+ ^
+found-req-variance.scala:105: error: type mismatch;
+ found : scala.collection.immutable.Map[AnyRef,String]
+ required: Map[String,String]
+Note: AnyRef >: String, but trait Map is invariant in type A.
+You may wish to investigate a wildcard type such as `_ >: String`. (SLS 3.2.10)
+ def g2 = Set[Map[String, String]]() + Map[AnyRef, String]()
+ ^
+28 errors found
diff --git a/test/files/neg/found-req-variance.scala b/test/files/neg/found-req-variance.scala
new file mode 100644
index 0000000000..fd3b11160e
--- /dev/null
+++ b/test/files/neg/found-req-variance.scala
@@ -0,0 +1,106 @@
+import scala.collection.mutable.ListBuffer
+
+class A
+class B extends A
+class C extends B
+
+trait FF1[T, +R]
+trait FF2[-T, R]
+
+class Inv[T]
+class InvA extends Inv[A]
+class InvB extends Inv[B]
+class InvC extends Inv[C]
+
+class Multi[+Cov, Inv, -Con]
+class MultiCov[+T <: A] extends Multi[T, B, C]
+class MultiInv[T] extends Multi[A, T, C]
+class MultiCon[-T >: C] extends Multi[A, B, T]
+
+object Test {
+ def f1 = Set[Inv[A]]() + new Inv[A]
+ def f2 = Set[Inv[A]]() + new Inv[B]
+ def f3 = Set[Inv[A]]() + new Inv[C]
+ def f4 = Set[Inv[B]]() + new Inv[A]
+ def f5 = Set[Inv[B]]() + new Inv[B]
+ def f6 = Set[Inv[B]]() + new Inv[C]
+ def f7 = Set[Inv[C]]() + new Inv[A]
+ def f8 = Set[Inv[C]]() + new Inv[B]
+ def f9 = Set[Inv[C]]() + new Inv[C]
+
+ def g1 = Set[Multi[A, B, C]]() + new MultiCov[A]
+ def g2 = Set[Multi[A, B, C]]() + new MultiCov[B]
+ def g3 = Set[Multi[A, B, C]]() + new MultiCov[C]
+ def g4 = Set[Multi[A, B, C]]() + new MultiInv[A]
+ def g5 = Set[Multi[A, B, C]]() + new MultiInv[B]
+ def g6 = Set[Multi[A, B, C]]() + new MultiInv[C]
+ def g7 = Set[Multi[A, B, C]]() + new MultiCon[A]
+ def g8 = Set[Multi[A, B, C]]() + new MultiCon[B]
+ def g9 = Set[Multi[A, B, C]]() + new MultiCon[C]
+}
+
+object Functions {
+ object Set1 {
+ def f[T, R](x: FF1[T, R]) = ()
+ def h[T, R] : FF1[T, R] = sys.error("")
+
+ def ff1 = f[B, B](h[A, A]) // fail
+ def ff2 = f[B, B](h[B, A]) // fail
+ def ff3 = f[B, B](h[C, A]) // fail
+ def ff4 = f[B, B](h[A, B]) // suggest
+ def ff5 = f[B, B](h[B, B]) // ok
+ def ff6 = f[B, B](h[C, B]) // suggest
+ def ff7 = f[B, B](h[A, C]) // suggest
+ def ff8 = f[B, B](h[B, C]) // ok
+ def ff9 = f[B, B](h[C, C]) // suggest
+ }
+ object Set2 {
+ def f[T, R](x: FF2[T, R]) = ()
+ def h[T, R] : FF2[T, R] = sys.error("")
+
+ def ff1 = f[B, B](h[A, A]) // suggest
+ def ff2 = f[B, B](h[B, A]) // suggest
+ def ff3 = f[B, B](h[C, A]) // fail
+ def ff4 = f[B, B](h[A, B]) // ok
+ def ff5 = f[B, B](h[B, B]) // ok
+ def ff6 = f[B, B](h[C, B]) // fail
+ def ff7 = f[B, B](h[A, C]) // suggest
+ def ff8 = f[B, B](h[B, C]) // suggest
+ def ff9 = f[B, B](h[C, C]) // fail
+ }
+}
+
+// TODO
+// object TypeAlias {
+// type LL[T] = List[T]
+// val LL = List
+//
+// def f1 = Set[LL[B]]() + LL[A](new A)
+// def f2 = Set[LL[B]]() + LL[C](new C)
+// }
+
+object Javas {
+ def f[T](x: java.util.List[T]) = ()
+ def g[T](x: java.util.Comparator[T]) = ()
+
+ def g1 = f[AnyRef](new java.util.ArrayList[String] { })
+ def g2 = g[String](Ordering.fromLessThan[AnyRef](_.toString < _.toString))
+}
+
+object Misc {
+ // original motivation
+ class Data[A <: AnyVal]
+ class MyData extends Data[Int] { }
+ def f1 = Set[Data[AnyVal]]() + new MyData
+
+ // from stackoverflow
+ def foo(s: Set[CharSequence]): Unit = ()
+ def f4 = {
+ val s: Set[String] = Set("Hello", "World");
+ foo(s)
+ }
+
+ class Trippy[+T1, T2, +T3]
+ def g1 = Set[Trippy[AnyRef, AnyRef, AnyRef]]() + new Trippy[String, String, String]
+ def g2 = Set[Map[String, String]]() + Map[AnyRef, String]()
+} \ No newline at end of file
diff --git a/test/files/neg/gadts1.check b/test/files/neg/gadts1.check
index 4c91a3bcf8..44d2b114d6 100644
--- a/test/files/neg/gadts1.check
+++ b/test/files/neg/gadts1.check
@@ -3,4 +3,12 @@ gadts1.scala:15: error: type mismatch;
required: a
case NumTerm(n) => c.x = Double(1.0)
^
-one error found
+gadts1.scala:20: error: class Cell of type Test.Cell does not take type parameters.
+ case Cell[a](x: Int) => c.x = 5
+ ^
+gadts1.scala:20: error: type mismatch;
+ found : Int(5)
+ required: a
+ case Cell[a](x: Int) => c.x = 5
+ ^
+three errors found
diff --git a/test/files/neg/gadts1.scala b/test/files/neg/gadts1.scala
index 67aef4f2d9..1fb6e57e2d 100644
--- a/test/files/neg/gadts1.scala
+++ b/test/files/neg/gadts1.scala
@@ -1,8 +1,8 @@
object Test{
abstract class Number
-case class Int(n: int) extends Number
-case class Double(d: double) extends Number
+case class Int(n: scala.Int) extends Number
+case class Double(d: scala.Double) extends Number
trait Term[+a]
case class Cell[a](var x: a) extends Term[a]
@@ -10,15 +10,21 @@ case class NumTerm(val n: Number) extends Term[Number]
class IntTerm(n: Int) extends NumTerm(n) with Term[Int]
-def f[a](t:Term[a], c:Cell[a]): unit =
+def f[a](t:Term[a], c:Cell[a]): Unit = {
+ t match {
+ case NumTerm(n) => c.x = Double(1.0)
+ }
t match {
- case NumTerm(n) => c.x = Double(1.0)
+ // presently testing that this gets past the parser: eventually
+ // it should actually work.
+ case Cell[a](x: Int) => c.x = 5
}
+}
val x:Term[Number] = NumTerm(Int(5))
-def main(args: Array[String]): unit = {
+def main(args: Array[String]): Unit = {
val cell = Cell[Int](Int(6))
Console.println(cell)
f[Int](new IntTerm(Int(5)), cell)
diff --git a/test/files/neg/hk-bad-bounds.check b/test/files/neg/hk-bad-bounds.check
new file mode 100644
index 0000000000..d6293993c1
--- /dev/null
+++ b/test/files/neg/hk-bad-bounds.check
@@ -0,0 +1,4 @@
+hk-bad-bounds.scala:4: error: type arguments [Set] do not conform to class SeqFactory's type parameter bounds [CC[X] <: Seq[X] with scala.collection.generic.GenericTraversableTemplate[X,CC]]
+ def f(x: Boolean) = if (x) (null: SeqFactory[List]) else (null: SeqFactory[Set])
+ ^
+one error found
diff --git a/test/files/neg/hk-bad-bounds.scala b/test/files/neg/hk-bad-bounds.scala
new file mode 100644
index 0000000000..0ed0b4c385
--- /dev/null
+++ b/test/files/neg/hk-bad-bounds.scala
@@ -0,0 +1,5 @@
+import collection.generic.SeqFactory
+
+class A {
+ def f(x: Boolean) = if (x) (null: SeqFactory[List]) else (null: SeqFactory[Set])
+}
diff --git a/test/files/neg/illegal-stmt-start.check b/test/files/neg/illegal-stmt-start.check
new file mode 100644
index 0000000000..01747524f8
--- /dev/null
+++ b/test/files/neg/illegal-stmt-start.check
@@ -0,0 +1,4 @@
+illegal-stmt-start.scala:3: error: illegal start of statement (no modifiers allowed here)
+ private def bar {}
+ ^
+one error found
diff --git a/test/files/neg/illegal-stmt-start.scala b/test/files/neg/illegal-stmt-start.scala
new file mode 100644
index 0000000000..48ae0a8b0a
--- /dev/null
+++ b/test/files/neg/illegal-stmt-start.scala
@@ -0,0 +1,5 @@
+class Test {
+ def foo {
+ private def bar {}
+ }
+} \ No newline at end of file
diff --git a/test/files/neg/implicits.check b/test/files/neg/implicits.check
index d94e1f27f2..cd9dfebf48 100644
--- a/test/files/neg/implicits.check
+++ b/test/files/neg/implicits.check
@@ -1,20 +1,11 @@
-implicits.scala:21: error: type mismatch;
- found : Pos
- required: ?{val +: ?}
-Note that implicit conversions are not applicable because they are ambiguous:
- both method any2plus in object Sub of type (x: Any)Sub.Plus
- and method pos2int in object Super of type (p: Pos)int
- are possible conversion functions from Pos to ?{val +: ?}
- f(p+1)
- ^
implicits.scala:38: error: type mismatch;
- found : test2.HSome[java.lang.String,test2.HMap]
+ found : test2.HSome[String,test2.HMap]
required: Int
foo(set)
^
implicits.scala:46: error: type mismatch;
found : List[Any]
- required: scala.List[Mxml]
+ required: List[Mxml]
children.toList.flatMap ( e => {
^
-three errors found
+two errors found
diff --git a/test/files/neg/implicits.scala b/test/files/neg/implicits.scala
index be85029660..e908fb03e8 100644
--- a/test/files/neg/implicits.scala
+++ b/test/files/neg/implicits.scala
@@ -3,21 +3,21 @@ class Pos
class Super
object Super {
- implicit def pos2int(p: Pos): int = 0
-}
+ implicit def pos2int(p: Pos): Int = 0
+}
object Sub extends Super {
class Plus(x: Any) {
def +(y: String): String = x.toString + y
}
implicit def any2plus(x: Any): Plus = new Plus(x)
-}
+}
object Test {
import Super._
import Sub._
val p = new Pos
- def f(x: int): int = x
+ def f(x: Int): Int = x
f(p+1)
}
@@ -33,7 +33,7 @@ object test2 {
val set = HEmpty + 3 + "3"
implicit def select[T](t: HSome[T,_]) = t.head
implicit def selectTail[L](t: HSome[_,L]) = t.tail
-
+
def foo(x: Int) = 3
foo(set)
}
@@ -55,4 +55,4 @@ class Mxml {
}
-}
+}
diff --git a/test/files/neg/infix-op-positions.check b/test/files/neg/infix-op-positions.check
new file mode 100644
index 0000000000..1bff9b941a
--- /dev/null
+++ b/test/files/neg/infix-op-positions.check
@@ -0,0 +1,7 @@
+infix-op-positions.scala:2: error: value -! is not a member of Option[Int]
+ Option(1) -! "test" // left associative operator
+ ^
+infix-op-positions.scala:3: error: value -!: is not a member of Option[Int]
+ "test" -!: Option(1) // right associative operators
+ ^
+two errors found
diff --git a/test/files/neg/infix-op-positions.scala b/test/files/neg/infix-op-positions.scala
new file mode 100644
index 0000000000..16351b0ab3
--- /dev/null
+++ b/test/files/neg/infix-op-positions.scala
@@ -0,0 +1,4 @@
+object Test {
+ Option(1) -! "test" // left associative operator
+ "test" -!: Option(1) // right associative operators
+}
diff --git a/test/files/neg/java-access-neg.check b/test/files/neg/java-access-neg.check
new file mode 100644
index 0000000000..af2812b579
--- /dev/null
+++ b/test/files/neg/java-access-neg.check
@@ -0,0 +1,16 @@
+S2.scala:12: error: method packageAbstract overrides nothing
+ override private[b] def packageAbstract() = () // fail
+ ^
+S2.scala:16: error: method packageConcrete overrides nothing
+ override private[b] def packageConcrete() = () // fail
+ ^
+S2.scala:36: error: method packageConcrete overrides nothing
+ override protected[b] def packageConcrete() = () // fail
+ ^
+S2.scala:47: error: method packageConcrete overrides nothing
+ override private[a] def packageConcrete() = () // fail
+ ^
+S2.scala:58: error: method packageConcrete overrides nothing
+ override def packageConcrete() = () // fail
+ ^
+5 errors found
diff --git a/test/files/neg/java-access-neg/J.java b/test/files/neg/java-access-neg/J.java
new file mode 100644
index 0000000000..4f2024673c
--- /dev/null
+++ b/test/files/neg/java-access-neg/J.java
@@ -0,0 +1,15 @@
+package a.b;
+
+public abstract class J {
+ public J() { }
+ J(int x1) { }
+ protected J(int x1, int x2) { }
+
+ abstract void packageAbstract();
+ protected abstract void protectedAbstract();
+ public abstract void publicAbstract();
+
+ void packageConcrete() { return; }
+ protected void protectedConcrete() { return; }
+ public void publicConcrete() { return; }
+}
diff --git a/test/files/neg/java-access-neg/S2.scala b/test/files/neg/java-access-neg/S2.scala
new file mode 100644
index 0000000000..dd0af8d39d
--- /dev/null
+++ b/test/files/neg/java-access-neg/S2.scala
@@ -0,0 +1,61 @@
+package a.b
+package c
+
+import a.b.J
+
+/** Variations of java-access-pos with us in a nested package.
+ */
+
+/** Declaring "override" all the time.
+ */
+class S1 extends J {
+ override private[b] def packageAbstract() = () // fail
+ override protected[b] def protectedAbstract() = ()
+ override def publicAbstract() = ()
+
+ override private[b] def packageConcrete() = () // fail
+ override protected[b] def protectedConcrete() = ()
+ override def publicConcrete() = ()
+}
+
+/** Implementing abstracts.
+ */
+class S2 extends J {
+ private[b] def packageAbstract() = () // fail
+ protected[b] def protectedAbstract() = ()
+ def publicAbstract() = ()
+}
+
+/** Widening access.
+ */
+class S3 extends J {
+ protected[b] def packageAbstract() = () // fail
+ protected[b] def protectedAbstract() = ()
+ def publicAbstract() = ()
+
+ override protected[b] def packageConcrete() = () // fail
+ override protected[b] def protectedConcrete() = ()
+ override def publicConcrete() = ()
+}
+/** More widening.
+ */
+class S4 extends J {
+ private[a] def packageAbstract() = () // fail
+ protected[a] def protectedAbstract() = ()
+ def publicAbstract() = ()
+
+ override private[a] def packageConcrete() = () // fail
+ override protected[a] def protectedConcrete() = ()
+ override def publicConcrete() = ()
+}
+/** Yet more widening.
+ */
+class S5 extends J {
+ def packageAbstract() = () // fail
+ def protectedAbstract() = ()
+ def publicAbstract() = ()
+
+ override def packageConcrete() = () // fail
+ override def protectedConcrete() = ()
+ override def publicConcrete() = ()
+}
diff --git a/test/files/neg/lazy-override.scala b/test/files/neg/lazy-override.scala
index f41d7f038b..a0f6e3bd73 100644
--- a/test/files/neg/lazy-override.scala
+++ b/test/files/neg/lazy-override.scala
@@ -5,7 +5,7 @@
lazy val y: Int = { print("/*A.y*/"); 2 }
}
-
+
class B extends A {
// lazy overrides strict val
override lazy val x: Int = { print("/*B.x*/"); 3 }
diff --git a/test/files/neg/lazyvals.scala b/test/files/neg/lazyvals.scala
index f92534f506..bbc4fe114a 100644
--- a/test/files/neg/lazyvals.scala
+++ b/test/files/neg/lazyvals.scala
@@ -1,7 +1,7 @@
/** Test which should fail compilation */
class Lazy {
-
+
// no abstract lazy values
lazy val t: Int
@@ -31,7 +31,7 @@ object T2 {
lazy val y: Int = { print("/*A.y*/"); 2 }
}
-
+
class B extends A {
// lazy overrides strict val
override lazy val x: Int = { print("/*B.x*/"); 3 }
diff --git a/test/files/neg/lubs.scala b/test/files/neg/lubs.scala
index 3524fa4d87..639117f7bf 100644
--- a/test/files/neg/lubs.scala
+++ b/test/files/neg/lubs.scala
@@ -18,7 +18,7 @@ object test2 {
class D extends A { type T = D }
def f = if (1 == 2) new C else new D
-
+
val x1: A { type T } = f
val x2: A { type T >: Null <: A } = f
val x3: A { type T >: Null <: A { type T >: Null <: A } } = f
diff --git a/test/files/neg/main1.check b/test/files/neg/main1.check
new file mode 100644
index 0000000000..734c78e54d
--- /dev/null
+++ b/test/files/neg/main1.check
@@ -0,0 +1,26 @@
+main1.scala:3: error: Foo has a main method, but foo1.Foo will not be a runnable program.
+ Its companion is a trait, which means no static forwarder can be generated.
+
+ object Foo { // companion is trait
+ ^
+main1.scala:10: error: Foo has a main method, but foo2.Foo will not be a runnable program.
+ Its companion contains its own main method, which means no static forwarder can be generated.
+
+ object Foo { // companion has its own main
+ ^
+main1.scala:22: error: Foo has a main method, but foo3.Foo will not be a runnable program.
+ Its companion contains its own main method (implementation restriction: no main is allowed, regardless of signature), which means no static forwarder can be generated.
+
+ object Foo { // Companion contains main, but not an interfering main.
+ ^
+main1.scala:31: error: Foo has a main method, but foo4.Foo will not be a runnable program.
+ Its companion contains its own main method (implementation restriction: no main is allowed, regardless of signature), which means no static forwarder can be generated.
+
+ object Foo extends Foo { // Inherits main from the class
+ ^
+main1.scala:39: error: Foo has a main method, but foo5.Foo will not be a runnable program.
+ Its companion contains its own main method (implementation restriction: no main is allowed, regardless of signature), which means no static forwarder can be generated.
+
+ object Foo extends Foo { // Overrides main from the class
+ ^
+5 errors found
diff --git a/test/files/neg/main1.flags b/test/files/neg/main1.flags
new file mode 100644
index 0000000000..e8fb65d50c
--- /dev/null
+++ b/test/files/neg/main1.flags
@@ -0,0 +1 @@
+-Xfatal-warnings \ No newline at end of file
diff --git a/test/files/neg/main1.scala b/test/files/neg/main1.scala
new file mode 100644
index 0000000000..2b5551ac38
--- /dev/null
+++ b/test/files/neg/main1.scala
@@ -0,0 +1,45 @@
+// negatives
+package foo1 {
+ object Foo { // companion is trait
+ def main(args: Array[String]): Unit = ()
+ }
+ trait Foo
+}
+
+package foo2 {
+ object Foo { // companion has its own main
+ def main(args: Array[String]): Unit = ()
+ }
+ class Foo {
+ def main(args: Array[String]): Unit = ()
+ }
+}
+
+// these should all be made to work, but are negatives for now
+// because forwarders need more work.
+
+package foo3 {
+ object Foo { // Companion contains main, but not an interfering main.
+ def main(args: Array[String]): Unit = ()
+ }
+ class Foo {
+ def main(args: Int): Unit = ()
+ }
+}
+
+package foo4 {
+ object Foo extends Foo { // Inherits main from the class
+ }
+ class Foo {
+ def main(args: Array[String]): Unit = ()
+ }
+}
+
+package foo5 {
+ object Foo extends Foo { // Overrides main from the class
+ override def main(args: Array[String]): Unit = ()
+ }
+ class Foo {
+ def main(args: Array[String]): Unit = ()
+ }
+}
diff --git a/test/files/neg/migration28.check b/test/files/neg/migration28.check
new file mode 100644
index 0000000000..d7dfacf3db
--- /dev/null
+++ b/test/files/neg/migration28.check
@@ -0,0 +1,5 @@
+migration28.scala:4: error: method scanRight in trait TraversableLike has changed semantics in version 2.9.0:
+The behavior of `scanRight` has changed. The previous behavior can be reproduced with scanRight.reverse.
+ List(1,2,3,4,5).scanRight(0)(_+_)
+ ^
+one error found
diff --git a/test/files/neg/migration28.flags b/test/files/neg/migration28.flags
new file mode 100644
index 0000000000..197b3198c8
--- /dev/null
+++ b/test/files/neg/migration28.flags
@@ -0,0 +1 @@
+-Xfatal-warnings -Xmigration
diff --git a/test/files/neg/migration28.scala b/test/files/neg/migration28.scala
new file mode 100644
index 0000000000..ba73eea436
--- /dev/null
+++ b/test/files/neg/migration28.scala
@@ -0,0 +1,9 @@
+object Test {
+ import scala.collection.mutable._
+
+ List(1,2,3,4,5).scanRight(0)(_+_)
+
+ def main(args: Array[String]): Unit = {
+
+ }
+}
diff --git a/test/files/neg/multi-array.check b/test/files/neg/multi-array.check
index f8432a76b8..511caa126f 100644
--- a/test/files/neg/multi-array.check
+++ b/test/files/neg/multi-array.check
@@ -1,8 +1,4 @@
-multi-array.scala:6: warning: new Array(...) with multiple dimensions has been deprecated; use Array.ofDim(...) instead
+multi-array.scala:7: error: too many arguments for constructor Array: (_length: Int)Array[T]
val a: Array[Int] = new Array(10, 10)
^
-multi-array.scala:6: error: too many dimensions for array creation
- val a: Array[Int] = new Array(10, 10)
- ^
-one warning found
one error found
diff --git a/test/files/neg/multi-array.flags b/test/files/neg/multi-array.flags
new file mode 100644
index 0000000000..c36e713ab8
--- /dev/null
+++ b/test/files/neg/multi-array.flags
@@ -0,0 +1 @@
+-deprecation \ No newline at end of file
diff --git a/test/files/neg/multi-array.scala b/test/files/neg/multi-array.scala
index 993a1c0865..b04e0fa0b1 100644
--- a/test/files/neg/multi-array.scala
+++ b/test/files/neg/multi-array.scala
@@ -1,7 +1,14 @@
-/** Check that a multi-dimensional array can't be created
- * when the wrong number of arguments w.r.t. to the array's
- * type is given.
+/** Multi-dimensional array creation with `new` was removed in 2.10.
+ * The replacement Array.ofDim[Int](10,10) makes the original mistake
+ * which was tested here impossible.
+ * This test will fail now because the constructor doesn't exist anymore.
*/
class Foo {
val a: Array[Int] = new Array(10, 10)
}
+
+//Before removal of constructor non-unary Array constructors:
+/** Check that a multi-dimensional array can't be created
+ * when the wrong number of arguments w.r.t. to the array's
+ * type is given.
+ */
diff --git a/test/files/neg/names-defaults-neg-ref.check b/test/files/neg/names-defaults-neg-ref.check
index ac37816762..00052c72dc 100644
--- a/test/files/neg/names-defaults-neg-ref.check
+++ b/test/files/neg/names-defaults-neg-ref.check
@@ -2,7 +2,7 @@ names-defaults-neg-ref.scala:3: error: in anonymous class $anon, multiple overlo
The members with defaults are defined in trait B2235 and trait A2235.
new A2235 with B2235
^
-names-defaults-neg-ref.scala:7: error: in class A, multiple overloaded alternatives of method foo define default arguments()
+names-defaults-neg-ref.scala:7: error: in class A, multiple overloaded alternatives of method foo define default arguments.
class A {
^
names-defaults-neg-ref.scala:17: error: in class C, multiple overloaded alternatives of method bar define default arguments.
diff --git a/test/files/neg/names-defaults-neg-ref.scala b/test/files/neg/names-defaults-neg-ref.scala
index 4611aadd22..17a4827990 100644
--- a/test/files/neg/names-defaults-neg-ref.scala
+++ b/test/files/neg/names-defaults-neg-ref.scala
@@ -1,4 +1,4 @@
-object Test extends Application {
+object Test extends App {
// #2235
new A2235 with B2235
}
diff --git a/test/files/neg/names-defaults-neg-warn.check b/test/files/neg/names-defaults-neg-warn.check
new file mode 100644
index 0000000000..e1085acf76
--- /dev/null
+++ b/test/files/neg/names-defaults-neg-warn.check
@@ -0,0 +1,7 @@
+names-defaults-neg-warn.scala:11: error: the parameter name s has been deprecated. Use x instead.
+ deprNam2.f(s = "dlfkj")
+ ^
+names-defaults-neg-warn.scala:12: error: the parameter name x has been deprecated. Use s instead.
+ deprNam2.g(x = "dlkjf")
+ ^
+two errors found
diff --git a/test/files/neg/names-defaults-neg-warn.flags b/test/files/neg/names-defaults-neg-warn.flags
new file mode 100644
index 0000000000..d1b831ea87
--- /dev/null
+++ b/test/files/neg/names-defaults-neg-warn.flags
@@ -0,0 +1 @@
+-deprecation -Xfatal-warnings \ No newline at end of file
diff --git a/test/files/neg/names-defaults-neg-warn.scala b/test/files/neg/names-defaults-neg-warn.scala
new file mode 100644
index 0000000000..c7a2b2f429
--- /dev/null
+++ b/test/files/neg/names-defaults-neg-warn.scala
@@ -0,0 +1,14 @@
+object Test extends App {
+ object deprNam2 {
+ def f(@deprecatedName('s) x: String) = 1
+ def f(s: Object) = 2
+
+ def g(@deprecatedName('x) s: Object) = 3
+ def g(s: String) = 4
+ }
+
+ deprNam2.f(s = new Object)
+ deprNam2.f(s = "dlfkj")
+ deprNam2.g(x = "dlkjf")
+ deprNam2.g(s = new Object)
+}
diff --git a/test/files/neg/names-defaults-neg.check b/test/files/neg/names-defaults-neg.check
index e47cf8c420..03e44f745d 100644
--- a/test/files/neg/names-defaults-neg.check
+++ b/test/files/neg/names-defaults-neg.check
@@ -1,110 +1,161 @@
-names-defaults-neg.scala:66: error: not enough arguments for method apply: (a: Int,b: String)(c: Int*)Fact in object Fact.
+names-defaults-neg.scala:65: error: not enough arguments for method apply: (a: Int, b: String)(c: Int*)Fact in object Fact.
Unspecified value parameter b.
val fac = Fact(1)(2, 3)
^
names-defaults-neg.scala:5: error: type mismatch;
- found : java.lang.String("#")
+ found : String("#")
required: Int
test1(b = 2, a = "#")
^
names-defaults-neg.scala:8: error: positional after named argument.
- test1(a = 1, "*")
- ^
-names-defaults-neg.scala:9: error: positional after named argument.
test1(b = "(*", 23)
^
-names-defaults-neg.scala:14: error: reference to x is ambiguous; it is both, a parameter
+names-defaults-neg.scala:13: error: reference to x is ambiguous; it is both, a parameter
name of the method and the name of a variable currently in scope.
test2(x = 1)
^
-names-defaults-neg.scala:16: error: not found: value c
+names-defaults-neg.scala:15: error: not found: value c
test1(c = 0, b = "joke")
^
-names-defaults-neg.scala:17: error: not found: value m
+names-defaults-neg.scala:16: error: not found: value m
test7((m = 1)) // named arguments must be top-level assignments
^
-names-defaults-neg.scala:18: error: not found: value m
+names-defaults-neg.scala:17: error: not found: value m
test7({m = 1})
^
-names-defaults-neg.scala:19: error: not found: value m
+names-defaults-neg.scala:18: error: not found: value m
test7 { m = 1 } // no named arguments in argument block
^
-names-defaults-neg.scala:20: error: reference to x is ambiguous; it is both, a parameter
+names-defaults-neg.scala:19: error: reference to x is ambiguous; it is both, a parameter
name of the method and the name of a variable currently in scope.
test8(x = 1)
^
-names-defaults-neg.scala:23: error: parameter specified twice: a
+names-defaults-neg.scala:22: error: parameter specified twice: a
test1(1, a = 2)
^
-names-defaults-neg.scala:24: error: parameter specified twice: b
+names-defaults-neg.scala:23: error: parameter specified twice: b
test1(b = 1, b = "2")
^
-names-defaults-neg.scala:27: error: {
- val x$1: Int(3) = 3;
- val x$2: Int(1) = 1;
- Test.this.test3(1, 3)
-} of type Int does not take parameters
+names-defaults-neg.scala:26: error: Int does not take parameters
test3(b = 3, a = 1)(3)
^
-names-defaults-neg.scala:36: error: ambiguous reference to overloaded definition,
-both method f in object t1 of type (b: String,a: Int)java.lang.String
-and method f in object t1 of type (a: Int,b: String)java.lang.String
-match argument types (b: java.lang.String,a: Int)
+names-defaults-neg.scala:35: error: ambiguous reference to overloaded definition,
+both method f in object t1 of type (b: String, a: Int)String
+and method f in object t1 of type (a: Int, b: String)String
+match argument types (b: String,a: Int)
t1.f(b = "dkljf", a = 1)
^
-names-defaults-neg.scala:43: error: ambiguous reference to overloaded definition,
-both method f in object t3 of type (a2: Int)(b: Int)java.lang.String
-and method f in object t3 of type (a1: Int)java.lang.String
+names-defaults-neg.scala:42: error: ambiguous reference to overloaded definition,
+both method f in object t3 of type (a2: Int)(b: Int)String
+and method f in object t3 of type (a1: Int)String
match argument types (Int)
t3.f(1)
^
-names-defaults-neg.scala:44: error: ambiguous reference to overloaded definition,
-both method f in object t3 of type (a2: Int)(b: Int)java.lang.String
-and method f in object t3 of type (a1: Int)java.lang.String
+names-defaults-neg.scala:43: error: ambiguous reference to overloaded definition,
+both method f in object t3 of type (a2: Int)(b: Int)String
+and method f in object t3 of type (a1: Int)String
match argument types (Int)
t3.f(1)(2)
^
-names-defaults-neg.scala:50: error: ambiguous reference to overloaded definition,
-both method g in object t7 of type (a: B)java.lang.String
-and method g in object t7 of type (a: C,b: Int*)java.lang.String
+names-defaults-neg.scala:49: error: ambiguous reference to overloaded definition,
+both method g in object t7 of type (a: B)String
+and method g in object t7 of type (a: C, b: Int*)String
match argument types (C)
t7.g(new C()) // ambigous reference
^
-names-defaults-neg.scala:54: error: parameter specified twice: b
+names-defaults-neg.scala:53: error: parameter specified twice: b
test5(a = 1, b = "dkjl", b = "dkj")
^
-names-defaults-neg.scala:55: error: parameter specified twice: b
+names-defaults-neg.scala:54: error: parameter specified twice: b
test5(1, "2", b = 3)
^
-names-defaults-neg.scala:56: error: when using named arguments, the vararg parameter has to be specified exactly once
+names-defaults-neg.scala:55: error: when using named arguments, the vararg parameter has to be specified exactly once
test5(b = "dlkj")
^
-names-defaults-neg.scala:62: error: ambiguous reference to overloaded definition,
-both method f in object t8 of type (b: String,a: Int)java.lang.String
-and method f in object t8 of type (a: Int,b: java.lang.Object)java.lang.String
-match argument types (a: Int,b: java.lang.String) and expected result type Any
+names-defaults-neg.scala:61: error: ambiguous reference to overloaded definition,
+both method f in object t8 of type (b: String, a: Int)String
+and method f in object t8 of type (a: Int, b: Object)String
+match argument types (a: Int,b: String) and expected result type Any
println(t8.f(a = 0, b = "1")) // ambigous reference
^
-names-defaults-neg.scala:70: error: wrong number of arguments for <none>: (x: Int,y: String)A1
+names-defaults-neg.scala:69: error: wrong number of arguments for <none>: (x: Int, y: String)A1
A1() match { case A1(_) => () }
^
-names-defaults-neg.scala:77: error: no type parameters for method test4: (x: T[T[List[T[X forSome { type X }]]]])T[T[List[T[X forSome { type X }]]]] exist so that it can be applied to arguments (List[Int])
+names-defaults-neg.scala:76: error: no type parameters for method test4: (x: T[T[List[T[X forSome { type X }]]]])T[T[List[T[X forSome { type X }]]]] exist so that it can be applied to arguments (List[Int])
--- because ---
argument expression's type is not compatible with formal parameter type;
found : List[Int]
- required: ?T[ ?T[ scala.List[?T[ X forSome { type X } ]] ] ]
-Error occured in an application involving default arguments.
+ required: ?T[?T[List[?T[X forSome { type X }]]]]
+Error occurred in an application involving default arguments.
test4()
^
-names-defaults-neg.scala:80: error: type mismatch;
+names-defaults-neg.scala:79: error: type mismatch;
found : List[Int]
- required: scala.List[scala.List[?]]
+ required: List[List[?]]
def test6[T](x: List[List[T]] = List(1,2)) = x
^
-names-defaults-neg.scala:83: error: type mismatch;
+names-defaults-neg.scala:82: error: type mismatch;
found : Int
required: String
-Error occured in an application involving default arguments.
+Error occurred in an application involving default arguments.
new A2[String]()
^
-25 errors found
+names-defaults-neg.scala:86: error: module extending its companion class cannot use default constructor arguments
+ object C extends C()
+ ^
+names-defaults-neg.scala:90: error: deprecated parameter name x has to be distinct from any other parameter name (deprecated or not).
+ def deprNam1(x: Int, @deprecatedName('x) y: String) = 0
+ ^
+names-defaults-neg.scala:91: error: deprecated parameter name a has to be distinct from any other parameter name (deprecated or not).
+ def deprNam2(a: String)(@deprecatedName('a) b: Int) = 1
+ ^
+names-defaults-neg.scala:93: warning: the parameter name y has been deprecated. Use b instead.
+ deprNam3(y = 10, b = 2)
+ ^
+names-defaults-neg.scala:93: error: parameter specified twice: b
+ deprNam3(y = 10, b = 2)
+ ^
+names-defaults-neg.scala:98: error: unknown parameter name: m
+ f3818(y = 1, m = 1)
+ ^
+names-defaults-neg.scala:131: error: reference to var2 is ambiguous; it is both, a parameter
+name of the method and the name of a variable currently in scope.
+ delay(var2 = 40)
+ ^
+names-defaults-neg.scala:134: error: missing parameter type for expanded function ((x$1) => a = x$1)
+ val taf2: Int => Unit = testAnnFun(a = _, b = get("+"))
+ ^
+names-defaults-neg.scala:135: error: parameter specified twice: a
+ val taf3 = testAnnFun(b = _: String, a = get(8))
+ ^
+names-defaults-neg.scala:136: error: wrong number of parameters; expected = 2
+ val taf4: (Int, String) => Unit = testAnnFun(_, b = _)
+ ^
+names-defaults-neg.scala:144: error: variable definition needs type because 'x' is used as a named argument in its body.
+ def t3 { var x = t.f(x = 1) }
+ ^
+names-defaults-neg.scala:147: error: variable definition needs type because 'x' is used as a named argument in its body.
+ object t6 { var x = t.f(x = 1) }
+ ^
+names-defaults-neg.scala:150: error: variable definition needs type because 'x' is used as a named argument in its body.
+ class t9 { var x = t.f(x = 1) }
+ ^
+names-defaults-neg.scala:164: error: variable definition needs type because 'x' is used as a named argument in its body.
+ def u3 { var x = u.f(x = 1) }
+ ^
+names-defaults-neg.scala:167: error: variable definition needs type because 'x' is used as a named argument in its body.
+ def u6 { var x = u.f(x = "32") }
+ ^
+names-defaults-neg.scala:170: error: reference to x is ambiguous; it is both, a parameter
+name of the method and the name of a variable currently in scope.
+ def u9 { var x: Int = u.f(x = 1) }
+ ^
+names-defaults-neg.scala:177: error: variable definition needs type because 'x' is used as a named argument in its body.
+ class u15 { var x = u.f(x = 1) }
+ ^
+names-defaults-neg.scala:180: error: reference to x is ambiguous; it is both, a parameter
+name of the method and the name of a variable currently in scope.
+ class u18 { var x: Int = u.f(x = 1) }
+ ^
+one warning found
+41 errors found
diff --git a/test/files/neg/names-defaults-neg.scala b/test/files/neg/names-defaults-neg.scala
index 5829da361c..042f73708c 100644
--- a/test/files/neg/names-defaults-neg.scala
+++ b/test/files/neg/names-defaults-neg.scala
@@ -1,11 +1,10 @@
-object Test extends Application {
+object Test extends App {
// TESTS
// re-ordering
test1(b = 2, a = "#")
// mixing named and positional
- test1(a = 1, "*")
test1(b = "(*", 23)
// assignment / names
@@ -82,6 +81,22 @@ object Test extends Application {
// correct error message
new A2[String]()
+ object t3648 {
+ class C(val s: String = "")
+ object C extends C()
+ }
+
+ // deprecated names
+ def deprNam1(x: Int, @deprecatedName('x) y: String) = 0
+ def deprNam2(a: String)(@deprecatedName('a) b: Int) = 1
+ def deprNam3(@deprecatedName('x) a: Int, @deprecatedName('y) b: Int) = a + b
+ deprNam3(y = 10, b = 2)
+
+
+ // t3818
+ def f3818(x: Int = 1, y: Int, z: Int = 1) = 0
+ f3818(y = 1, m = 1)
+
// DEFINITIONS
def test1(a: Int, b: String) = a +": "+ b
def test2(x: Unit) = println("test2")
@@ -107,3 +122,63 @@ case class Fact(a: Int, b: String)(c: Int*)
case class A1(x: Int = 1, y: String = "2")
class A2[T](a: T = 1)
+
+
+// anonymous functions
+object anfun {
+ var var2 = 0
+ def delay(var2: => Unit) { var2 }
+ delay(var2 = 40)
+
+ def testAnnFun(a: Int, b: String) = println(a +": "+ b)
+ val taf2: Int => Unit = testAnnFun(a = _, b = get("+"))
+ val taf3 = testAnnFun(b = _: String, a = get(8))
+ val taf4: (Int, String) => Unit = testAnnFun(_, b = _)
+}
+
+object t3685 {
+ object t { def f(x: Int) = x }
+
+ def t1 { def x = t.f(x = 1) }
+ def t2 { val x = t.f(x = 1) }
+ def t3 { var x = t.f(x = 1) }
+ object t4 { def x = t.f(x = 1) }
+ object t5 { val x = t.f(x = 1) }
+ object t6 { var x = t.f(x = 1) }
+ class t7 { def x = t.f(x = 1) }
+ class t8 { val x = t.f(x = 1) }
+ class t9 { var x = t.f(x = 1) }
+
+ def t10 { def x: Int = t.f(x = 1) }
+ def t11 { val x: Int = t.f(x = 1) }
+ def t12 { var x: Int = t.f(x = 1) }
+ class t13 { def x: Int = t.f(x = 1) }
+ class t14 { val x: Int = t.f(x = 1) }
+ class t15 { var x: Int = t.f(x = 1) }
+
+
+ object u { def f[T](x: T) = 100 }
+
+ def u1 { def x = u.f(x = 1) }
+ def u2 { val x = u.f(x = 1) }
+ def u3 { var x = u.f(x = 1) }
+ def u4 { def x = u.f(x = "23") }
+ def u5 { val x = u.f(x = "32") }
+ def u6 { var x = u.f(x = "32") }
+ def u7 { def x: Int = u.f(x = 1) }
+ def u8 { val x: Int = u.f(x = 1) }
+ def u9 { var x: Int = u.f(x = 1) }
+ def u10 { def x: Int = u.f(x = "32") }
+ def u11 { val x: Int = u.f(x = "32") }
+ def u12 { var x: Int = u.f(x = "32") }
+
+ class u13 { def x = u.f(x = 1) }
+ class u14 { val x = u.f(x = 1) }
+ class u15 { var x = u.f(x = 1) }
+ class u16 { def x: Int = u.f(x = 1) }
+ class u17 { val x: Int = u.f(x = 1) }
+ class u18 { var x: Int = u.f(x = 1) }
+ class u19 { def x: Int = u.f(x = "32") }
+ class u20 { val x: Int = u.f(x = "32") }
+ class u21 { var x: Int = u.f(x = "32") }
+}
diff --git a/test/files/neg/no-predef.check b/test/files/neg/no-predef.check
new file mode 100644
index 0000000000..a63d8c5ba5
--- /dev/null
+++ b/test/files/neg/no-predef.check
@@ -0,0 +1,14 @@
+no-predef.scala:2: error: type mismatch;
+ found : scala.Long(5L)
+ required: java.lang.Long
+ def f1 = 5L: java.lang.Long
+ ^
+no-predef.scala:3: error: type mismatch;
+ found : java.lang.Long
+ required: scala.Long
+ def f2 = new java.lang.Long(5) : Long
+ ^
+no-predef.scala:4: error: value map is not a member of String
+ def f3 = "abc" map (_ + 1)
+ ^
+three errors found
diff --git a/test/files/neg/no-predef.flags b/test/files/neg/no-predef.flags
new file mode 100644
index 0000000000..3abc2d5215
--- /dev/null
+++ b/test/files/neg/no-predef.flags
@@ -0,0 +1 @@
+-Yno-predef \ No newline at end of file
diff --git a/test/files/neg/no-predef.scala b/test/files/neg/no-predef.scala
new file mode 100644
index 0000000000..8466c7909f
--- /dev/null
+++ b/test/files/neg/no-predef.scala
@@ -0,0 +1,5 @@
+class NoPredef {
+ def f1 = 5L: java.lang.Long
+ def f2 = new java.lang.Long(5) : Long
+ def f3 = "abc" map (_ + 1)
+} \ No newline at end of file
diff --git a/test/files/neg/noMember1.check b/test/files/neg/noMember1.check
new file mode 100644
index 0000000000..846574bef9
--- /dev/null
+++ b/test/files/neg/noMember1.check
@@ -0,0 +1,5 @@
+noMember1.scala:1: error: object MultiMap is not a member of package scala.collection.mutable
+Note: trait MultiMap exists, but it has no companion object.
+import scala.collection.mutable.MultiMap._
+ ^
+one error found
diff --git a/test/files/neg/noMember1.scala b/test/files/neg/noMember1.scala
new file mode 100644
index 0000000000..0aee7bff7f
--- /dev/null
+++ b/test/files/neg/noMember1.scala
@@ -0,0 +1,3 @@
+import scala.collection.mutable.MultiMap._
+
+class A
diff --git a/test/files/neg/noMember2.check b/test/files/neg/noMember2.check
new file mode 100644
index 0000000000..f65571bdc9
--- /dev/null
+++ b/test/files/neg/noMember2.check
@@ -0,0 +1,5 @@
+noMember2.scala:2: error: object MultiMap is not a member of package scala.collection.mutable
+Note: trait MultiMap exists, but it has no companion object.
+ val m = scala.collection.mutable.MultiMap(1, 2, 3)
+ ^
+one error found
diff --git a/test/files/neg/noMember2.scala b/test/files/neg/noMember2.scala
new file mode 100644
index 0000000000..bf72d4f471
--- /dev/null
+++ b/test/files/neg/noMember2.scala
@@ -0,0 +1,3 @@
+object Test {
+ val m = scala.collection.mutable.MultiMap(1, 2, 3)
+}
diff --git a/test/files/neg/nopredefs.check b/test/files/neg/nopredefs.check
index 0a0ab34482..e6c1af78a0 100644
--- a/test/files/neg/nopredefs.check
+++ b/test/files/neg/nopredefs.check
@@ -1,4 +1,4 @@
-nopredefs.scala:5: error: not found: value Set
+nopredefs.scala:5: error: not found: value Set (similar: Seq)
val y = Set(3)
^
one error found
diff --git a/test/files/neg/null-unsoundness.scala b/test/files/neg/null-unsoundness.scala
index 15dedfbb97..3f7e42fe17 100644
--- a/test/files/neg/null-unsoundness.scala
+++ b/test/files/neg/null-unsoundness.scala
@@ -7,9 +7,9 @@ class A {
val x: A with D = null
var y: x.T = new C("abc")
}
-object Test extends A with Application {
+object Test extends A with App {
class C { type T = Int; val x = 1 }
type A = C
y = 42
}
-
+
diff --git a/test/files/neg/nullary-override.check b/test/files/neg/nullary-override.check
new file mode 100644
index 0000000000..6b2ded2d4a
--- /dev/null
+++ b/test/files/neg/nullary-override.check
@@ -0,0 +1,4 @@
+nullary-override.scala:2: error: non-nullary method overrides nullary method
+class B extends A { override def x(): Int = 4 }
+ ^
+one error found
diff --git a/test/files/neg/nullary-override.flags b/test/files/neg/nullary-override.flags
new file mode 100644
index 0000000000..6c1dd108ae
--- /dev/null
+++ b/test/files/neg/nullary-override.flags
@@ -0,0 +1 @@
+-Xfatal-warnings -Xlint \ No newline at end of file
diff --git a/test/files/neg/nullary-override.scala b/test/files/neg/nullary-override.scala
new file mode 100644
index 0000000000..3eb4784a0c
--- /dev/null
+++ b/test/files/neg/nullary-override.scala
@@ -0,0 +1,3 @@
+class A { def x: Int = 3 }
+class B extends A { override def x(): Int = 4 }
+
diff --git a/test/files/neg/object-not-a-value.check b/test/files/neg/object-not-a-value.check
new file mode 100644
index 0000000000..613210f27c
--- /dev/null
+++ b/test/files/neg/object-not-a-value.check
@@ -0,0 +1,4 @@
+object-not-a-value.scala:5: error: object java.util.List is not a value
+ List(1) map (_ + 1)
+ ^
+one error found
diff --git a/test/files/neg/object-not-a-value.scala b/test/files/neg/object-not-a-value.scala
new file mode 100644
index 0000000000..2f894a33df
--- /dev/null
+++ b/test/files/neg/object-not-a-value.scala
@@ -0,0 +1,7 @@
+object Test {
+ import java.util._
+
+ def main(args: Array[String]): Unit = {
+ List(1) map (_ + 1)
+ }
+}
diff --git a/test/files/neg/overload-msg.check b/test/files/neg/overload-msg.check
new file mode 100644
index 0000000000..c61ace0dd0
--- /dev/null
+++ b/test/files/neg/overload-msg.check
@@ -0,0 +1,13 @@
+overload-msg.scala:3: error: overloaded method value + with alternatives:
+ (x: Double)Double <and>
+ (x: Float)Float <and>
+ (x: Long)Long <and>
+ (x: scala.Int)scala.Int <and>
+ (x: Char)scala.Int <and>
+ (x: Short)scala.Int <and>
+ (x: Byte)scala.Int <and>
+ (x: String)String
+ cannot be applied to (Int(in method f))
+ def f[Int](y: Int) = x + y
+ ^
+one error found
diff --git a/test/files/neg/overload-msg.scala b/test/files/neg/overload-msg.scala
new file mode 100644
index 0000000000..896722262d
--- /dev/null
+++ b/test/files/neg/overload-msg.scala
@@ -0,0 +1,4 @@
+// type parameter shadows actual type, massive overload error confuses.
+class A(x: Int) {
+ def f[Int](y: Int) = x + y
+}
diff --git a/test/files/neg/overload.check b/test/files/neg/overload.check
index 0faa97adb1..abfabaf3f2 100644
--- a/test/files/neg/overload.check
+++ b/test/files/neg/overload.check
@@ -1,6 +1,6 @@
overload.scala:10: error: ambiguous reference to overloaded definition,
both method f in class D of type (x: Any)Unit
-and method f in class C of type (x: int)Unit
+and method f in class C of type (x: Int)Unit
match argument types (Int)
(new D).f(1)
^
diff --git a/test/files/neg/overload.scala b/test/files/neg/overload.scala
index 311ea3874b..6ad911e90e 100644
--- a/test/files/neg/overload.scala
+++ b/test/files/neg/overload.scala
@@ -1,5 +1,5 @@
class C {
- def f(x: int) {}
+ def f(x: Int) {}
}
class D extends C {
diff --git a/test/files/neg/overloaded-implicit.check b/test/files/neg/overloaded-implicit.check
new file mode 100644
index 0000000000..bdbe6a89d5
--- /dev/null
+++ b/test/files/neg/overloaded-implicit.check
@@ -0,0 +1,7 @@
+overloaded-implicit.scala:2: error: parameterized overloaded implicit methods are not visible as view bounds
+ implicit def imp1[T](x: List[T]): Map[T, T] = Map()
+ ^
+overloaded-implicit.scala:3: error: parameterized overloaded implicit methods are not visible as view bounds
+ implicit def imp1[T](x: Set[T]): Map[T, T] = Map()
+ ^
+two errors found
diff --git a/test/files/neg/overloaded-implicit.flags b/test/files/neg/overloaded-implicit.flags
new file mode 100644
index 0000000000..7949c2afa2
--- /dev/null
+++ b/test/files/neg/overloaded-implicit.flags
@@ -0,0 +1 @@
+-Xlint -Xfatal-warnings
diff --git a/test/files/neg/overloaded-implicit.scala b/test/files/neg/overloaded-implicit.scala
new file mode 100644
index 0000000000..9ab66cf560
--- /dev/null
+++ b/test/files/neg/overloaded-implicit.scala
@@ -0,0 +1,17 @@
+object Test {
+ implicit def imp1[T](x: List[T]): Map[T, T] = Map()
+ implicit def imp1[T](x: Set[T]): Map[T, T] = Map()
+
+ def f[T <% Map[Int, Int]](x: T): Double = 1.0d
+
+ // not parameterized, no warning
+ implicit def imp2(x: List[Int]): String = "a"
+ implicit def imp2(x: Set[Int]): String = "b"
+
+ def g[T <% String](x: T): Double = 2.0d
+
+ def main(args: Array[String]): Unit = {
+ // println(f(List(1)))
+ println(g(List(1)))
+ }
+}
diff --git a/test/files/neg/override-object-flag.check b/test/files/neg/override-object-flag.check
new file mode 100644
index 0000000000..152d31ff8a
--- /dev/null
+++ b/test/files/neg/override-object-flag.check
@@ -0,0 +1,5 @@
+override-object-flag.scala:3: error: overriding object Foo in trait A of type object B.this.Foo;
+ object Foo cannot override final member
+trait B extends A { override object Foo }
+ ^
+one error found
diff --git a/test/files/neg/override-object-flag.scala b/test/files/neg/override-object-flag.scala
new file mode 100644
index 0000000000..74d00dd445
--- /dev/null
+++ b/test/files/neg/override-object-flag.scala
@@ -0,0 +1,3 @@
+// no flag enabling it, fail
+trait A { object Foo }
+trait B extends A { override object Foo }
diff --git a/test/files/neg/override-object-no.check b/test/files/neg/override-object-no.check
new file mode 100644
index 0000000000..6e028d0add
--- /dev/null
+++ b/test/files/neg/override-object-no.check
@@ -0,0 +1,23 @@
+override-object-no.scala:14: error: overriding object Bar in trait Foo with object Bar in trait Foo2:
+an overriding object must conform to the overridden object's class bound;
+ found : case1.Bippy with ScalaObject
+ required: case1.Bippy with case1.Bippo with ScalaObject
+ override object Bar extends Bippy { // err
+ ^
+override-object-no.scala:21: error: overriding object Bar in trait Quux1 with object Bar in trait Quux2:
+an overriding object must conform to the overridden object's class bound;
+ found : Object with ScalaObject{def g: String}
+ required: Object with ScalaObject{def g: Int}
+ trait Quux2 extends Quux1 { override object Bar { def g = "abc" } } // err
+ ^
+override-object-no.scala:25: error: overriding object Bar in trait Quux3 of type object Quux4.this.Bar;
+ object Bar cannot override final member
+ trait Quux4 extends Quux3 { override object Bar } // err
+ ^
+override-object-no.scala:43: error: overriding object A in class Foo with object A in class P2:
+an overriding object must conform to the overridden object's class bound;
+ found : case2.Bar[List[String]] with ScalaObject
+ required: case2.Bar[Traversable[String]] with ScalaObject
+ override object A extends Bar[List[String]] // err
+ ^
+four errors found
diff --git a/test/files/neg/override-object-no.flags b/test/files/neg/override-object-no.flags
new file mode 100644
index 0000000000..22e9a95c4f
--- /dev/null
+++ b/test/files/neg/override-object-no.flags
@@ -0,0 +1 @@
+-Yoverride-objects \ No newline at end of file
diff --git a/test/files/neg/override-object-no.scala b/test/files/neg/override-object-no.scala
new file mode 100644
index 0000000000..45961e4fa6
--- /dev/null
+++ b/test/files/neg/override-object-no.scala
@@ -0,0 +1,45 @@
+// See also pos/override-object-yes.scala
+
+package case1 {
+ // Missing interface in overriding object
+ class Bippy { def f = 1 }
+ trait Bippo
+
+ trait Foo {
+ object Bar extends Bippy with Bippo { override def f = 2 }
+ def f(x: Bippo)
+ def g = f(Bar)
+ }
+ trait Foo2 extends Foo {
+ override object Bar extends Bippy { // err
+ override def f = 3
+ }
+ }
+
+ // type mismatch in member
+ trait Quux1 { object Bar { def g = 55 } }
+ trait Quux2 extends Quux1 { override object Bar { def g = "abc" } } // err
+
+ // still can't override final objects!
+ trait Quux3 { final object Bar { } }
+ trait Quux4 extends Quux3 { override object Bar } // err
+}
+
+// type parameter as-seen-from business
+package case2 {
+ // invariance (see pos for the covariant case)
+ class Bar[T]
+
+ class Foo[T] {
+ object A extends Bar[T]
+ }
+
+ class Baz[S] extends Foo[S] {
+ override object A extends Bar[S]
+ }
+
+ class P1 extends Foo[Traversable[String]]
+ class P2 extends P1 {
+ override object A extends Bar[List[String]] // err
+ }
+}
diff --git a/test/files/neg/override.check b/test/files/neg/override.check
new file mode 100644
index 0000000000..0336fb2b11
--- /dev/null
+++ b/test/files/neg/override.check
@@ -0,0 +1,5 @@
+override.scala:9: error: overriding type T in trait A with bounds >: Int <: Int;
+ type T in trait B with bounds >: String <: String has incompatible type
+ lazy val x : A with B = x
+ ^
+one error found
diff --git a/test/files/neg/override.scala b/test/files/neg/override.scala
new file mode 100755
index 0000000000..3e589b52e3
--- /dev/null
+++ b/test/files/neg/override.scala
@@ -0,0 +1,15 @@
+trait X {
+ trait A { type T >: Int <: Int }
+ val x : A
+ var n : x.T = 3
+}
+
+trait Y extends X {
+ trait B { type T >: String <: String }
+ lazy val x : A with B = x
+ n = "foo"
+}
+
+object Test extends App {
+ new Y {}
+}
diff --git a/test/files/neg/package-ob-case.check b/test/files/neg/package-ob-case.check
new file mode 100644
index 0000000000..e6b2f858ef
--- /dev/null
+++ b/test/files/neg/package-ob-case.check
@@ -0,0 +1,5 @@
+package-ob-case.scala:3: error: it is not recommended to define classes/objects inside of package objects.
+If possible, define class X in package foo instead.
+ case class X(z: Int) { }
+ ^
+one error found
diff --git a/test/files/neg/package-ob-case.flags b/test/files/neg/package-ob-case.flags
new file mode 100644
index 0000000000..e8fb65d50c
--- /dev/null
+++ b/test/files/neg/package-ob-case.flags
@@ -0,0 +1 @@
+-Xfatal-warnings \ No newline at end of file
diff --git a/test/files/neg/package-ob-case.scala b/test/files/neg/package-ob-case.scala
new file mode 100644
index 0000000000..91a1fb7e48
--- /dev/null
+++ b/test/files/neg/package-ob-case.scala
@@ -0,0 +1,5 @@
+package foo {
+ package object foo {
+ case class X(z: Int) { }
+ }
+}
diff --git a/test/files/neg/pat_unreachable.scala b/test/files/neg/pat_unreachable.scala
index 04a7fa580c..fc0fd41920 100644
--- a/test/files/neg/pat_unreachable.scala
+++ b/test/files/neg/pat_unreachable.scala
@@ -1,5 +1,5 @@
-object Test extends Application {
+object Test extends App {
def unreachable1(xs:Seq[Char]) = xs match {
case Seq(x, y, _*) => x::y::Nil
case Seq(x, y, z, w) => List(z,w) // redundant!
@@ -8,7 +8,7 @@ object Test extends Application {
case Seq(x, y, _*) => x::y::Nil
case Seq(x, y) => List(x, y)
}
-
+
def not_unreachable(xs:Seq[Char]) = xs match {
case Seq(x, y, _*) => x::y::Nil
case Seq(x) => List(x)
diff --git a/test/files/neg/patmat-type-check.check b/test/files/neg/patmat-type-check.check
new file mode 100644
index 0000000000..e045841ce1
--- /dev/null
+++ b/test/files/neg/patmat-type-check.check
@@ -0,0 +1,21 @@
+patmat-type-check.scala:22: error: scrutinee is incompatible with pattern type;
+ found : Seq[A]
+ required: String
+ def f1 = "bob".reverse match { case Seq('b', 'o', 'b') => true } // fail
+ ^
+patmat-type-check.scala:23: error: scrutinee is incompatible with pattern type;
+ found : Seq[A]
+ required: Array[Char]
+ def f2 = "bob".toArray match { case Seq('b', 'o', 'b') => true } // fail
+ ^
+patmat-type-check.scala:27: error: scrutinee is incompatible with pattern type;
+ found : Seq[A]
+ required: Test.Bop2
+ def f3(x: Bop2) = x match { case Seq('b', 'o', 'b') => true } // fail
+ ^
+patmat-type-check.scala:30: error: scrutinee is incompatible with pattern type;
+ found : Seq[A]
+ required: Test.Bop3[Char]
+ def f4[T](x: Bop3[Char]) = x match { case Seq('b', 'o', 'b') => true } // fail
+ ^
+four errors found
diff --git a/test/files/neg/patmat-type-check.scala b/test/files/neg/patmat-type-check.scala
new file mode 100644
index 0000000000..cc35089430
--- /dev/null
+++ b/test/files/neg/patmat-type-check.scala
@@ -0,0 +1,31 @@
+object Test
+{
+ def s1 = "bob".toList match { case Seq('b', 'o', 'b') => true } // list ok
+
+ // not final, allowed
+ class Bop
+ def s2(x: Bop) = x match { case Seq('b', 'o', 'b') => true }
+
+ // covariance, allowed
+ final class Bop4[+T]
+ def s3[T](x: Bop4[T]) = x match { case Seq('b', 'o', 'b') => true }
+
+ // contravariance, allowed
+ final class Bop5[T, U, -V]
+ def s4[T1, T2](x: Bop5[_, T1, T2]) = x match { case Seq('b', 'o', 'b') => true }
+
+ // free type parameter, allowed
+ final class Bop3[T]
+ def f4[T](x: Bop3[T]) = x match { case Seq('b', 'o', 'b') => true }
+
+ // String and Array are final/invariant, disallowed
+ def f1 = "bob".reverse match { case Seq('b', 'o', 'b') => true } // fail
+ def f2 = "bob".toArray match { case Seq('b', 'o', 'b') => true } // fail
+
+ // final, no type parameters, should be disallowed
+ final class Bop2
+ def f3(x: Bop2) = x match { case Seq('b', 'o', 'b') => true } // fail
+
+ // final, invariant type parameter, should be disallowed
+ def f4[T](x: Bop3[Char]) = x match { case Seq('b', 'o', 'b') => true } // fail
+}
diff --git a/test/files/neg/patmatexhaust.check b/test/files/neg/patmatexhaust.check
index 1c46b6c9e5..5426d61d31 100644
--- a/test/files/neg/patmatexhaust.check
+++ b/test/files/neg/patmatexhaust.check
@@ -1,37 +1,54 @@
-patmatexhaust.scala:7: warning: match is not exhaustive!
+patmatexhaust.scala:7: error: match is not exhaustive!
missing combination Baz
def ma1(x:Foo) = x match {
^
-patmatexhaust.scala:11: warning: match is not exhaustive!
+patmatexhaust.scala:11: error: match is not exhaustive!
missing combination Bar
def ma2(x:Foo) = x match {
^
-patmatexhaust.scala:23: warning: match is not exhaustive!
+patmatexhaust.scala:23: error: match is not exhaustive!
missing combination Kult Kult
missing combination Qult Qult
def ma3(x:Mult) = (x,x) match { // not exhaustive
- ^
-patmatexhaust.scala:49: warning: match is not exhaustive!
-missing combination Gu
+ ^
+patmatexhaust.scala:49: error: match is not exhaustive!
missing combination Gp
+missing combination Gu
def ma4(x:Deep) = x match { // missing cases: Gu, Gp
^
-patmatexhaust.scala:53: warning: match is not exhaustive!
+patmatexhaust.scala:53: error: match is not exhaustive!
missing combination Gp
def ma5(x:Deep) = x match { // Gp
^
-patmatexhaust.scala:75: warning: match is not exhaustive!
+patmatexhaust.scala:59: error: match is not exhaustive!
+missing combination Nil
+
+ def ma6() = List(1,2) match { // give up
+ ^
+patmatexhaust.scala:75: error: match is not exhaustive!
missing combination B
def ma9(x: B) = x match {
^
-patmatexhaust.scala:92: error: unreachable code
- case 1 =>
- ^
-6 warnings found
-one error found
+patmatexhaust.scala:100: error: match is not exhaustive!
+missing combination C1
+
+ def ma10(x: C) = x match { // not exhaustive: C1 is not sealed.
+ ^
+patmatexhaust.scala:114: error: match is not exhaustive!
+missing combination D1
+missing combination D2
+
+ def ma10(x: C) = x match { // not exhaustive: C1 has subclasses.
+ ^
+patmatexhaust.scala:126: error: match is not exhaustive!
+missing combination C1
+
+ def ma10(x: C) = x match { // not exhaustive: C1 is not abstract.
+ ^
+10 errors found
diff --git a/test/files/neg/patmatexhaust.flags b/test/files/neg/patmatexhaust.flags
new file mode 100644
index 0000000000..e8fb65d50c
--- /dev/null
+++ b/test/files/neg/patmatexhaust.flags
@@ -0,0 +1 @@
+-Xfatal-warnings \ No newline at end of file
diff --git a/test/files/neg/patmatexhaust.scala b/test/files/neg/patmatexhaust.scala
index b172df8740..9297e09d0d 100644
--- a/test/files/neg/patmatexhaust.scala
+++ b/test/files/neg/patmatexhaust.scala
@@ -22,14 +22,14 @@ class TestSealedExhaustive { // compile only
def ma3(x:Mult) = (x,x) match { // not exhaustive
case (Kult(_), Qult()) => // Kult missing
- //case Pair(Kult(_), Kult(_)) =>
+ //case Pair(Kult(_), Kult(_)) =>
case (Qult(), Kult(_)) => // Qult missing
- //case Pair(Qult(), Qult()) =>
+ //case Pair(Qult(), Qult()) =>
}
def ma3u(x:Mult) = ((x,x) : @unchecked) match { // not exhaustive, but not checked!
- case (Kult(_), Qult()) =>
- case (Qult(), Kult(_)) =>
+ case (Kult(_), Qult()) =>
+ case (Qult(), Kult(_)) =>
}
sealed abstract class Deep
@@ -37,35 +37,35 @@ class TestSealedExhaustive { // compile only
case object Ga extends Deep
sealed class Gp extends Deep
case object Gu extends Gp
-
+
def zma3(x:Deep) = x match { // exhaustive!
case _ =>
}
def zma4(x:Deep) = x match { // exhaustive!
- case Ga =>
+ case Ga =>
case _ =>
}
def ma4(x:Deep) = x match { // missing cases: Gu, Gp
- case Ga =>
+ case Ga =>
}
def ma5(x:Deep) = x match { // Gp
case Gu =>
- case _ if 1 == 0 =>
+ case _ if 1 == 0 =>
case Ga =>
}
- def ma6 = List(1,2) match { // give up
+ def ma6() = List(1,2) match { // give up
case List(1,2) =>
case x :: xs =>
}
- def ma7 = List(1,2) match { //exhaustive
+ def ma7() = List(1,2) match { //exhaustive
case 1::2::Nil =>
case _ =>
}
-
+
sealed class B
case class B1() extends B
case object B2 extends B
@@ -76,20 +76,56 @@ class TestSealedExhaustive { // compile only
case B1() => true // missing B, which is not abstract so must be included
case B2 => true
}
- sealed abstract class C
- abstract class C1 extends C
- object C2 extends C
- case object C6 extends C
- class C3 extends C1
- case class C4() extends C3
- def ma10(x: C) = x match { // exhaustive
- case C4() => true
- case C2 | C6 => true
+
+ object ob1 {
+ sealed abstract class C
+ sealed abstract class C1 extends C
+ object C2 extends C
+ case class C3() extends C
+ case object C4 extends C
+
+ def ma10(x: C) = x match { // exhaustive: abstract sealed C1 is dead end.
+ case C3() => true
+ case C2 | C4 => true
+ }
}
-
- def redundant = 1 match { // include this otherwise script won't test this in files/neg
- case 1 =>
- case 1 =>
+
+ object ob2 {
+ sealed abstract class C
+ abstract class C1 extends C
+ object C2 extends C
+ case class C3() extends C
+ case object C4 extends C
+
+ def ma10(x: C) = x match { // not exhaustive: C1 is not sealed.
+ case C3() => true
+ case C2 | C4 => true
+ }
+ }
+ object ob3 {
+ sealed abstract class C
+ sealed abstract class C1 extends C
+ object D1 extends C1
+ case class D2() extends C1
+ object C2 extends C
+ case class C3() extends C
+ case object C4 extends C
+
+ def ma10(x: C) = x match { // not exhaustive: C1 has subclasses.
+ case C3() => true
+ case C2 | C4 => true
+ }
+ }
+ object ob4 {
+ sealed abstract class C
+ sealed class C1 extends C
+ object C2 extends C
+ case class C3() extends C
+ case object C4 extends C
+
+ def ma10(x: C) = x match { // not exhaustive: C1 is not abstract.
+ case C3() => true
+ case C2 | C4 => true
+ }
}
-
}
diff --git a/test/files/neg/patternalts.scala b/test/files/neg/patternalts.scala
index 539df43201..56b682b0ec 100644
--- a/test/files/neg/patternalts.scala
+++ b/test/files/neg/patternalts.scala
@@ -1,5 +1,5 @@
object Test {
List(1) match {
case List(x) | List() => Console.println(x)
- }
+ }
}
diff --git a/test/files/neg/permanent-blindness.check b/test/files/neg/permanent-blindness.check
new file mode 100644
index 0000000000..18b4543707
--- /dev/null
+++ b/test/files/neg/permanent-blindness.check
@@ -0,0 +1,10 @@
+permanent-blindness.scala:10: error: imported `Bippy' is permanently hidden by definition of class Bippy in package bar
+ import foo.{ Bippy, Bop, Dingus }
+ ^
+permanent-blindness.scala:10: error: imported `Bop' is permanently hidden by definition of object Bop in package bar
+ import foo.{ Bippy, Bop, Dingus }
+ ^
+permanent-blindness.scala:10: error: imported `Dingus' is permanently hidden by definition of object Dingus in package bar
+ import foo.{ Bippy, Bop, Dingus }
+ ^
+three errors found
diff --git a/test/files/neg/permanent-blindness.flags b/test/files/neg/permanent-blindness.flags
new file mode 100644
index 0000000000..e8fb65d50c
--- /dev/null
+++ b/test/files/neg/permanent-blindness.flags
@@ -0,0 +1 @@
+-Xfatal-warnings \ No newline at end of file
diff --git a/test/files/neg/permanent-blindness.scala b/test/files/neg/permanent-blindness.scala
new file mode 100644
index 0000000000..b6d09d6dce
--- /dev/null
+++ b/test/files/neg/permanent-blindness.scala
@@ -0,0 +1,22 @@
+package foo {
+ class Bippy
+ object Bop {
+ def fff = 5
+ }
+ object Dingus
+}
+
+package bar {
+ import foo.{ Bippy, Bop, Dingus }
+
+ class Bippy
+ object Bop
+ object Dingus
+
+
+ class Ding {
+ def fff = 5
+
+ def g = new Bippy
+ }
+} \ No newline at end of file
diff --git a/test/files/neg/plugin-after-terminal/lib/plugins.jar.desired.sha1 b/test/files/neg/plugin-after-terminal/lib/plugins.jar.desired.sha1
deleted file mode 100644
index 23c54fb2de..0000000000
--- a/test/files/neg/plugin-after-terminal/lib/plugins.jar.desired.sha1
+++ /dev/null
@@ -1 +0,0 @@
-cf80703ed94f5176dc099c60b32d0483322de9eb ?plugins.jar
diff --git a/test/files/neg/plugin-after-terminal/src/ThePlugin.scala b/test/files/neg/plugin-after-terminal/src/ThePlugin.scala
deleted file mode 100644
index f3c913086e..0000000000
--- a/test/files/neg/plugin-after-terminal/src/ThePlugin.scala
+++ /dev/null
@@ -1,31 +0,0 @@
-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 = "afterterminal"
- val description = "Declares one plugin that wants to be after the terminal phase"
- val components = List[PluginComponent](thePhase)
-
- private object thePhase extends PluginComponent {
- val global = ThePlugin.this.global
-
- val runsAfter = List[String]("terminal")
-
- val phaseName = ThePlugin.this.name
-
- def newPhase(prev: Phase) = new ThePhase(prev)
- }
-
- private class ThePhase(prev: Phase) extends Phase(prev) {
- def name = ThePlugin.this.name
- def run {}
- }
-}
-
diff --git a/test/files/neg/plugin-before-parser/lib/plugins.jar.desired.sha1 b/test/files/neg/plugin-before-parser/lib/plugins.jar.desired.sha1
deleted file mode 100644
index 27c022e853..0000000000
--- a/test/files/neg/plugin-before-parser/lib/plugins.jar.desired.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2e05e73ed90aaf286fa6555d992c1da18de3ceca ?plugins.jar
diff --git a/test/files/neg/plugin-before-parser/src/ThePlugin.scala b/test/files/neg/plugin-before-parser/src/ThePlugin.scala
deleted file mode 100644
index 8714a55dc4..0000000000
--- a/test/files/neg/plugin-before-parser/src/ThePlugin.scala
+++ /dev/null
@@ -1,32 +0,0 @@
-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 = "beforeparser"
- val description = "Declares one plugin that wants to be before the parser phase"
- val components = List[PluginComponent](thePhase)
-
- private object thePhase extends PluginComponent {
- val global = ThePlugin.this.global
-
- val runsAfter = List[String]()
- override val runsBefore = List[String]("parser")
-
- val phaseName = ThePlugin.this.name
-
- def newPhase(prev: Phase) = new ThePhase(prev)
- }
-
- private class ThePhase(prev: Phase) extends Phase(prev) {
- def name = ThePlugin.this.name
- def run {}
- }
-}
-
diff --git a/test/files/neg/plugin-cyclic-dependency/lib/plugins.jar.desired.sha1 b/test/files/neg/plugin-cyclic-dependency/lib/plugins.jar.desired.sha1
deleted file mode 100644
index f1fb45387c..0000000000
--- a/test/files/neg/plugin-cyclic-dependency/lib/plugins.jar.desired.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d96a5f1b3885225a5e203ae59ae2f2f3e3c65c9b ?plugins.jar
diff --git a/test/files/neg/plugin-cyclic-dependency/src/ThePlugin.scala b/test/files/neg/plugin-cyclic-dependency/src/ThePlugin.scala
deleted file mode 100644
index 1dfc15cb28..0000000000
--- a/test/files/neg/plugin-cyclic-dependency/src/ThePlugin.scala
+++ /dev/null
@@ -1,41 +0,0 @@
-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 = "cyclicdependency"
- val description = "Declares two phases that have a cyclic dependency"
- val components = List[PluginComponent](thePhase1,thePhase2)
-
- private object thePhase1 extends PluginComponent {
- val global = ThePlugin.this.global
-
- val runsAfter = List[String]("tailcalls","cyclicdependency2")
-
- val phaseName = ThePlugin.this.name + "1"
-
- def newPhase(prev: Phase) = new ThePhase(prev)
- }
-
- private object thePhase2 extends PluginComponent {
- val global = ThePlugin.this.global
-
- val runsAfter = List[String]("dce","cyclicdependency1")
-
- val phaseName = ThePlugin.this.name + "2"
-
- def newPhase(prev: Phase) = new ThePhase(prev)
- }
-
- private class ThePhase(prev: Phase) extends Phase(prev) {
- def name = ThePlugin.this.name
- def run {}
- }
-}
-
diff --git a/test/files/neg/plugin-multiple-rafter/lib/plugins.jar.desired.sha1 b/test/files/neg/plugin-multiple-rafter/lib/plugins.jar.desired.sha1
deleted file mode 100644
index 9706b6dd60..0000000000
--- a/test/files/neg/plugin-multiple-rafter/lib/plugins.jar.desired.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ee728763d50a19e725f729797d5afab05d395c4e ?plugins.jar
diff --git a/test/files/neg/plugin-multiple-rafter/src/ThePlugin.scala b/test/files/neg/plugin-multiple-rafter/src/ThePlugin.scala
deleted file mode 100644
index 4c761517c1..0000000000
--- a/test/files/neg/plugin-multiple-rafter/src/ThePlugin.scala
+++ /dev/null
@@ -1,31 +0,0 @@
-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 = "multi-rafter"
- val description = ""
- val components = List[PluginComponent](thePhase)
-
- private object thePhase extends PluginComponent {
- val global = ThePlugin.this.global
-
- val runsAfter = List[String]()
- override val runsRightAfter = Some("explicitouter")
- val phaseName = ThePlugin.this.name
-
- def newPhase(prev: Phase) = new ThePhase(prev)
- }
-
- private class ThePhase(prev: Phase) extends Phase(prev) {
- def name = ThePlugin.this.name
- def run {}
- }
-}
-
diff --git a/test/files/neg/plugin-rafter-before-1/lib/plugins.jar.desired.sha1 b/test/files/neg/plugin-rafter-before-1/lib/plugins.jar.desired.sha1
deleted file mode 100644
index b07cece8b9..0000000000
--- a/test/files/neg/plugin-rafter-before-1/lib/plugins.jar.desired.sha1
+++ /dev/null
@@ -1 +0,0 @@
-398fa866d1d5c6608c9607dd1079afc12182119f ?plugins.jar
diff --git a/test/files/neg/plugin-rafter-before-1/src/ThePlugin.scala b/test/files/neg/plugin-rafter-before-1/src/ThePlugin.scala
deleted file mode 100644
index c42a914066..0000000000
--- a/test/files/neg/plugin-rafter-before-1/src/ThePlugin.scala
+++ /dev/null
@@ -1,31 +0,0 @@
-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 = "rafter-before-1"
- val description = ""
- val components = List[PluginComponent](thePhase1)
-
- private object thePhase1 extends PluginComponent {
- val global = ThePlugin.this.global
-
- val runsAfter = List[String]("refchecks")
- override val runsBefore = List[String]("erasure")
- val phaseName = ThePlugin.this.name
-
- def newPhase(prev: Phase) = new ThePhase(prev)
- }
-
- private class ThePhase(prev: Phase) extends Phase(prev) {
- def name = ThePlugin.this.name
- def run {}
- }
-}
-
diff --git a/test/files/neg/plugin-rightafter-terminal/lib/plugins.jar.desired.sha1 b/test/files/neg/plugin-rightafter-terminal/lib/plugins.jar.desired.sha1
deleted file mode 100644
index 78a4fc0c98..0000000000
--- a/test/files/neg/plugin-rightafter-terminal/lib/plugins.jar.desired.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b2166b6bc2a55264d959e613fa52695295db2281 ?plugins.jar
diff --git a/test/files/neg/plugin-rightafter-terminal/src/ThePlugin.scala b/test/files/neg/plugin-rightafter-terminal/src/ThePlugin.scala
deleted file mode 100644
index 47dd06ec8a..0000000000
--- a/test/files/neg/plugin-rightafter-terminal/src/ThePlugin.scala
+++ /dev/null
@@ -1,32 +0,0 @@
-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 = "rightafterterminal"
- val description = "Declares one plugin that wants to be right after the terminal phase"
- val components = List[PluginComponent](thePhase)
-
- private object thePhase extends PluginComponent {
- val global = ThePlugin.this.global
-
- val runsAfter = List[String]()
- override val runsRightAfter = Some("terminal")
-
- val phaseName = ThePlugin.this.name
-
- def newPhase(prev: Phase) = new ThePhase(prev)
- }
-
- private class ThePhase(prev: Phase) extends Phase(prev) {
- def name = ThePlugin.this.name
- def run {}
- }
-}
-
diff --git a/test/files/neg/predef-masking.check b/test/files/neg/predef-masking.check
new file mode 100644
index 0000000000..79e4dece8a
--- /dev/null
+++ b/test/files/neg/predef-masking.check
@@ -0,0 +1,4 @@
+predef-masking.scala:7: error: value + is not a member of type parameter T
+ def f[T](x: T) = x + 5
+ ^
+one error found
diff --git a/test/files/neg/predef-masking.scala b/test/files/neg/predef-masking.scala
new file mode 100644
index 0000000000..67b69aa169
--- /dev/null
+++ b/test/files/neg/predef-masking.scala
@@ -0,0 +1,21 @@
+// Testing predef masking
+import Predef.{ any2stringadd => _, _ }
+
+object StringPlusConfusion {
+ // Would love to do something about this error message, but by the
+ // time we get our hands on it the context is lost.
+ def f[T](x: T) = x + 5
+
+ // After we block out any2stringadd, the error is:
+ //
+ // work/a.scala:7: error: value + is not a member of type parameter T
+ // def f[T](x: T) = x + 5
+ // ^
+ // Normally, it is:
+ //
+ // work/a.scala:7: error: type mismatch;
+ // found : Int(5)
+ // required: String
+ // def f[T](x: T) = x + 5
+ // ^
+}
diff --git a/test/files/neg/primitive-sigs-1.check b/test/files/neg/primitive-sigs-1.check
new file mode 100644
index 0000000000..8713d95cc3
--- /dev/null
+++ b/test/files/neg/primitive-sigs-1.check
@@ -0,0 +1,6 @@
+A_3.scala:3: error: type mismatch;
+ found : Bippy
+ required: AC[Integer]
+ J_2.f(new Bippy())
+ ^
+one error found
diff --git a/test/files/neg/primitive-sigs-1/A_1.scala b/test/files/neg/primitive-sigs-1/A_1.scala
new file mode 100644
index 0000000000..0dd83b5d6a
--- /dev/null
+++ b/test/files/neg/primitive-sigs-1/A_1.scala
@@ -0,0 +1,9 @@
+// scala: the signature in the abstract class will use the
+// upper bound as return type, which for us will be Integer
+// since primitives can't appear in bounds.
+abstract class AC[T <: Int] {
+ def f(): T
+}
+class Bippy extends AC[Int] {
+ def f(): Int = 5
+} \ No newline at end of file
diff --git a/test/files/neg/primitive-sigs-1/A_3.scala b/test/files/neg/primitive-sigs-1/A_3.scala
new file mode 100644
index 0000000000..dec617a111
--- /dev/null
+++ b/test/files/neg/primitive-sigs-1/A_3.scala
@@ -0,0 +1,5 @@
+object Test {
+ def main(args: Array[String]): Unit = {
+ J_2.f(new Bippy())
+ }
+}
diff --git a/test/files/neg/primitive-sigs-1/J_2.java b/test/files/neg/primitive-sigs-1/J_2.java
new file mode 100644
index 0000000000..b416befb4d
--- /dev/null
+++ b/test/files/neg/primitive-sigs-1/J_2.java
@@ -0,0 +1,8 @@
+// java: often the java or scala compiler will save us from
+// the untruth in the signature, but not always.
+public class J_2 {
+ public static Integer f(AC<Integer> x) { return x.f(); }
+ public static void main(String[] args) {
+ f(new Bippy());
+ }
+}
diff --git a/test/files/neg/protected-constructors.check b/test/files/neg/protected-constructors.check
new file mode 100644
index 0000000000..f137158ed6
--- /dev/null
+++ b/test/files/neg/protected-constructors.check
@@ -0,0 +1,25 @@
+protected-constructors.scala:17: error: too many arguments for constructor Foo1: ()dingus.Foo1
+ val foo1 = new Foo1("abc")
+ ^
+protected-constructors.scala:18: error: constructor Foo2 in class Foo2 cannot be accessed in object P
+ Access to protected constructor Foo2 not permitted because
+ enclosing object P in package hungus is not a subclass of
+ class Foo2 in package dingus where target is defined
+ val foo2 = new Foo2("abc")
+ ^
+protected-constructors.scala:19: error: class Foo3 in object Ding cannot be accessed in object dingus.Ding
+ Access to protected class Foo3 not permitted because
+ enclosing object P in package hungus is not a subclass of
+ object Ding in package dingus where target is defined
+ val foo3 = new Ding.Foo3("abc")
+ ^
+protected-constructors.scala:15: error: class Foo3 in object Ding cannot be accessed in object dingus.Ding
+ Access to protected class Foo3 not permitted because
+ enclosing object P in package hungus is not a subclass of
+ object Ding in package dingus where target is defined
+ class Bar3 extends Ding.Foo3("abc")
+ ^
+protected-constructors.scala:15: error: too many arguments for constructor Object: ()Object
+ class Bar3 extends Ding.Foo3("abc")
+ ^
+5 errors found
diff --git a/test/files/neg/protected-constructors.scala b/test/files/neg/protected-constructors.scala
new file mode 100644
index 0000000000..f2662ee67c
--- /dev/null
+++ b/test/files/neg/protected-constructors.scala
@@ -0,0 +1,21 @@
+package dingus {
+ class Foo1() { protected def this(name: String) = this() }
+ class Foo2 protected (name: String) { }
+ object Ding {
+ protected class Foo3(name: String) { }
+ }
+}
+
+package hungus {
+ import dingus._
+
+ object P {
+ class Bar1 extends Foo1("abc")
+ class Bar2 extends Foo2("abc")
+ class Bar3 extends Ding.Foo3("abc")
+
+ val foo1 = new Foo1("abc")
+ val foo2 = new Foo2("abc")
+ val foo3 = new Ding.Foo3("abc")
+ }
+}
diff --git a/test/files/neg/protected-static-fail.check b/test/files/neg/protected-static-fail.check
new file mode 100644
index 0000000000..e149bc016f
--- /dev/null
+++ b/test/files/neg/protected-static-fail.check
@@ -0,0 +1,16 @@
+S.scala:5: error: method f in object J cannot be accessed in object bippy.J
+ J.f()
+ ^
+S.scala:6: error: method f1 in object S1 cannot be accessed in object bippy.S1
+ Access to protected method f1 not permitted because
+ enclosing object Test in package bippy is not a subclass of
+ object S1 in package bippy where target is defined
+ S1.f1()
+ ^
+S.scala:8: error: method f2 in class S2 cannot be accessed in bippy.S2
+ Access to protected method f2 not permitted because
+ enclosing object Test in package bippy is not a subclass of
+ class S2 in package bippy where target is defined
+ x.f2()
+ ^
+three errors found
diff --git a/test/files/neg/protected-static-fail/J.java b/test/files/neg/protected-static-fail/J.java
new file mode 100644
index 0000000000..c340800d7f
--- /dev/null
+++ b/test/files/neg/protected-static-fail/J.java
@@ -0,0 +1,7 @@
+package bippy;
+
+public class J {
+ private static String f() {
+ return "hi mom";
+ }
+} \ No newline at end of file
diff --git a/test/files/neg/protected-static-fail/S.scala b/test/files/neg/protected-static-fail/S.scala
new file mode 100644
index 0000000000..f9dd89d9d0
--- /dev/null
+++ b/test/files/neg/protected-static-fail/S.scala
@@ -0,0 +1,10 @@
+package bippy
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ J.f()
+ S1.f1()
+ val x = new S2
+ x.f2()
+ }
+}
diff --git a/test/files/neg/protected-static-fail/S0.scala b/test/files/neg/protected-static-fail/S0.scala
new file mode 100644
index 0000000000..1a3d192e5e
--- /dev/null
+++ b/test/files/neg/protected-static-fail/S0.scala
@@ -0,0 +1,9 @@
+package bippy
+
+object S1 {
+ protected def f1() = "hi mom"
+}
+
+class S2 {
+ protected def f2() = "hi mom"
+} \ No newline at end of file
diff --git a/test/files/neg/reassignment.check b/test/files/neg/reassignment.check
new file mode 100644
index 0000000000..f0effd1459
--- /dev/null
+++ b/test/files/neg/reassignment.check
@@ -0,0 +1,13 @@
+reassignment.scala:2: error: not found: value x
+ x = 5
+ ^
+reassignment.scala:3: error: not found: value y
+ y := 45
+ ^
+reassignment.scala:4: error: not found: value y
+ y += 45
+ ^
+reassignment.scala:6: error: reassignment to val
+ z = 51
+ ^
+four errors found
diff --git a/test/files/neg/reassignment.scala b/test/files/neg/reassignment.scala
new file mode 100644
index 0000000000..e31eefbf3f
--- /dev/null
+++ b/test/files/neg/reassignment.scala
@@ -0,0 +1,7 @@
+class A {
+ x = 5
+ y := 45
+ y += 45
+ val z = 50
+ z = 51
+} \ No newline at end of file
diff --git a/test/files/neg/sabin2.scala b/test/files/neg/sabin2.scala
index 308632e990..24a4e511a6 100644
--- a/test/files/neg/sabin2.scala
+++ b/test/files/neg/sabin2.scala
@@ -1,4 +1,4 @@
-object Test extends Application
+object Test extends App
{
abstract class Base {
type T
diff --git a/test/files/neg/saito.scala b/test/files/neg/saito.scala
index b4fcd598e4..bfabb4edf4 100644
--- a/test/files/neg/saito.scala
+++ b/test/files/neg/saito.scala
@@ -2,13 +2,13 @@ class B {}
class A { self: B =>
def m(): B = {
this
- }
+ }
}
object Exec{
def main(args: Array[String]): Unit = {
val a: A = new A; // should not be allowed
- val b: B = a.m();
+ val b: B = a.m();
}
}
diff --git a/test/files/neg/scopes.check b/test/files/neg/scopes.check
new file mode 100644
index 0000000000..f8e8c3758a
--- /dev/null
+++ b/test/files/neg/scopes.check
@@ -0,0 +1,26 @@
+scopes.scala:3: error: t is already defined as type t
+ type t = Float
+ ^
+scopes.scala:5: error: x is already defined as value x
+ val x: Float = .0f;
+ ^
+scopes.scala:8: error: y is already defined as value y
+ val y: Float = .0f
+ ^
+scopes.scala:6: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+ {
+ ^
+scopes.scala:11: error: x is already defined as value x
+ def f1(x: Int, x: Float) = x
+ ^
+scopes.scala:12: error: y is already defined as value y
+ def f2(x: Int)(y: Int, y: Float) = x + y
+ ^
+scopes.scala:13: error: x is already defined as value x
+ val closure = (x: Int, x: Float) => x
+ ^
+scopes.scala:15: error: x is already defined as value x
+ case x::x => x
+ ^
+one warning found
+7 errors found
diff --git a/test/files/neg/scopes.scala b/test/files/neg/scopes.scala
new file mode 100644
index 0000000000..660e826619
--- /dev/null
+++ b/test/files/neg/scopes.scala
@@ -0,0 +1,18 @@
+object test1 {
+ type t = Int
+ type t = Float
+ val x: Int = 0
+ val x: Float = .0f;
+ {
+ val y: Int = 0
+ val y: Float = .0f
+ ()
+ }
+ def f1(x: Int, x: Float) = x
+ def f2(x: Int)(y: Int, y: Float) = x + y
+ val closure = (x: Int, x: Float) => x
+ List() match {
+ case x::x => x
+ case Nil => Nil
+ }
+}
diff --git a/test/files/neg/sealed-java-enums.check b/test/files/neg/sealed-java-enums.check
new file mode 100644
index 0000000000..9303c2df9c
--- /dev/null
+++ b/test/files/neg/sealed-java-enums.check
@@ -0,0 +1,9 @@
+sealed-java-enums.scala:5: error: match is not exhaustive!
+missing combination BLOCKED
+missing combination State
+missing combination TERMINATED
+missing combination TIMED_WAITING
+
+ def f(state: State) = state match {
+ ^
+one error found
diff --git a/test/files/neg/sealed-java-enums.flags b/test/files/neg/sealed-java-enums.flags
new file mode 100644
index 0000000000..e709c65918
--- /dev/null
+++ b/test/files/neg/sealed-java-enums.flags
@@ -0,0 +1 @@
+-Xexperimental -Xfatal-warnings
diff --git a/test/files/neg/sealed-java-enums.scala b/test/files/neg/sealed-java-enums.scala
new file mode 100644
index 0000000000..2daf93f308
--- /dev/null
+++ b/test/files/neg/sealed-java-enums.scala
@@ -0,0 +1,10 @@
+import java.lang.Thread.State
+import java.lang.Thread.State._
+
+object Test {
+ def f(state: State) = state match {
+ case NEW | WAITING => true
+ case RUNNABLE => false
+ // and I forget the rest
+ }
+}
diff --git a/test/files/neg/sensitive.check b/test/files/neg/sensitive.check
index aa7c65a3b1..32d988ec97 100644
--- a/test/files/neg/sensitive.check
+++ b/test/files/neg/sensitive.check
@@ -1,4 +1,4 @@
-sensitive.scala:17: error: constructor Sensitive cannot be accessed in object Attacker
+sensitive.scala:17: error: constructor Sensitive in class Sensitive cannot be accessed in object Attacker
val y = new Sensitive()
^
one error found
diff --git a/test/files/neg/sensitive.scala b/test/files/neg/sensitive.scala
index f435a385e1..fa1b940844 100644
--- a/test/files/neg/sensitive.scala
+++ b/test/files/neg/sensitive.scala
@@ -5,8 +5,8 @@ object Admin extends Certificate;
class SecurityViolationException extends Exception
object Sensitive {
- def makeSensitive(credentials: Certificate): Sensitive =
- if (credentials == Admin) new Sensitive()
+ def makeSensitive(credentials: Certificate): Sensitive =
+ if (credentials == Admin) new Sensitive()
else throw new SecurityViolationException
}
class Sensitive private () {
@@ -16,4 +16,4 @@ object Attacker {
val x = Sensitive.makeSensitive(null)
val y = new Sensitive()
}
-
+
diff --git a/test/files/neg/spec-overrides.check b/test/files/neg/spec-overrides.check
new file mode 100644
index 0000000000..639186af40
--- /dev/null
+++ b/test/files/neg/spec-overrides.check
@@ -0,0 +1,7 @@
+spec-overrides.scala:8: error: Type parameter has to be specialized at least for the same types as in the overridden method. Missing types: Int
+ override def a[@specialized(Double) T](t: T): List[T] = Nil
+ ^
+spec-overrides.scala:12: error: Type parameter has to be specialized at least for the same types as in the overridden method. Missing types: Int
+ override def a[T](t: T): List[T] = Nil
+ ^
+two errors found
diff --git a/test/files/neg/spec-overrides.scala b/test/files/neg/spec-overrides.scala
new file mode 100644
index 0000000000..f77dadea5d
--- /dev/null
+++ b/test/files/neg/spec-overrides.scala
@@ -0,0 +1,26 @@
+class P {
+ def a[@specialized(Int) T](t: T): List[T] = List(t)
+}
+class FX extends P {
+ override def a[@specialized(Int) T](t: T): List[T] = Nil
+}
+class FX1 extends P {
+ override def a[@specialized(Double) T](t: T): List[T] = Nil
+}
+
+class FX2 extends P {
+ override def a[T](t: T): List[T] = Nil
+}
+
+object Test extends App {
+ val fx = new FX
+ val p = new P
+
+ println(fx.a(3))
+ println((fx: P).a(3))
+ println((fx: P).a(3.0))
+
+
+ // val d = new Derived[Int]
+ // println((d: Base[Int]).m(10))
+}
diff --git a/test/files/neg/stmt-expr-discard.check b/test/files/neg/stmt-expr-discard.check
new file mode 100644
index 0000000000..2d6420a61d
--- /dev/null
+++ b/test/files/neg/stmt-expr-discard.check
@@ -0,0 +1,7 @@
+stmt-expr-discard.scala:3: error: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+ + 2
+ ^
+stmt-expr-discard.scala:4: error: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+ - 4
+ ^
+two errors found
diff --git a/test/files/neg/stmt-expr-discard.flags b/test/files/neg/stmt-expr-discard.flags
new file mode 100644
index 0000000000..e8fb65d50c
--- /dev/null
+++ b/test/files/neg/stmt-expr-discard.flags
@@ -0,0 +1 @@
+-Xfatal-warnings \ No newline at end of file
diff --git a/test/files/neg/stmt-expr-discard.scala b/test/files/neg/stmt-expr-discard.scala
new file mode 100644
index 0000000000..e60c854625
--- /dev/null
+++ b/test/files/neg/stmt-expr-discard.scala
@@ -0,0 +1,5 @@
+class A {
+ def f = 1
+ + 2
+ - 4
+}
diff --git a/test/files/neg/structural.check b/test/files/neg/structural.check
index 100b989a2f..6ef57db1b4 100644
--- a/test/files/neg/structural.check
+++ b/test/files/neg/structural.check
@@ -1,9 +1,6 @@
structural.scala:47: error: Parameter type in structural refinement may not refer to the type of that refinement (self type)
val s1 = new { def f(p: this.type): Unit = () }
^
-structural.scala:19: error: illegal dependent method type
- def f9[C <: Object](x: Object{ type D <: Object; def m[E >: Null <: Object](x: Object): D }) = x.m[Tata](null) //fail
- ^
structural.scala:10: error: Parameter type in structural refinement may not refer to an abstract type defined outside that refinement
def f1[C <: Object](x: Object{ type D <: Object; def m[E >: Null <: Object](x: A): Object; val x: A }) = x.m[Tata](x.x) //fail
^
@@ -28,4 +25,4 @@ structural.scala:49: error: Parameter type in structural refinement may not refe
structural.scala:52: error: Parameter type in structural refinement may not refer to an abstract type defined outside that refinement
def s3[U >: Null <: Object](p: { def f(p: U): Unit; def u: U }) = ()
^
-10 errors found
+9 errors found
diff --git a/test/files/neg/structural.scala b/test/files/neg/structural.scala
index 181a32654e..bfca37b22a 100644
--- a/test/files/neg/structural.scala
+++ b/test/files/neg/structural.scala
@@ -1,54 +1,54 @@
-object Test extends Application {
-
+object Test extends App {
+
def f(x: { type D; def m: D }): Null = null
-
+
class Tata
-
+
abstract class Toto[A <: Object] {
type B <: Object
-
+
def f1[C <: Object](x: Object{ type D <: Object; def m[E >: Null <: Object](x: A): Object; val x: A }) = x.m[Tata](x.x) //fail
def f2[C <: Object](x: Object{ type D <: Object; def m[E >: Null <: Object](x: B): Object; val x: B }) = x.m[Tata](x.x) //fail
def f3[C <: Object](x: Object{ type D <: Object; def m[E >: Null <: Object](x: C): Object; val x: C }) = x.m[Tata](x.x) //fail
def f4[C <: Object](x: Object{ type D <: Object; def m[E >: Null <: Object](x: D): Object; val x: D }) = x.m[Tata](x.x) //fail
def f5[C <: Object](x: Object{ type D <: Object; def m[E >: Null <: Object](x: E): Object; val x: Tata }) = x.m[Tata](x.x) //suceed
-
+
def f6[C <: Object](x: Object{ type D <: Object; def m[E >: Null <: Object](x: Object): A }) = x.m[Tata](null) //suceed
def f7[C <: Object](x: Object{ type D <: Object; def m[E >: Null <: Object](x: Object): B }) = x.m[Tata](null) //suceed
def f8[C <: Object](x: Object{ type D <: Object; def m[E >: Null <: Object](x: Object): C }) = x.m[Tata](null) //suceed
def f9[C <: Object](x: Object{ type D <: Object; def m[E >: Null <: Object](x: Object): D }) = x.m[Tata](null) //fail
def f0[C <: Object](x: Object{ type D <: Object; def m[E >: Null <: Object](x: Object): E }) = x.m[Tata](null) //suceed
-
+
}
-
+
val tata = new Tata
val toto = new Toto[Tata] {
type B = Tata
}
-
+
//toto.f1[Tata](new Object{ type D = Tata; def m[E >: Null <: Object](x: Tata): Object = null; val x = tata })
//toto.f2[Tata](new Object{ type D = Tata; def m[E >: Null <: Object](x: Tata): Object = null; val x = tata })
//toto.f3[Tata](new Object{ type D = Tata; def m[E >: Null <: Object](x: Tata): Object = null; val x = tata })
//toto.f4[Tata](new Object{ type D = Tata; def m[E >: Null <: Object](x: D): Object = null; val x = tata })
toto.f5[Tata](new Object{ type D = Tata; def m[E >: Null <: Object](x: E): Object = null; val x: Test.Tata = tata })
-
+
toto.f6[Tata](new Object{ type D = Tata; def m[E >: Null <: Object](x: Object): Tata = null })
toto.f7[Tata](new Object{ type D = Tata; def m[E >: Null <: Object](x: Object): Tata = null })
toto.f8[Tata](new Object{ type D = Tata; def m[E >: Null <: Object](x: Object): Tata = null })
//toto.f9[Tata](new Object{ type D = Tata; def m[E >: Null <: Object](x: Object): D = null })
toto.f0[Tata](new Object{ type D = Tata; def m[E >: Null <: Object](x: Object): E = null })
-
+
/* Bug #1246 */
type Summable[T] = { def +(v : T) : T }
def sum[T <: Summable[T]](xs : List[T]) = xs.reduceLeft[T](_ + _)
-
+
/* Bug #1004 & #967 */
type S1 = { def f(p: this.type): Unit }
val s1 = new { def f(p: this.type): Unit = () }
-
+
type S2 = { type T; def f(p: T): Unit }
//val s2: S2 = new { type T = A; def f(p: T): Unit = () }
-
+
def s3[U >: Null <: Object](p: { def f(p: U): Unit; def u: U }) = ()
-
+
}
diff --git a/test/files/neg/suggest-similar.check b/test/files/neg/suggest-similar.check
new file mode 100644
index 0000000000..0a858aaf2e
--- /dev/null
+++ b/test/files/neg/suggest-similar.check
@@ -0,0 +1,10 @@
+suggest-similar.scala:8: error: not found: value flippitx (similar: flippity)
+ flippitx = 123
+ ^
+suggest-similar.scala:9: error: not found: value identiyt (similar: identity)
+ Nil map identiyt
+ ^
+suggest-similar.scala:10: error: not found: type Bingus (similar: Dingus)
+ new Bingus
+ ^
+three errors found
diff --git a/test/files/neg/suggest-similar.scala b/test/files/neg/suggest-similar.scala
new file mode 100644
index 0000000000..ff327478fe
--- /dev/null
+++ b/test/files/neg/suggest-similar.scala
@@ -0,0 +1,11 @@
+class Dingus
+object Dingus {
+ var flippity = 1
+}
+import Dingus._
+
+class A {
+ flippitx = 123
+ Nil map identiyt
+ new Bingus
+}
diff --git a/test/files/neg/super-cast-or-test.check b/test/files/neg/super-cast-or-test.check
new file mode 100644
index 0000000000..8e5eed62bd
--- /dev/null
+++ b/test/files/neg/super-cast-or-test.check
@@ -0,0 +1,7 @@
+super-cast-or-test.scala:1: error: super not allowed here: use this.asInstanceOf instead
+trait A { def f = super.asInstanceOf[AnyRef] }
+ ^
+super-cast-or-test.scala:2: error: super not allowed here: use this.isInstanceOf instead
+trait B { def g = super.isInstanceOf[AnyRef] }
+ ^
+two errors found
diff --git a/test/files/neg/super-cast-or-test.scala b/test/files/neg/super-cast-or-test.scala
new file mode 100644
index 0000000000..a0f86d8081
--- /dev/null
+++ b/test/files/neg/super-cast-or-test.scala
@@ -0,0 +1,3 @@
+trait A { def f = super.asInstanceOf[AnyRef] }
+trait B { def g = super.isInstanceOf[AnyRef] }
+
diff --git a/test/files/neg/switch.scala b/test/files/neg/switch.scala
index da7c867ba0..a3dfd869d6 100644
--- a/test/files/neg/switch.scala
+++ b/test/files/neg/switch.scala
@@ -16,44 +16,44 @@ object Main {
case 'f' | 'g' => true
case _ => false
}
-
+
def succ2(c: Char) = (c: @switch) match {
case 'A' | 'B' | 'C' => true
case Other.C2 => true
case Other.C4 => true
case _ => false
}
-
+
// has a guard
def fail1(c: Char) = (c: @switch) match {
case 'A' | 'B' | 'C' => true
case x if x == 'A' => true
case _ => false
}
-
+
// throwing in @unchecked on the next two to make sure
// multiple annotations are processed correctly
-
+
// thinks a val in an object is constant... so naive
def fail2(c: Char) = (c: @switch @unchecked) match {
case 'A' => true
case Other.C1 => true
case _ => false
}
-
+
// more naivete
def fail3(c: Char) = (c: @unchecked @switch) match {
case 'A' => true
case Other.C3 => true
case _ => false
}
-
+
// guard case done correctly
def succ3(c: Char) = (c: @switch) match {
case 'A' | 'B' | 'C' => true
case x => x == 'A'
}
-
+
// some ints just to mix it up a bit
def succ4(x: Int, y: Int) = ((x+y): @switch) match {
case 1 => 5
@@ -62,5 +62,5 @@ object Main {
case 4 => 50
case 5|6|7|8 => 100
case _ => -1
- }
+ }
}
diff --git a/test/files/neg/t0003.check b/test/files/neg/t0003.check
index fb5bb5671d..1913dde9dd 100644
--- a/test/files/neg/t0003.check
+++ b/test/files/neg/t0003.check
@@ -1,6 +1,6 @@
t0003.scala:2: error: type mismatch;
- found : (A) => (B) => B
- required: (A) => B
+ found : A => B => B
+ required: A => B
def foo[A, B, C](l: List[A], f: A => B=>B, g: B=>B=>C): List[C] = l map (g compose f)
^
one error found
diff --git a/test/files/neg/t0015.check b/test/files/neg/t0015.check
index eb25fc46c8..43adc22f72 100644
--- a/test/files/neg/t0015.check
+++ b/test/files/neg/t0015.check
@@ -1,6 +1,6 @@
t0015.scala:5: error: type mismatch;
found : () => Nothing
- required: (Nothing) => ?
+ required: Nothing => ?
Nil.map(f _)
^
one error found
diff --git a/test/files/neg/t0117.check b/test/files/neg/t0117.check
index fd6af54e77..579cf883a7 100644
--- a/test/files/neg/t0117.check
+++ b/test/files/neg/t0117.check
@@ -1,4 +1,4 @@
-t0117.scala:2: error: implementation restriction: traits may not select fields or methods from to super[C] where C is a class
+t0117.scala:2: error: Implementation restriction: traits may not select fields or methods from super[C] where C is a class
trait B extends A { println(super[A].a) }
^
one error found
diff --git a/test/files/neg/t0117.scala b/test/files/neg/t0117.scala
index dd200b1cf9..c73227d26d 100644
--- a/test/files/neg/t0117.scala
+++ b/test/files/neg/t0117.scala
@@ -1,6 +1,6 @@
class A { def a = 0 }
trait B extends A { println(super[A].a) }
-object Test extends Application {
+object Test extends App {
new B {}
}
-
+
diff --git a/test/files/neg/t0152.check b/test/files/neg/t0152.check
index 84f78dc83c..a7909bf14d 100644
--- a/test/files/neg/t0152.check
+++ b/test/files/neg/t0152.check
@@ -1,6 +1,6 @@
t0152.scala:10: error: illegal inheritance;
object boom inherits different type instances of class Value:
-Value[Int] and Value[java.lang.String]
+Value[Int] and Value[String]
object boom extends Value[java.lang.String]("foo") with PlusOne
^
one error found
diff --git a/test/files/neg/t0152.scala b/test/files/neg/t0152.scala
index eef69bf767..dc77ac31a3 100644
--- a/test/files/neg/t0152.scala
+++ b/test/files/neg/t0152.scala
@@ -6,8 +6,8 @@ trait PlusOne extends Value[Int] {
override def value = super.value + 1
}
-object Test extends Application {
+object Test extends App {
object boom extends Value[java.lang.String]("foo") with PlusOne
-
+
println(boom.value) // class cast exception!
}
diff --git a/test/files/neg/t0218.scala b/test/files/neg/t0218.scala
index 282e85e814..3d1f52e39a 100644
--- a/test/files/neg/t0218.scala
+++ b/test/files/neg/t0218.scala
@@ -1,4 +1,4 @@
-trait APQ {
+trait APQ {
class Placement {
}
@@ -6,7 +6,7 @@ trait APQ {
type PP = P
- def pq(numQueens: int, numRows: int) : List[Placement] = {
- List(new PP)
+ def pq(numQueens: Int, numRows: Int) : List[Placement] = {
+ List(new PP)
}
}
diff --git a/test/files/neg/t0226.check b/test/files/neg/t0226.check
index e27ffbc1e1..247f1f2443 100644
--- a/test/files/neg/t0226.check
+++ b/test/files/neg/t0226.check
@@ -4,8 +4,7 @@ t0226.scala:5: error: not found: type A1
t0226.scala:5: error: not found: type A1
(implicit _1: Foo[List[A1]], _2: Foo[A2]): Foo[Tuple2[List[A1], A2]] =
^
-t0226.scala:8: error: diverging implicit expansion for type Test.this.Foo[((List[Char], Int), (object Nil, Int))]
-starting with method list2Foo in class Test
+t0226.scala:8: error: could not find implicit value for parameter rep: Test.this.Foo[((List[Char], Int), (scala.collection.immutable.Nil.type, Int))]
foo(((List('b'), 3), (Nil, 4)))
^
three errors found
diff --git a/test/files/neg/t0259.scala b/test/files/neg/t0259.scala
index 0975dec58e..29aef70112 100644
--- a/test/files/neg/t0259.scala
+++ b/test/files/neg/t0259.scala
@@ -3,4 +3,4 @@ class TestCase3() {
def this( groups: (String, Int)*) = this()
def this( groups: String*) = this()
}
-object Main extends TestCase3 with Application
+object Main extends TestCase3 with App
diff --git a/test/files/neg/t0418.check b/test/files/neg/t0418.check
new file mode 100644
index 0000000000..4e9ad2f9ae
--- /dev/null
+++ b/test/files/neg/t0418.check
@@ -0,0 +1,7 @@
+t0418.scala:2: error: not found: value Foo12340771
+ null match { case Foo12340771.Bar(x) => x }
+ ^
+t0418.scala:2: error: not found: value x
+ null match { case Foo12340771.Bar(x) => x }
+ ^
+two errors found
diff --git a/test/files/neg/bug418.scala b/test/files/neg/t0418.scala
index 67007010d4..67007010d4 100644
--- a/test/files/neg/bug418.scala
+++ b/test/files/neg/t0418.scala
diff --git a/test/files/neg/t0503.scala b/test/files/neg/t0503.scala
index 322e1ad132..a9b5dcb1dd 100644
--- a/test/files/neg/t0503.scala
+++ b/test/files/neg/t0503.scala
@@ -1,3 +1,3 @@
val x = new { } with { }
-trait A
+trait A
val y = new { } with A
diff --git a/test/files/neg/t0513.check b/test/files/neg/t0513.check
new file mode 100644
index 0000000000..edc0c9ab67
--- /dev/null
+++ b/test/files/neg/t0513.check
@@ -0,0 +1,7 @@
+t0513.scala:5: error: type arguments [Nothing,Int] do not conform to class Y's type parameter bounds [T1,T2 <: T1]
+ val test2 = Test[Y[Nothing, Int]] // No error
+ ^
+t0513.scala:5: error: type arguments [Nothing,Int] do not conform to class Y's type parameter bounds [T1,T2 <: T1]
+ val test2 = Test[Y[Nothing, Int]] // No error
+ ^
+two errors found
diff --git a/test/files/neg/t0513.scala b/test/files/neg/t0513.scala
new file mode 100644
index 0000000000..0193483cab
--- /dev/null
+++ b/test/files/neg/t0513.scala
@@ -0,0 +1,6 @@
+object Test {
+ case class Y[T1, T2 <: T1]()
+ //val test = Y[Nothing, Int] // Compiler error
+ case class Test[T]()
+ val test2 = Test[Y[Nothing, Int]] // No error
+}
diff --git a/test/files/neg/t0528neg.scala b/test/files/neg/t0528neg.scala
index 911745b763..d19bdac730 100644
--- a/test/files/neg/t0528neg.scala
+++ b/test/files/neg/t0528neg.scala
@@ -3,11 +3,11 @@ trait Sequ[+A] {
}
class RichStr extends Sequ[Char] {
- // override to a primitve array
+ // override to a primitive array
def toArray: Array[Char] = new Array[Char](10)
}
-object Foo extends Application {
+object Foo extends App {
val x: RichStr = new RichStr
println(x.toArray) // call directly
diff --git a/test/files/neg/t0565.check b/test/files/neg/t0565.check
new file mode 100644
index 0000000000..c5a64d0e53
--- /dev/null
+++ b/test/files/neg/t0565.check
@@ -0,0 +1,4 @@
+t0565.scala:8: error: Parameter type in structural refinement may not refer to a type member of that refinement
+ def z (w : T) : T } =
+ ^
+one error found
diff --git a/test/pending/run/t0565.scala b/test/files/neg/t0565.scala
index eb6e32e644..53059a4e00 100644
--- a/test/pending/run/t0565.scala
+++ b/test/files/neg/t0565.scala
@@ -1,4 +1,4 @@
-object Test extends Application {
+object Test extends App {
class MacGuffin
diff --git a/test/files/neg/t0673.check b/test/files/neg/t0673.check
index cc67e994f4..fd27afc23f 100644
--- a/test/files/neg/t0673.check
+++ b/test/files/neg/t0673.check
@@ -1,4 +1,4 @@
-Test.scala:2: error: object InnerClass is not a value
+Test.scala:2: error: object JavaClass.InnerClass is not a value
val x = JavaClass.InnerClass
^
one error found
diff --git a/test/files/neg/t0699.check b/test/files/neg/t0699.check
index c944da8c10..45d3e849cc 100644
--- a/test/files/neg/t0699.check
+++ b/test/files/neg/t0699.check
@@ -1,10 +1,10 @@
-B.scala:2: error: illegal inheritance from sealed trait T
+B.scala:2: error: illegal inheritance from sealed trait T: t0699/B.scala != t0699/A.scala
trait T1 extends A.T
^
-B.scala:3: error: illegal inheritance from sealed class C
+B.scala:3: error: illegal inheritance from sealed class C: t0699/B.scala != t0699/A.scala
trait T2 extends A.C
^
-B.scala:4: error: illegal inheritance from sealed class C
+B.scala:4: error: illegal inheritance from sealed class C: t0699/B.scala != t0699/A.scala
class C1 extends A.C
^
three errors found
diff --git a/test/files/neg/t0764.check b/test/files/neg/t0764.check
index 9f0cedc69b..0788db7f6e 100644
--- a/test/files/neg/t0764.check
+++ b/test/files/neg/t0764.check
@@ -1,5 +1,5 @@
t0764.scala:13: error: type mismatch;
- found : java.lang.Object with Node{type T = _1.type} where val _1: Node{type T = NextType}
+ found : Object with Node{type T = _1.type} where val _1: Node{type T = NextType}
required: Node{type T = Main.this.AType}
new Main[AType]( (value: AType).prepend )
^
diff --git a/test/files/neg/t0764.scala b/test/files/neg/t0764.scala
index daeeb21d91..9aebe04b79 100644
--- a/test/files/neg/t0764.scala
+++ b/test/files/neg/t0764.scala
@@ -9,6 +9,6 @@ trait Node extends NotNull { outer =>
class Main[NextType <: Node](value: Node { type T = NextType })
extends Top[Node { type T = NextType }] {
-
+
new Main[AType]( (value: AType).prepend )
}
diff --git a/test/files/neg/t0816.check b/test/files/neg/t0816.check
new file mode 100644
index 0000000000..48f37c1414
--- /dev/null
+++ b/test/files/neg/t0816.check
@@ -0,0 +1,4 @@
+t0816.scala:5: error: case class Ctest has case ancestor Btest, but case-to-case inheritance is prohibited. To overcome this limitation, use extractors to pattern match on non-leaf nodes.
+case class Ctest(override val data: String) extends Btest(data, true)
+ ^
+one error found
diff --git a/test/files/neg/t0816.scala b/test/files/neg/t0816.scala
new file mode 100644
index 0000000000..738a634166
--- /dev/null
+++ b/test/files/neg/t0816.scala
@@ -0,0 +1,12 @@
+abstract class Atest(val data: String)
+
+case class Btest(override val data: String, val b: Boolean) extends Atest(data)
+
+case class Ctest(override val data: String) extends Btest(data, true)
+
+class testCaseClass {
+ def test(x: Atest) = x match {
+ case Ctest(data) => Console.println("C")
+ case Btest(data, b) => Console.println("B")
+ }
+}
diff --git a/test/files/neg/t0851.check b/test/files/neg/t0851.check
deleted file mode 100644
index 61d2a98632..0000000000
--- a/test/files/neg/t0851.check
+++ /dev/null
@@ -1,9 +0,0 @@
-t0851.scala:14: error: not enough arguments for method apply: (v1: Int,v2: String)java.lang.String in trait Function2.
-Unspecified value parameter v2.
- println(f(1))
- ^
-t0851.scala:22: error: not enough arguments for method apply: (v1: Int,v2: String)java.lang.String in trait Function2.
-Unspecified value parameter v2.
- println(fn(1))
- ^
-two errors found
diff --git a/test/files/neg/t0851.scala b/test/files/neg/t0851.scala
deleted file mode 100644
index b28be2c697..0000000000
--- a/test/files/neg/t0851.scala
+++ /dev/null
@@ -1,25 +0,0 @@
-package test
-
-// This gives now type errors about missing parameters, which seems OK to me.
-// The tests just make sure it does not crash
-
-object test1 {
- case class Foo[T,T2](f : (T,T2) => String) extends (((T,T2)) => String){
- def apply(t : T) = (s:T2) => f(t,s)
- def apply(p : (T,T2)) = f(p._1,p._2)
- }
- implicit def g[T](f : (T,String) => String) = Foo(f)
- def main(args : Array[String]) : Unit = {
- val f = (x:Int,s:String) => s + x
- println(f(1))
- ()
- }
-}
-object Main {
- def main(args : Array[String]) {
- val fn = (a : Int, str : String) => "a: " + a + ", str: " + str
- implicit def fx[T](f : (T,String) => String) = (x:T) => f(x,null)
- println(fn(1))
- ()
- }
-}
diff --git a/test/files/neg/t0903.check b/test/files/neg/t0903.check
index db4cd94d2c..2dd05cd3ee 100644
--- a/test/files/neg/t0903.check
+++ b/test/files/neg/t0903.check
@@ -1,4 +1,4 @@
-t0903.scala:3: error: reassignment to val
+t0903.scala:3: error: value += is not a member of Int
x += 1
^
t0903.scala:4: error: reassignment to val
diff --git a/test/files/neg/t1009.scala b/test/files/neg/t1009.scala
index b3a12dc0f6..a260397d28 100644
--- a/test/files/neg/t1009.scala
+++ b/test/files/neg/t1009.scala
@@ -1,3 +1,3 @@
-object Foo extends Application{
+object Foo extends App{
def `` = "fish"
}
diff --git a/test/files/neg/t1010.check b/test/files/neg/t1010.check
new file mode 100644
index 0000000000..2cc8f9d986
--- /dev/null
+++ b/test/files/neg/t1010.check
@@ -0,0 +1,6 @@
+t1010.scala:14: error: type mismatch;
+ found : MailBox#Message
+ required: _3.in.Message where val _3: Actor
+ unstable.send(msg) // in.Message becomes unstable.Message, but that's ok since Message is a concrete type member
+ ^
+one error found
diff --git a/test/files/neg/bug1010.scala b/test/files/neg/t1010.scala
index 7a1e6615e5..7a1e6615e5 100644
--- a/test/files/neg/bug1010.scala
+++ b/test/files/neg/t1010.scala
diff --git a/test/files/neg/t1011.check b/test/files/neg/t1011.check
new file mode 100644
index 0000000000..d9c8123549
--- /dev/null
+++ b/test/files/neg/t1011.check
@@ -0,0 +1,4 @@
+t1011.scala:8: error: not found: value entity
+ <dl><code>{Text(entity)}</code>
+ ^
+one error found
diff --git a/test/files/neg/t1011.scala b/test/files/neg/t1011.scala
new file mode 100644
index 0000000000..57a6ad7b45
--- /dev/null
+++ b/test/files/neg/t1011.scala
@@ -0,0 +1,127 @@
+package test;
+import scala.xml._;
+
+abstract class Test {
+ //val entity : String;
+ def primitiveHeader : NodeSeq =
+ Group({
+ <dl><code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code>
+ <code>{Text(entity)}</code></dl>
+ } ++ // 3 seconds
+ {}++ // 5 seconds
+ {}++ // 10 seconds
+ {}++ // 20 seconds
+ {}++ // 40 seconds
+ {}++ // 40 seconds
+ {}++ // 40 seconds
+ {}++ // 40 seconds
+ {}++ // 40 seconds
+ {}++ // 40 seconds
+ {}++ // 40 seconds
+ {}++ // 40 seconds
+ {}++ // 40 seconds
+ {}++ // 40 seconds
+ {}++ // 40 seconds
+ {}++ // 40 seconds
+ {}++ // 40 seconds
+ {}++ // 5 seconds
+ {}++ // 10 seconds
+ {}++ // 20 seconds
+ {}++ // 40 seconds
+ {}++ // 40 seconds
+ {}++ // 40 seconds
+ {}++ // 40 seconds
+ {}++ // 40 seconds
+ {}++ // 40 seconds
+ {}++ // 40 seconds
+ {}++ // 40 seconds
+ {}++ // 40 seconds
+ {}++ // 40 seconds
+ {}++ // 40 seconds
+ {}++ // 40 seconds
+ {}++ // 40 seconds
+ {}++ // 5 seconds
+ {}++ // 10 seconds
+ {}++ // 20 seconds
+ {}++ // 40 seconds
+ {}++ // 40 seconds
+ {}++ // 40 seconds
+ {}++ // 40 seconds
+ {}++ // 40 seconds
+ {}++ // 40 seconds
+ {}++ // 40 seconds
+ {}++ // 40 seconds
+ {}++ // 40 seconds
+ {}++ // 40 seconds
+ {}++ // 40 seconds
+ {}++ // 40 seconds
+ {}++ // 40 seconds
+ <hr/>);
+}
diff --git a/test/files/neg/t1017.check b/test/files/neg/t1017.check
new file mode 100644
index 0000000000..52101c7f6e
--- /dev/null
+++ b/test/files/neg/t1017.check
@@ -0,0 +1,4 @@
+t1017.scala:3: error: not found: value foo
+<x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>{ foo }</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x>
+ ^
+one error found
diff --git a/test/files/neg/bug1017.scala b/test/files/neg/t1017.scala
index e389f308c3..e389f308c3 100644
--- a/test/files/neg/bug1017.scala
+++ b/test/files/neg/t1017.scala
diff --git a/test/files/neg/t1038.check b/test/files/neg/t1038.check
new file mode 100644
index 0000000000..b191b89ad1
--- /dev/null
+++ b/test/files/neg/t1038.check
@@ -0,0 +1,5 @@
+t1038.scala:4: error: not enough arguments for constructor X: (x: Int)X.
+Unspecified value parameter x.
+ val a = new X
+ ^
+one error found
diff --git a/test/files/neg/bug1038.scala b/test/files/neg/t1038.scala
index 9fdcae207f..9fdcae207f 100644
--- a/test/files/neg/bug1038.scala
+++ b/test/files/neg/t1038.scala
diff --git a/test/files/neg/t1041.check b/test/files/neg/t1041.check
new file mode 100644
index 0000000000..d82f3a8586
--- /dev/null
+++ b/test/files/neg/t1041.check
@@ -0,0 +1,6 @@
+t1041.scala:3: error: type mismatch;
+ found : Int(1)
+ required: List[Int]
+ case 1 => 4
+ ^
+one error found
diff --git a/test/files/neg/bug1041.scala b/test/files/neg/t1041.scala
index a5895c68a9..a5895c68a9 100644
--- a/test/files/neg/bug1041.scala
+++ b/test/files/neg/t1041.scala
diff --git a/test/files/neg/t1106.check b/test/files/neg/t1106.check
new file mode 100644
index 0000000000..f81d0c6025
--- /dev/null
+++ b/test/files/neg/t1106.check
@@ -0,0 +1,7 @@
+t1106.scala:2: error: expected class or object definition
+val p = new Par[String]
+^
+t1106.scala:5: error: expected class or object definition
+new Foo[p.type](p) // crashes compiler
+^
+two errors found
diff --git a/test/files/neg/bug1106.scala b/test/files/neg/t1106.scala
index a218eee7a1..a218eee7a1 100644
--- a/test/files/neg/bug1106.scala
+++ b/test/files/neg/t1106.scala
diff --git a/test/files/neg/t1112.check b/test/files/neg/t1112.check
new file mode 100644
index 0000000000..e69be3ef2c
--- /dev/null
+++ b/test/files/neg/t1112.check
@@ -0,0 +1,4 @@
+t1112.scala:12: error: too many arguments for method call: (p: Int)(f: => () => Unit)Unit
+ call(0,() => System.out.println("here we are"))
+ ^
+one error found
diff --git a/test/files/neg/t1112.scala b/test/files/neg/t1112.scala
new file mode 100644
index 0000000000..b2a374c785
--- /dev/null
+++ b/test/files/neg/t1112.scala
@@ -0,0 +1,14 @@
+// checks that error doesn't crash the compiler
+// (due to isFunctionType normalizing Type1 to a function type,
+// but then the code that used that test not using the normalized type for further operations)
+class Test {
+ type Type1 = () => Unit
+
+ def call(p: Int)(f: => Type1) = {
+ f()
+ }
+
+ def run = {
+ call(0,() => System.out.println("here we are"))
+ }
+}
diff --git a/test/files/neg/t112706A.check b/test/files/neg/t112706A.check
new file mode 100644
index 0000000000..30d0c3ec91
--- /dev/null
+++ b/test/files/neg/t112706A.check
@@ -0,0 +1,6 @@
+t112706A.scala:5: error: constructor cannot be instantiated to expected type;
+ found : (T1, T2)
+ required: String
+ case Tuple2(node,_) =>
+ ^
+one error found
diff --git a/test/files/neg/t112706A.scala b/test/files/neg/t112706A.scala
new file mode 100644
index 0000000000..b7799af96d
--- /dev/null
+++ b/test/files/neg/t112706A.scala
@@ -0,0 +1,8 @@
+package test;
+trait Test {
+ def foo(p : List[Tuple2[String,String]]) = {
+ for (t <- p) t._1 match {
+ case Tuple2(node,_) =>
+ }
+ }
+}
diff --git a/test/files/neg/t1181.check b/test/files/neg/t1181.check
new file mode 100644
index 0000000000..3724752a85
--- /dev/null
+++ b/test/files/neg/t1181.check
@@ -0,0 +1,8 @@
+t1181.scala:8: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+ case (Nil, Nil) => map
+ ^
+t1181.scala:9: error: missing parameter type
+ _ => buildMap(map.updated(keyList.head, valueList.head), keyList.tail, valueList.tail)
+ ^
+one warning found
+one error found
diff --git a/test/files/neg/t1181.scala b/test/files/neg/t1181.scala
new file mode 100644
index 0000000000..5e5fceacc8
--- /dev/null
+++ b/test/files/neg/t1181.scala
@@ -0,0 +1,12 @@
+package test
+
+import scala.collection.immutable.Map
+
+class CompilerTest(val valueList: List[Symbol]) {
+ def buildMap(map: Map[Symbol, Symbol], keyList: List[Symbol], valueList: List[Symbol]): Map[Symbol, Symbol] = {
+ (keyList, valueList) match {
+ case (Nil, Nil) => map
+ _ => buildMap(map.updated(keyList.head, valueList.head), keyList.tail, valueList.tail)
+ }
+ }
+}
diff --git a/test/files/neg/t1183.check b/test/files/neg/t1183.check
new file mode 100644
index 0000000000..c402829c70
--- /dev/null
+++ b/test/files/neg/t1183.check
@@ -0,0 +1,17 @@
+t1183.scala:6: error: name clash: class Foo defines object Baz
+and its companion object Foo also defines class Baz
+ object Baz
+ ^
+t1183.scala:7: error: name clash: class Foo defines class Bam
+and its companion object Foo also defines object Bam
+ class Bam
+ ^
+t1183.scala:8: error: name clash: class Foo defines object Bar
+and its companion object Foo also defines class Bar
+ object Bar
+ ^
+t1183.scala:9: error: name clash: class Foo defines class Bar
+and its companion object Foo also defines class Bar
+ case class Bar(i:Int)
+ ^
+four errors found
diff --git a/test/files/neg/t1183.scala b/test/files/neg/t1183.scala
new file mode 100644
index 0000000000..024c4abd54
--- /dev/null
+++ b/test/files/neg/t1183.scala
@@ -0,0 +1,34 @@
+// bug 1183 from in the old tracker, not in Trac
+
+object Test {
+
+ class Foo(j:Int) {
+ object Baz
+ class Bam
+ object Bar
+ case class Bar(i:Int)
+ }
+
+
+ class Test717 {
+ val foo1 = new Foo(1)
+
+ def runTest() = {
+ val res = (foo1.Bar(2):Any) match {
+ case foo1.Bar(2) => true // (1)
+ }
+ require(res)
+ }
+ }
+
+ // (2)
+ object Foo {
+ class Bar(val x : String)
+ class Baz
+ object Bam
+ object Bar
+
+ def unapply(s : String) : Option[Bar] = Some(new Bar(s))
+ }
+
+}
diff --git a/test/files/neg/t1215.check b/test/files/neg/t1215.check
index 77a9304b48..1f9dd6bf38 100644
--- a/test/files/neg/t1215.check
+++ b/test/files/neg/t1215.check
@@ -1,4 +1,4 @@
t1215.scala:2: error: value += is not a member of Int
val x = 1 += 1
- ^
+ ^
one error found
diff --git a/test/files/neg/t1224.check b/test/files/neg/t1224.check
new file mode 100644
index 0000000000..fb61275911
--- /dev/null
+++ b/test/files/neg/t1224.check
@@ -0,0 +1,4 @@
+t1224.scala:4: error: illegal cyclic reference involving type T
+ type T >: C[T] <: C[C[T]]
+ ^
+one error found
diff --git a/test/files/neg/bug1224.scala b/test/files/neg/t1224.scala
index 35e01fa379..35e01fa379 100644
--- a/test/files/neg/bug1224.scala
+++ b/test/files/neg/t1224.scala
diff --git a/test/files/neg/t1241.check b/test/files/neg/t1241.check
new file mode 100644
index 0000000000..e1ccf4172f
--- /dev/null
+++ b/test/files/neg/t1241.check
@@ -0,0 +1,4 @@
+t1241.scala:5: error: class type required but AnyRef{def hello(): Unit} found
+ val x4 = new T { def hello() { println("4") } } // error!
+ ^
+one error found
diff --git a/test/files/neg/t1241.scala b/test/files/neg/t1241.scala
new file mode 100644
index 0000000000..e115917136
--- /dev/null
+++ b/test/files/neg/t1241.scala
@@ -0,0 +1,8 @@
+object test extends App {
+ // more..
+ type T = { def hello() }
+ //val x4 = new AnyRef { def hello() { println("4") } } // ok!
+ val x4 = new T { def hello() { println("4") } } // error!
+ x4.hello()
+ // more..
+}
diff --git a/test/files/neg/t1275.check b/test/files/neg/t1275.check
new file mode 100644
index 0000000000..a930e25ab3
--- /dev/null
+++ b/test/files/neg/t1275.check
@@ -0,0 +1,6 @@
+t1275.scala:11: error: type mismatch;
+ found : xs.MyType[a]
+ required: s
+ = xs f
+ ^
+one error found
diff --git a/test/files/neg/t1275.scala b/test/files/neg/t1275.scala
new file mode 100644
index 0000000000..1175b30763
--- /dev/null
+++ b/test/files/neg/t1275.scala
@@ -0,0 +1,15 @@
+object Test {
+ trait Seq[+t] {
+ type MyType[+t] <: Seq[t]
+
+ def f: MyType[t]
+ }
+
+ // illegal abstract type member refinement: changes the arity of MyType
+ // the error is pretty strange, since the compiler forms the illegal type xs.MyType[a] anyway
+ def span[a, s <: Seq[a] { type MyType/*look ma, no type parameters!*/ <: s } ](xs: s): s
+ = xs f
+// ^
+// found : xs.MyType[a]
+// required: s
+} \ No newline at end of file
diff --git a/test/files/neg/t1286.check b/test/files/neg/t1286.check
new file mode 100644
index 0000000000..c937fb9cf1
--- /dev/null
+++ b/test/files/neg/t1286.check
@@ -0,0 +1,9 @@
+a.scala:1: error: Companions 'object Foo' and 'trait Foo' must be defined in same file:
+ Found in t1286/b.scala and t1286/a.scala
+trait Foo {
+ ^
+b.scala:1: error: Companions 'trait Foo' and 'object Foo' must be defined in same file:
+ Found in t1286/a.scala and t1286/b.scala
+object Foo extends Foo {
+ ^
+two errors found
diff --git a/test/files/neg/bug1286/a.scala b/test/files/neg/t1286/a.scala
index 85ffe3bb58..85ffe3bb58 100644
--- a/test/files/neg/bug1286/a.scala
+++ b/test/files/neg/t1286/a.scala
diff --git a/test/files/neg/bug1286/b.scala b/test/files/neg/t1286/b.scala
index 48f3b440c2..48f3b440c2 100644
--- a/test/files/neg/bug1286/b.scala
+++ b/test/files/neg/t1286/b.scala
diff --git a/test/files/neg/t1364.check b/test/files/neg/t1364.check
new file mode 100644
index 0000000000..78375333c2
--- /dev/null
+++ b/test/files/neg/t1364.check
@@ -0,0 +1,5 @@
+t1364.scala:9: error: overriding type T in trait A with bounds >: Nothing <: AnyRef{type S[-U]};
+ type T has incompatible type
+ type T = { type S[U] = U }
+ ^
+one error found
diff --git a/test/files/neg/t1364.scala b/test/files/neg/t1364.scala
new file mode 100644
index 0000000000..6b02580fa5
--- /dev/null
+++ b/test/files/neg/t1364.scala
@@ -0,0 +1,15 @@
+trait A {
+ type T <: { type S[-U] }
+ val x : T
+ def y : x.S[AnyRef]
+ def z : x.S[String] = y
+}
+
+object B extends A {
+ type T = { type S[U] = U }
+ val x : T = null
+ def y : x.S[AnyRef] = new AnyRef
+ def t : String = z
+}
+
+// println(B.t) \ No newline at end of file
diff --git a/test/files/neg/t1422.check b/test/files/neg/t1422.check
new file mode 100644
index 0000000000..362d7ef36b
--- /dev/null
+++ b/test/files/neg/t1422.check
@@ -0,0 +1,7 @@
+t1422.scala:1: error: private[this] not allowed for case class parameters
+case class A(private[this] val foo:String) { }
+ ^
+t1422.scala:1: error: value foo in class A cannot be accessed in A
+case class A(private[this] val foo:String) { }
+ ^
+two errors found
diff --git a/test/files/neg/t1422.scala b/test/files/neg/t1422.scala
new file mode 100644
index 0000000000..af308244cd
--- /dev/null
+++ b/test/files/neg/t1422.scala
@@ -0,0 +1 @@
+case class A(private[this] val foo:String) { }
diff --git a/test/files/neg/t1431.check b/test/files/neg/t1431.check
new file mode 100644
index 0000000000..a17ba73243
--- /dev/null
+++ b/test/files/neg/t1431.check
@@ -0,0 +1,4 @@
+t1431.scala:8: error: class type required but X#Factory found
+ def fun[X<:MyTrait with Singleton]() = new X#Factory().value
+ ^
+one error found
diff --git a/test/files/neg/t1431.scala b/test/files/neg/t1431.scala
new file mode 100644
index 0000000000..aff1dbc014
--- /dev/null
+++ b/test/files/neg/t1431.scala
@@ -0,0 +1,10 @@
+object Bug_New {
+ trait MyTrait {
+ type Alpha
+ def the_value : Alpha
+ class Factory() {def value : Alpha = the_value}
+ }
+
+ def fun[X<:MyTrait with Singleton]() = new X#Factory().value
+}
+
diff --git a/test/files/neg/t1432.check b/test/files/neg/t1432.check
new file mode 100644
index 0000000000..180cb05e67
--- /dev/null
+++ b/test/files/neg/t1432.check
@@ -0,0 +1,6 @@
+t1432.scala:10: error: type mismatch;
+ found : (Int, Bug_NoUnique.Wrap[Bug_NoUnique.Wrap[Unit]] => Double)
+ required: (Int, Unit => Double)
+ def test(x : TypeCon[Wrap[Unit]]) : TypeCon[Unit] = wrap(x)
+ ^
+one error found
diff --git a/test/files/neg/t1432.scala b/test/files/neg/t1432.scala
new file mode 100644
index 0000000000..638f36554f
--- /dev/null
+++ b/test/files/neg/t1432.scala
@@ -0,0 +1,12 @@
+object Bug_NoUnique {
+
+ type TypeCon[Env] = (Int, Env=>Double)
+
+ case class Wrap[E](parent:E) {}
+
+ def wrap[E,A,Y](v : (A,E=>Y)) : (A,Wrap[E]=>Y) =
+ throw new Error("Body here")
+
+ def test(x : TypeCon[Wrap[Unit]]) : TypeCon[Unit] = wrap(x)
+}
+
diff --git a/test/files/neg/t1477.check b/test/files/neg/t1477.check
new file mode 100644
index 0000000000..e497637857
--- /dev/null
+++ b/test/files/neg/t1477.check
@@ -0,0 +1,5 @@
+t1477.scala:13: error: overriding type V in trait C with bounds >: Nothing <: Middle.this.D;
+ type V is a volatile type; cannot override a type with non-volatile upper bound
+ type V <: (D with U)
+ ^
+one error found
diff --git a/test/pending/neg/t1477.scala b/test/files/neg/t1477.scala
index 0cc0cd5f7a..ab13f14b06 100644
--- a/test/pending/neg/t1477.scala
+++ b/test/files/neg/t1477.scala
@@ -1,4 +1,4 @@
-object Test extends Application {
+object Test extends App {
trait A
trait B extends A
@@ -8,7 +8,7 @@ object Test extends Application {
type V <: D
val y: V#T = new B { }
}
-
+
trait Middle extends C {
type V <: (D with U)
}
diff --git a/test/files/neg/t1523.check b/test/files/neg/t1523.check
new file mode 100644
index 0000000000..d2489f2602
--- /dev/null
+++ b/test/files/neg/t1523.check
@@ -0,0 +1,4 @@
+t1523.scala:4: error: too many arguments for method bug: (x: Any)Any
+ def go() = bug("a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a")
+ ^
+one error found
diff --git a/test/files/neg/t1523.scala b/test/files/neg/t1523.scala
new file mode 100644
index 0000000000..b8754f4e15
--- /dev/null
+++ b/test/files/neg/t1523.scala
@@ -0,0 +1,5 @@
+object test {
+ def bug(x: Any) = x
+
+ def go() = bug("a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a")
+}
diff --git a/test/files/neg/t1548.check b/test/files/neg/t1548.check
new file mode 100644
index 0000000000..7f5a3f44e2
--- /dev/null
+++ b/test/files/neg/t1548.check
@@ -0,0 +1,4 @@
+S.scala:2: error: method defaultMethod overrides nothing
+ override def defaultMethod = "Boo!"
+ ^
+one error found
diff --git a/test/files/neg/t1548/J.java b/test/files/neg/t1548/J.java
new file mode 100644
index 0000000000..01dd56d348
--- /dev/null
+++ b/test/files/neg/t1548/J.java
@@ -0,0 +1,12 @@
+package javapkg;
+
+public class J {
+
+ String defaultMethod() {
+ return "foo";
+ }
+
+ public String toString() {
+ return "JavaClass: "+defaultMethod();
+ }
+} \ No newline at end of file
diff --git a/test/files/neg/t1548/S.scala b/test/files/neg/t1548/S.scala
new file mode 100644
index 0000000000..086b78029d
--- /dev/null
+++ b/test/files/neg/t1548/S.scala
@@ -0,0 +1,3 @@
+class ScalaClass extends javapkg.J {
+ override def defaultMethod = "Boo!"
+}
diff --git a/test/files/neg/t1623.check b/test/files/neg/t1623.check
new file mode 100644
index 0000000000..251039ad30
--- /dev/null
+++ b/test/files/neg/t1623.check
@@ -0,0 +1,4 @@
+t1623.scala:11: error: class BImpl cannot be instantiated because it does not conform to its self-type test.BImpl with test.A
+ val b = new BImpl
+ ^
+one error found
diff --git a/test/files/neg/t1623.scala b/test/files/neg/t1623.scala
new file mode 100644
index 0000000000..d02fc2ed9e
--- /dev/null
+++ b/test/files/neg/t1623.scala
@@ -0,0 +1,12 @@
+package test
+
+trait A
+trait B
+
+class BImpl extends B {
+ this: A =>
+}
+
+object Test2 extends App {
+ val b = new BImpl
+}
diff --git a/test/files/neg/t1701.check b/test/files/neg/t1701.check
index 782b690bf0..d603e62e5a 100644
--- a/test/files/neg/t1701.check
+++ b/test/files/neg/t1701.check
@@ -1,4 +1,4 @@
-t1701.scala:1: error: java.lang.Cloneable does not take type parameters
+t1701.scala:1: error: Cloneable does not take type parameters
class A extends java.lang.Cloneable[String, Option, Int]
^
one error found
diff --git a/test/files/neg/t1705.scala b/test/files/neg/t1705.scala
index fabdca0ec6..bf1fcea815 100644
--- a/test/files/neg/t1705.scala
+++ b/test/files/neg/t1705.scala
@@ -17,7 +17,7 @@ object crashing {
}
}
}
-/*
+/*
Infinite loop in Typer.addLocals. Printing all calls to it:
diff --git a/test/files/neg/t1838.check b/test/files/neg/t1838.check
new file mode 100644
index 0000000000..a476158c7b
--- /dev/null
+++ b/test/files/neg/t1838.check
@@ -0,0 +1,7 @@
+t1838.scala:6: error: `sealed' modifier can be used only for classes
+ sealed val v = 0
+ ^
+t1838.scala:5: error: `sealed' modifier can be used only for classes
+ sealed def f = 0
+ ^
+two errors found
diff --git a/test/files/neg/bug1838.scala b/test/files/neg/t1838.scala
index 36eeb4050a..36eeb4050a 100644
--- a/test/files/neg/bug1838.scala
+++ b/test/files/neg/t1838.scala
diff --git a/test/files/neg/t1845.check b/test/files/neg/t1845.check
new file mode 100644
index 0000000000..7c0bddbc20
--- /dev/null
+++ b/test/files/neg/t1845.check
@@ -0,0 +1,4 @@
+t1845.scala:9: error: illegal cyclic reference involving value <import>
+ val lexical = new StdLexical
+ ^
+one error found
diff --git a/test/files/neg/t1845.scala b/test/files/neg/t1845.scala
new file mode 100644
index 0000000000..dab448b7dd
--- /dev/null
+++ b/test/files/neg/t1845.scala
@@ -0,0 +1,10 @@
+import scala.util.parsing.combinator.syntactical.TokenParsers
+import scala.util.parsing.combinator.lexical.StdLexical
+import scala.util.parsing.combinator.token._
+
+class MyTokenParsers extends TokenParsers {
+ import lexical._
+ type Tokens = StdTokens
+ type Elem = lexical.Token
+ val lexical = new StdLexical
+}
diff --git a/test/files/neg/t1872.check b/test/files/neg/t1872.check
new file mode 100644
index 0000000000..ef84ef79e0
--- /dev/null
+++ b/test/files/neg/t1872.check
@@ -0,0 +1,4 @@
+t1872.scala:3: error: isInstanceOf cannot test if value types are references.
+ def f(x: Int) = x.isInstanceOf[util.Random]
+ ^
+one error found
diff --git a/test/files/neg/t1872.scala b/test/files/neg/t1872.scala
new file mode 100644
index 0000000000..0ebee0b32d
--- /dev/null
+++ b/test/files/neg/t1872.scala
@@ -0,0 +1,4 @@
+class A {
+ // a true result here would necessitate profound soul searching
+ def f(x: Int) = x.isInstanceOf[util.Random]
+} \ No newline at end of file
diff --git a/test/files/neg/t1878.check b/test/files/neg/t1878.check
new file mode 100644
index 0000000000..f3a6701d41
--- /dev/null
+++ b/test/files/neg/t1878.check
@@ -0,0 +1,15 @@
+t1878.scala:3: error: _* may only come last
+ val err1 = "" match { case Seq(f @ _*, ',') => f }
+ ^
+t1878.scala:3: error: scrutinee is incompatible with pattern type;
+ found : Seq[A]
+ required: String
+ val err1 = "" match { case Seq(f @ _*, ',') => f }
+ ^
+t1878.scala:9: error: _* may only come last
+ val List(List(_*, arg2), _) = List(List(1,2,3), List(4,5,6))
+ ^
+t1878.scala:13: error: _* may only come last
+ case <p> { _* } </p> =>
+ ^
+four errors found
diff --git a/test/files/neg/t1878.scala b/test/files/neg/t1878.scala
new file mode 100644
index 0000000000..5278fbb7bd
--- /dev/null
+++ b/test/files/neg/t1878.scala
@@ -0,0 +1,15 @@
+object Test extends App {
+ // illegal
+ val err1 = "" match { case Seq(f @ _*, ',') => f }
+
+ // no error
+ val List(List(arg1, _*), _) = List(List(1,2,3), List(4,5,6))
+
+ // illegal
+ val List(List(_*, arg2), _) = List(List(1,2,3), List(4,5,6))
+
+ // illegal - bug #1764
+ null match {
+ case <p> { _* } </p> =>
+ }
+}
diff --git a/test/files/neg/t1909b.check b/test/files/neg/t1909b.check
new file mode 100644
index 0000000000..9a683643ae
--- /dev/null
+++ b/test/files/neg/t1909b.check
@@ -0,0 +1,4 @@
+t1909b.scala:4: error: this can be used only in a class, object, or template
+ def bar() = this.z + 5
+ ^
+one error found
diff --git a/test/files/neg/bug1909b.scala b/test/files/neg/t1909b.scala
index 6aa7870478..6aa7870478 100644
--- a/test/files/neg/bug1909b.scala
+++ b/test/files/neg/t1909b.scala
diff --git a/test/files/neg/t1960.check b/test/files/neg/t1960.check
new file mode 100644
index 0000000000..dabf53f126
--- /dev/null
+++ b/test/files/neg/t1960.check
@@ -0,0 +1,4 @@
+t1960.scala:5: error: parameter 'p' requires field but conflicts with p in 'TBase'
+class Aclass (p: Int) extends TBase { def g() { f(p) } }
+ ^
+one error found
diff --git a/test/files/neg/t1960.scala b/test/files/neg/t1960.scala
new file mode 100644
index 0000000000..5311940b5a
--- /dev/null
+++ b/test/files/neg/t1960.scala
@@ -0,0 +1,5 @@
+object ClassFormatErrorExample extends App { new Aclass(1) }
+
+trait TBase { var p:Int = 0; def f(p1: Int) {} }
+
+class Aclass (p: Int) extends TBase { def g() { f(p) } }
diff --git a/test/files/neg/t200.check b/test/files/neg/t200.check
new file mode 100644
index 0000000000..78701f8533
--- /dev/null
+++ b/test/files/neg/t200.check
@@ -0,0 +1,4 @@
+t200.scala:7: error: method foo is defined twice
+ def foo: Int;
+ ^
+one error found
diff --git a/test/files/neg/bug200.scala b/test/files/neg/t200.scala
index 692fe368e2..692fe368e2 100644
--- a/test/files/neg/bug200.scala
+++ b/test/files/neg/t200.scala
diff --git a/test/files/neg/t2031.scala b/test/files/neg/t2031.scala
index e4708c45ac..fde7a603fa 100644
--- a/test/files/neg/t2031.scala
+++ b/test/files/neg/t2031.scala
@@ -1,6 +1,6 @@
import scala.collection.immutable._
-object Test extends Application {
+object Test extends App {
val res0 = TreeSet(1, 2, 3)
//res0.map(x => x)(TreeSet.newBuilder[Int])
diff --git a/test/files/neg/t2070.check b/test/files/neg/t2070.check
new file mode 100644
index 0000000000..bd049409a8
--- /dev/null
+++ b/test/files/neg/t2070.check
@@ -0,0 +1,5 @@
+t2070.scala:8: error: The kind of trait T does not conform to the expected kind of type T[X] in trait A.
+t2070.B.T's type parameters do not match type T's expected parameters: type X (in object B) has one type parameter, but type X (in trait A) has none
+ trait T[X[_]]
+ ^
+one error found
diff --git a/test/files/neg/t2070.scala b/test/files/neg/t2070.scala
new file mode 100644
index 0000000000..c810568edc
--- /dev/null
+++ b/test/files/neg/t2070.scala
@@ -0,0 +1,10 @@
+object t2070 {
+ trait A {
+ type T[X]
+ def f(x : T[Int]) = x
+ }
+
+ object B extends A {
+ trait T[X[_]]
+ }
+}
diff --git a/test/files/neg/t2078.check b/test/files/neg/t2078.check
new file mode 100644
index 0000000000..3cdaa7d27a
--- /dev/null
+++ b/test/files/neg/t2078.check
@@ -0,0 +1,4 @@
+t2078.scala:2: error: contravariant type S occurs in covariant position in type => Object{val x: S} of value f
+ val f = new { val x = y }
+ ^
+one error found
diff --git a/test/files/neg/t2078.scala b/test/files/neg/t2078.scala
new file mode 100644
index 0000000000..342ba088c7
--- /dev/null
+++ b/test/files/neg/t2078.scala
@@ -0,0 +1,9 @@
+class A[-S](y : S) {
+ val f = new { val x = y }
+}
+
+object Test extends App {
+ val a = new A(1)
+ val b = a : A[Nothing]
+ println(b.f.x)
+}
diff --git a/test/files/neg/t2102.check b/test/files/neg/t2102.check
new file mode 100644
index 0000000000..b4f91a5319
--- /dev/null
+++ b/test/files/neg/t2102.check
@@ -0,0 +1,6 @@
+t2102.scala:2: error: type mismatch;
+ found : java.util.Iterator[Int]
+ required: scala.collection.Iterator[_]
+ val x: Iterator[_] = new java.util.ArrayList[Int]().iterator
+ ^
+one error found
diff --git a/test/files/neg/bug2102.scala b/test/files/neg/t2102.scala
index 9c37039039..9c37039039 100644
--- a/test/files/neg/bug2102.scala
+++ b/test/files/neg/t2102.scala
diff --git a/test/files/neg/t2130.check b/test/files/neg/t2130.check
deleted file mode 100644
index 6d6902b121..0000000000
--- a/test/files/neg/t2130.check
+++ /dev/null
@@ -1,4 +0,0 @@
-t2130.scala:4: error: implementation restriction: package object foo cannot contain case class X
- case class X()
- ^
-one error found
diff --git a/test/files/neg/t2130.scala b/test/files/neg/t2130.scala
deleted file mode 100755
index 012698fd2a..0000000000
--- a/test/files/neg/t2130.scala
+++ /dev/null
@@ -1,6 +0,0 @@
-// for now we disallow case class in package objects
-package object foo {
-
- case class X()
-
-}
diff --git a/test/files/neg/t2139.check b/test/files/neg/t2139.check
new file mode 100644
index 0000000000..e26f290761
--- /dev/null
+++ b/test/files/neg/t2139.check
@@ -0,0 +1,6 @@
+t2139.scala:13: error: type mismatch;
+ found : Int(4)
+ required: Nothing
+ val z:Int=(u.f _)(4)
+ ^
+one error found
diff --git a/test/files/neg/t2139.scala b/test/files/neg/t2139.scala
new file mode 100644
index 0000000000..316c0d4411
--- /dev/null
+++ b/test/files/neg/t2139.scala
@@ -0,0 +1,15 @@
+/*
+ NOTE: if inference is changed so that
+ T is inferred to be Int, rather than Nothing,
+ the piece of code below will start to compile OK.
+ In that case, see ticket #2139, and make sure that
+ the generated code will no longer crash!
+*/
+class U {
+ def f[T](x:T):T=x
+}
+object H extends App {
+ val u=new U
+ val z:Int=(u.f _)(4)
+ println("done")
+}
diff --git a/test/files/neg/t2144.check b/test/files/neg/t2144.check
new file mode 100644
index 0000000000..7239f4406e
--- /dev/null
+++ b/test/files/neg/t2144.check
@@ -0,0 +1,4 @@
+t2144.scala:2: error: Parameter type in structural refinement may not refer to an abstract type defined outside that refinement
+ def foo[A](a: A) = new { def bar(x: A): A = x }
+ ^
+one error found
diff --git a/test/files/neg/bug2144.scala b/test/files/neg/t2144.scala
index af9a5e166e..af9a5e166e 100644
--- a/test/files/neg/bug2144.scala
+++ b/test/files/neg/t2144.scala
diff --git a/test/files/neg/t2148.check b/test/files/neg/t2148.check
new file mode 100644
index 0000000000..5113b48e51
--- /dev/null
+++ b/test/files/neg/t2148.check
@@ -0,0 +1,4 @@
+t2148.scala:9: error: type A is not a stable prefix
+ val b = new A with A#A1
+ ^
+one error found
diff --git a/test/files/neg/t2148.scala b/test/files/neg/t2148.scala
new file mode 100644
index 0000000000..c0521d9864
--- /dev/null
+++ b/test/files/neg/t2148.scala
@@ -0,0 +1,10 @@
+class A {
+ var i = 0
+ trait A1 extends A {
+ i += 1
+ }
+}
+
+object Bob {
+ val b = new A with A#A1
+} \ No newline at end of file
diff --git a/test/files/neg/t2180.check b/test/files/neg/t2180.check
new file mode 100644
index 0000000000..addc4cfbb8
--- /dev/null
+++ b/test/files/neg/t2180.check
@@ -0,0 +1,6 @@
+t2180.scala:3: error: type mismatch;
+ found : List[Any]
+ required: List[Mxml]
+ children.toList.flatMap ( e => {
+ ^
+one error found
diff --git a/test/files/neg/t2180.scala b/test/files/neg/t2180.scala
new file mode 100644
index 0000000000..54a9e49c1c
--- /dev/null
+++ b/test/files/neg/t2180.scala
@@ -0,0 +1,9 @@
+class Mxml {
+ private def processChildren( children:Seq[Any] ):List[Mxml] = {
+ children.toList.flatMap ( e => {
+ e match {
+ case s:scala.collection.Traversable[_] => s case a => List(a)
+ }
+ })
+ }
+}
diff --git a/test/files/neg/t2206.check b/test/files/neg/t2206.check
new file mode 100644
index 0000000000..766f35d93a
--- /dev/null
+++ b/test/files/neg/t2206.check
@@ -0,0 +1,5 @@
+t2206.scala:10: error: value f is not a member of o.A
+ Note: implicit method ax is not applicable here because it comes after the application point and it lacks an explicit result type
+ a.f()
+ ^
+one error found
diff --git a/test/files/neg/t2206.scala b/test/files/neg/t2206.scala
new file mode 100644
index 0000000000..cd2ec225e9
--- /dev/null
+++ b/test/files/neg/t2206.scala
@@ -0,0 +1,15 @@
+object o {
+ class A
+
+ class AX {
+ def f() { }
+ }
+
+ import Implicits._
+ val a = new A
+ a.f()
+
+ object Implicits {
+ implicit def ax(a: A) = new AX
+ }
+} \ No newline at end of file
diff --git a/test/files/neg/t2208.check b/test/files/neg/t2208.check
index a97b20cba7..64bb3a77c8 100644
--- a/test/files/neg/t2208.check
+++ b/test/files/neg/t2208.check
@@ -1,4 +1,4 @@
t2208.scala:7: error: type arguments [Any] do not conform to type Alias's type parameter bounds [X <: Test.A]
class C extends Alias[Any] // not ok, normalisation should check bounds before expanding Alias
^
-one error found \ No newline at end of file
+one error found
diff --git a/test/files/neg/t2213.check b/test/files/neg/t2213.check
new file mode 100644
index 0000000000..9fb3bb2eb7
--- /dev/null
+++ b/test/files/neg/t2213.check
@@ -0,0 +1,25 @@
+t2213.scala:9: error: class C needs to be abstract, since:
+it has 4 unimplemented members.
+/** As seen from class C, the missing signatures are as follows.
+ * For convenience, these are usable as stub implementations.
+ */
+ def f: Int = ???
+ def g: Int = ???
+ val x: Int = ???
+ val y: Int = ???
+
+class C extends A {}
+ ^
+t2213.scala:11: error: object creation impossible, since:
+it has 4 unimplemented members.
+/** As seen from object Q, the missing signatures are as follows.
+ * For convenience, these are usable as stub implementations.
+ */
+ def f: Int = ???
+ def g: Int = ???
+ val x: Int = ???
+ val y: Int = ???
+
+object Q extends A { }
+ ^
+two errors found
diff --git a/test/files/neg/t2213.scala b/test/files/neg/t2213.scala
new file mode 100644
index 0000000000..af1df3ccfe
--- /dev/null
+++ b/test/files/neg/t2213.scala
@@ -0,0 +1,11 @@
+abstract class A {
+ def f: Int
+ def g: Int
+
+ val x: Int
+ val y: Int
+}
+
+class C extends A {}
+
+object Q extends A { } \ No newline at end of file
diff --git a/test/files/neg/t2275a.check b/test/files/neg/t2275a.check
new file mode 100644
index 0000000000..cd3c868e76
--- /dev/null
+++ b/test/files/neg/t2275a.check
@@ -0,0 +1,13 @@
+t2275a.scala:4: error: in XML literal: in XML content, please use '}}' to express '}'
+ }else{
+ ^
+t2275a.scala:3: error: I encountered a '}' where I didn't expect one, maybe this tag isn't closed <br>
+ <br>
+ ^
+t2275a.scala:4: error: ';' expected but 'else' found.
+ }else{
+ ^
+t2275a.scala:7: error: '}' expected but eof found.
+}
+ ^
+four errors found
diff --git a/test/files/neg/bug2275a.scala b/test/files/neg/t2275a.scala
index 7f2b803daa..7f2b803daa 100644
--- a/test/files/neg/bug2275a.scala
+++ b/test/files/neg/t2275a.scala
diff --git a/test/files/neg/t2275b.check b/test/files/neg/t2275b.check
new file mode 100644
index 0000000000..43e34cc4d3
--- /dev/null
+++ b/test/files/neg/t2275b.check
@@ -0,0 +1,10 @@
+t2275b.scala:2: error: in XML literal: in XML content, please use '}}' to express '}'
+ {<br>}xx
+ ^
+t2275b.scala:2: error: I encountered a '}' where I didn't expect one, maybe this tag isn't closed <br>
+ {<br>}xx
+ ^
+t2275b.scala:3: error: '}' expected but eof found.
+}
+ ^
+three errors found
diff --git a/test/files/neg/bug2275b.scala b/test/files/neg/t2275b.scala
index 312cba8d6d..312cba8d6d 100644
--- a/test/files/neg/bug2275b.scala
+++ b/test/files/neg/t2275b.scala
diff --git a/test/files/neg/t2386.check b/test/files/neg/t2386.check
new file mode 100644
index 0000000000..1a01696a9a
--- /dev/null
+++ b/test/files/neg/t2386.check
@@ -0,0 +1,4 @@
+t2386.scala:2: error: could not find implicit value for evidence parameter of type scala.reflect.ClassManifest[Array[_ >: String with Int]]
+ val a = Array(Array(1, 2), Array("a","b"))
+ ^
+one error found
diff --git a/test/files/neg/t2386.scala b/test/files/neg/t2386.scala
new file mode 100644
index 0000000000..56146cc5c3
--- /dev/null
+++ b/test/files/neg/t2386.scala
@@ -0,0 +1,3 @@
+object Test {
+ val a = Array(Array(1, 2), Array("a","b"))
+}
diff --git a/test/files/neg/t2388.check b/test/files/neg/t2388.check
new file mode 100644
index 0000000000..3f97608a4d
--- /dev/null
+++ b/test/files/neg/t2388.check
@@ -0,0 +1,4 @@
+t2388.scala:2: error: recursive method search needs result type
+ val searchField = new AnyRef { search() }
+ ^
+one error found
diff --git a/test/files/neg/t2388.scala b/test/files/neg/t2388.scala
new file mode 100644
index 0000000000..3634f346f8
--- /dev/null
+++ b/test/files/neg/t2388.scala
@@ -0,0 +1,4 @@
+class Foo {
+ val searchField = new AnyRef { search() }
+ def search() = searchField
+}
diff --git a/test/files/neg/t2416.check b/test/files/neg/t2416.check
new file mode 100644
index 0000000000..0899ad09d5
--- /dev/null
+++ b/test/files/neg/t2416.check
@@ -0,0 +1,10 @@
+t2416.scala:3: error: type arguments [Int] do not conform to trait A's type parameter bounds [X <: Double]
+ def x : A[Int]#B = 10 // no you won't
+ ^
+t2416.scala:8: error: type arguments [Boolean] do not conform to type B's type parameter bounds [Y <: Double]
+ def x : A#B[Boolean] = 10 // seriously?
+ ^
+t2416.scala:13: error: type arguments [String] do not conform to type B's type parameter bounds [Z <: Double]
+ type C[Z <: A] = Z#B[String] // nuh-uh!
+ ^
+three errors found
diff --git a/test/files/neg/t2416.scala b/test/files/neg/t2416.scala
new file mode 100644
index 0000000000..6bb57a984b
--- /dev/null
+++ b/test/files/neg/t2416.scala
@@ -0,0 +1,14 @@
+object t2416a {
+ trait A[X <: Double] { type B = X }
+ def x : A[Int]#B = 10 // no you won't
+}
+
+object t2416b {
+ trait A{type B[Y <: Double] = Int}
+ def x : A#B[Boolean] = 10 // seriously?
+}
+
+object t2416c {
+ trait A{type B[Z <: Double] = Int}
+ type C[Z <: A] = Z#B[String] // nuh-uh!
+} \ No newline at end of file
diff --git a/test/files/neg/t2421b.check b/test/files/neg/t2421b.check
new file mode 100644
index 0000000000..f666a7d9d7
--- /dev/null
+++ b/test/files/neg/t2421b.check
@@ -0,0 +1,4 @@
+t2421b.scala:12: error: could not find implicit value for parameter aa: Test.F[Test.A]
+ f
+ ^
+one error found \ No newline at end of file
diff --git a/test/files/neg/t2421b.scala b/test/files/neg/t2421b.scala
new file mode 100644
index 0000000000..a8d22f285e
--- /dev/null
+++ b/test/files/neg/t2421b.scala
@@ -0,0 +1,17 @@
+object Test {
+ class A
+ class B
+ class C
+ class F[X]
+
+ def f(implicit aa: F[A]) = println(aa)
+
+ // implicit def a : F[A] = new F[A]()
+ implicit def b[X <: B] = new F[X]()
+
+ f
+}
+
+/* bug:
+error: type arguments [Test2.A] do not conform to method b's type parameter bounds [X <: Test2.B]
+*/ \ No newline at end of file
diff --git a/test/files/neg/t2441.check b/test/files/neg/t2441.check
new file mode 100644
index 0000000000..6eaacd8fd1
--- /dev/null
+++ b/test/files/neg/t2441.check
@@ -0,0 +1,4 @@
+t2441.scala:12: error: private class Y escapes its defining scope as part of type Some[B.Y]
+ override def f = Some(new B.Y)
+ ^
+one error found
diff --git a/test/files/neg/t2441.scala b/test/files/neg/t2441.scala
new file mode 100644
index 0000000000..a8c9e728a2
--- /dev/null
+++ b/test/files/neg/t2441.scala
@@ -0,0 +1,15 @@
+trait X
+trait A {
+ def f: Option[X]
+ def g: Option[X]
+}
+object B {
+ private class Y extends X { val y = 42 }
+}
+class B extends A {
+ private class Bippy
+
+ override def f = Some(new B.Y)
+ override def g: Option[X] = Some(new B.Y)
+}
+
diff --git a/test/files/neg/t2462a.check b/test/files/neg/t2462a.check
new file mode 100644
index 0000000000..86d74b86d4
--- /dev/null
+++ b/test/files/neg/t2462a.check
@@ -0,0 +1,4 @@
+t2462a.scala:2: error: Cannot construct a collection of type List[String] with elements of type Int based on a collection of type List[Int].
+ List(1,2,3).map[Int, List[String]](x => 1)
+ ^
+one error found
diff --git a/test/files/neg/t2462a.scala b/test/files/neg/t2462a.scala
new file mode 100644
index 0000000000..2d523b4dd8
--- /dev/null
+++ b/test/files/neg/t2462a.scala
@@ -0,0 +1,3 @@
+object Test {
+ List(1,2,3).map[Int, List[String]](x => 1)
+} \ No newline at end of file
diff --git a/test/files/neg/t2462b.check b/test/files/neg/t2462b.check
new file mode 100644
index 0000000000..bc0d9aa469
--- /dev/null
+++ b/test/files/neg/t2462b.check
@@ -0,0 +1,14 @@
+t2462b.scala:6: warning: Invalid implicitNotFound message for trait Meh in package test:
+The type parameters Too, Elem referenced in the message of the @implicitNotFound annotation are not defined by trait Meh.
+trait Meh[-From, +To]
+ ^
+t2462b.scala:9: warning: Invalid implicitNotFound message for trait Meh2 in package test:
+The type parameter Elem referenced in the message of the @implicitNotFound annotation is not defined by trait Meh2.
+trait Meh2[-From, +To]
+ ^
+t2462b.scala:12: error: overriding method x in class thankyoupartest of type => Int;
+ method x needs `override' modifier
+class testmustfail extends thankyoupartest { def x = 43 }
+ ^
+two warnings found
+one error found
diff --git a/test/files/neg/t2462b.scala b/test/files/neg/t2462b.scala
new file mode 100644
index 0000000000..7a1389cc8e
--- /dev/null
+++ b/test/files/neg/t2462b.scala
@@ -0,0 +1,12 @@
+package test
+
+import scala.annotation.implicitNotFound
+
+@implicitNotFound(msg = "Cannot construct a collection of type ${Too} with elements of type ${Elem} based on a collection of type ${From}.")
+trait Meh[-From, +To]
+
+@implicitNotFound(msg = "Cannot construct a collection of type ${To} ${Elem}.")
+trait Meh2[-From, +To]
+
+class thankyoupartest { def x = 42 }
+class testmustfail extends thankyoupartest { def x = 43 }
diff --git a/test/files/neg/t2641.check b/test/files/neg/t2641.check
new file mode 100644
index 0000000000..2056a1b9ab
--- /dev/null
+++ b/test/files/neg/t2641.check
@@ -0,0 +1,35 @@
+t2641.scala:18: error: illegal cyclic reference involving trait ManagedSeq
+ with TraversableViewLike[A, ManagedSeqStrict[A], ManagedSeq[A]]
+ ^
+t2641.scala:16: error: illegal inheritance;
+ self-type ManagedSeq does not conform to ManagedSeqStrict[A]'s selftype ManagedSeqStrict[A]
+ extends ManagedSeqStrict[A]
+ ^
+t2641.scala:17: error: illegal inheritance;
+ self-type ManagedSeq does not conform to scala.collection.TraversableView[A,ManagedSeqStrict[A]]'s selftype scala.collection.TraversableView[A,ManagedSeqStrict[A]]
+ with TraversableView[A, ManagedSeqStrict[A]]
+ ^
+t2641.scala:16: error: illegal inheritance;
+ self-type ManagedSeq does not conform to ScalaObject's selftype ScalaObject
+ extends ManagedSeqStrict[A]
+ ^
+t2641.scala:24: error: something is wrong (wrong class file?): trait ManagedSeq with type parameters [A,Coll] gets applied to arguments [], phase = typer
+ trait Transformed[+B] extends ManagedSeq[B, Coll] with super.Transformed[B]
+ ^
+t2641.scala:26: error: something is wrong (wrong class file?): trait ManagedSeq with type parameters [A,Coll] gets applied to arguments [], phase = namer
+ trait Sliced extends Transformed[A] with super.Sliced {
+ ^
+t2641.scala:26: error: illegal inheritance; superclass Any
+ is not a subclass of the superclass ManagedSeqStrict
+ of the mixin trait Transformed
+ trait Sliced extends Transformed[A] with super.Sliced {
+ ^
+t2641.scala:26: error: illegal inheritance; superclass Any
+ is not a subclass of the superclass Object
+ of the mixin trait Sliced
+ trait Sliced extends Transformed[A] with super.Sliced {
+ ^
+t2641.scala:27: error: value managedIterator is not a member of ManagedSeq
+ override def managedIterator = self.managedIterator slice (from, until)
+ ^
+9 errors found
diff --git a/test/files/neg/t2641.scala b/test/files/neg/t2641.scala
new file mode 100644
index 0000000000..626d5d7852
--- /dev/null
+++ b/test/files/neg/t2641.scala
@@ -0,0 +1,30 @@
+import scala.collection._
+import scala.collection.generic._
+import scala.collection.mutable.Builder
+
+
+abstract class ManagedSeqStrict[+A]
+ extends Traversable[A]
+ with GenericTraversableTemplate[A, ManagedSeqStrict]
+{
+ override def companion: GenericCompanion[ManagedSeqStrict] = null
+
+ override def foreach[U](f: A => U): Unit = ()
+}
+
+trait ManagedSeq[+A, +Coll]
+ extends ManagedSeqStrict[A]
+ with TraversableView[A, ManagedSeqStrict[A]]
+ with TraversableViewLike[A, ManagedSeqStrict[A], ManagedSeq[A]]
+{ self =>
+
+ override def underlying = throw new Exception("no underlying")
+
+ //trait Transformed[+B] extends ManagedSeq[B] with super.Transformed[B]
+ trait Transformed[+B] extends ManagedSeq[B, Coll] with super.Transformed[B]
+
+ trait Sliced extends Transformed[A] with super.Sliced {
+ override def managedIterator = self.managedIterator slice (from, until)
+ }
+
+}
diff --git a/test/files/neg/t276.check b/test/files/neg/t276.check
new file mode 100644
index 0000000000..b241953a22
--- /dev/null
+++ b/test/files/neg/t276.check
@@ -0,0 +1,5 @@
+t276.scala:6: error: overriding type Bar in class Foo, which equals (Int, Int);
+ class Bar cannot be used here - classes can only override abstract types
+ class Bar
+ ^
+one error found
diff --git a/test/files/neg/bug276.scala b/test/files/neg/t276.scala
index dfc8b468df..dfc8b468df 100644
--- a/test/files/neg/bug276.scala
+++ b/test/files/neg/t276.scala
diff --git a/test/files/neg/t2773.check b/test/files/neg/t2773.check
new file mode 100644
index 0000000000..a5ffb5fbd5
--- /dev/null
+++ b/test/files/neg/t2773.check
@@ -0,0 +1,7 @@
+t2773.scala:5: error: value x is not a member of C
+ import c.x
+ ^
+t2773.scala:6: error: not found: value x
+ println(x)
+ ^
+two errors found
diff --git a/test/files/neg/t2773.scala b/test/files/neg/t2773.scala
new file mode 100755
index 0000000000..aaa6351c83
--- /dev/null
+++ b/test/files/neg/t2773.scala
@@ -0,0 +1,8 @@
+class C(x: Int) { def foo = x }
+
+object Test {
+ val c = new C(0)
+ import c.x
+ println(x)
+}
+
diff --git a/test/files/neg/t2775.check b/test/files/neg/t2775.check
new file mode 100644
index 0000000000..a30d35fdd9
--- /dev/null
+++ b/test/files/neg/t2775.check
@@ -0,0 +1,4 @@
+t2775.scala:1: error: cannot find class manifest for element type B.this.T
+trait B[S] { type T = S; val c = new Array[T](1) }
+ ^
+one error found
diff --git a/test/files/neg/t2775.scala b/test/files/neg/t2775.scala
new file mode 100644
index 0000000000..9e4f2f606d
--- /dev/null
+++ b/test/files/neg/t2775.scala
@@ -0,0 +1 @@
+trait B[S] { type T = S; val c = new Array[T](1) }
diff --git a/test/files/neg/t2779.check b/test/files/neg/t2779.check
new file mode 100644
index 0000000000..4f94a780a1
--- /dev/null
+++ b/test/files/neg/t2779.check
@@ -0,0 +1,4 @@
+t2779.scala:16: error: method f is defined twice
+ override def f = List(M1)
+ ^
+one error found
diff --git a/test/files/neg/t2779.scala b/test/files/neg/t2779.scala
new file mode 100755
index 0000000000..d025055aa0
--- /dev/null
+++ b/test/files/neg/t2779.scala
@@ -0,0 +1,25 @@
+abstract class M
+{
+ def f: List[M] = Nil
+}
+
+object M1 extends M
+
+object M2 extends M
+{
+ override def f = List(M1)
+}
+
+object M3 extends M
+{
+ override def f = List(M1)
+ override def f = List(M1)
+}
+
+object M4 extends M
+{
+ override def f = List(
+ M3,
+ M2
+ )
+}
diff --git a/test/files/neg/t278.check b/test/files/neg/t278.check
new file mode 100644
index 0000000000..675ef910ee
--- /dev/null
+++ b/test/files/neg/t278.check
@@ -0,0 +1,10 @@
+t278.scala:5: error: overloaded method value a with alternatives:
+ => C.this.A => Unit <and>
+ => () => Unit
+ does not take type parameters
+ println(a[A])
+ ^
+t278.scala:4: error: method a is defined twice
+ def a = (p:A) => ()
+ ^
+two errors found
diff --git a/test/files/neg/t278.scala b/test/files/neg/t278.scala
new file mode 100644
index 0000000000..39a711bb09
--- /dev/null
+++ b/test/files/neg/t278.scala
@@ -0,0 +1,6 @@
+class C {
+ class A
+ def a = () => ()
+ def a = (p:A) => ()
+ println(a[A])
+}
diff --git a/test/files/neg/t2801.check b/test/files/neg/t2801.check
new file mode 100644
index 0000000000..25320de5bc
--- /dev/null
+++ b/test/files/neg/t2801.check
@@ -0,0 +1,6 @@
+t2801.scala:2: error: type mismatch;
+ found : Null(null)
+ required: A
+ def f[A <: AnyRef] = { val a: A = null ; a }
+ ^
+one error found
diff --git a/test/files/neg/t2801.scala b/test/files/neg/t2801.scala
new file mode 100644
index 0000000000..d425f58b56
--- /dev/null
+++ b/test/files/neg/t2801.scala
@@ -0,0 +1,3 @@
+object Test {
+ def f[A <: AnyRef] = { val a: A = null ; a }
+}
diff --git a/test/files/neg/t284.check b/test/files/neg/t284.check
new file mode 100644
index 0000000000..37801af1b5
--- /dev/null
+++ b/test/files/neg/t284.check
@@ -0,0 +1,8 @@
+t284.scala:2: warning: Detected apparent refinement of Unit; are you missing an '=' sign?
+ def f1(a: T): Unit { }
+ ^
+t284.scala:5: error: Unmatched closing brace '}' ignored here
+ }
+ ^
+one warning found
+one error found
diff --git a/test/files/neg/bug284.scala b/test/files/neg/t284.scala
index a210130102..a210130102 100644
--- a/test/files/neg/bug284.scala
+++ b/test/files/neg/t284.scala
diff --git a/test/files/neg/t2870.check b/test/files/neg/t2870.check
new file mode 100644
index 0000000000..72bc0d98a1
--- /dev/null
+++ b/test/files/neg/t2870.check
@@ -0,0 +1,7 @@
+t2870.scala:1: error: not found: type Jar (similar: Jars)
+class Jars(jar: Jar)
+ ^
+t2870.scala:6: error: illegal cyclic reference involving value <import>
+ val scala = fromClasspathString(javaClassPath)
+ ^
+two errors found
diff --git a/test/files/neg/t2870.scala b/test/files/neg/t2870.scala
new file mode 100755
index 0000000000..59fba3e76d
--- /dev/null
+++ b/test/files/neg/t2870.scala
@@ -0,0 +1,9 @@
+class Jars(jar: Jar)
+
+object Jars {
+ import scala.util.Properties.javaClassPath
+
+ val scala = fromClasspathString(javaClassPath)
+
+ def fromClasspathString(s: String): Jars = null
+}
diff --git a/test/files/neg/t2910.check b/test/files/neg/t2910.check
new file mode 100644
index 0000000000..44bf1993db
--- /dev/null
+++ b/test/files/neg/t2910.check
@@ -0,0 +1,16 @@
+t2910.scala:3: error: forward reference extends over definition of value ret
+ val ret = l.map({ case MyMatch(id) => id })
+ ^
+t2910.scala:9: error: forward reference extends over definition of value z
+ println(s.length)
+ ^
+t2910.scala:16: error: forward reference extends over definition of value z
+ x
+ ^
+t2910.scala:30: error: forward reference extends over definition of value x
+ lazy val f: Int = x
+ ^
+t2910.scala:35: error: forward reference extends over definition of variable x
+ lazy val f: Int = g
+ ^
+5 errors found
diff --git a/test/files/neg/t2910.scala b/test/files/neg/t2910.scala
new file mode 100644
index 0000000000..fa51038dcd
--- /dev/null
+++ b/test/files/neg/t2910.scala
@@ -0,0 +1,39 @@
+object Junk {
+ def f(l: List[String]): List[String] = {
+ val ret = l.map({ case MyMatch(id) => id })
+ val MyMatch = "(\\d+)".r
+ ret
+ }
+
+ def test2() {
+ println(s.length)
+ val z = 0
+ lazy val s = "abc"
+ }
+
+ def test4() {
+ lazy val x = {
+ x
+ val z = 0
+ lazy val x = 12
+ z
+ }
+ }
+}
+
+// updated forwards.scala for lazy vals
+object Test {
+ lazy val f: Int = x
+ val x: Int = f
+
+ {
+ lazy val f: Int = x
+ val x: Int = f
+ println(x)
+ }
+ {
+ lazy val f: Int = g
+ var x: Int = f
+ lazy val g: Int = x
+ }
+}
diff --git a/test/files/neg/t2918.check b/test/files/neg/t2918.check
new file mode 100644
index 0000000000..263beab518
--- /dev/null
+++ b/test/files/neg/t2918.check
@@ -0,0 +1,10 @@
+t2918.scala:2: error: illegal cyclic reference involving type A
+ def g[X, A[X] <: A[X]](x: A[X]) = x
+ ^
+t2918.scala:2: error: cyclic aliasing or subtyping involving type A
+ def g[X, A[X] <: A[X]](x: A[X]) = x
+ ^
+t2918.scala:2: error: A does not take type parameters
+ def g[X, A[X] <: A[X]](x: A[X]) = x
+ ^
+three errors found
diff --git a/test/files/neg/t2918.scala b/test/files/neg/t2918.scala
new file mode 100755
index 0000000000..03477ccfbf
--- /dev/null
+++ b/test/files/neg/t2918.scala
@@ -0,0 +1,3 @@
+object Test {
+ def g[X, A[X] <: A[X]](x: A[X]) = x
+}
diff --git a/test/files/neg/t2973.check b/test/files/neg/t2973.check
new file mode 100644
index 0000000000..582fe0063d
--- /dev/null
+++ b/test/files/neg/t2973.check
@@ -0,0 +1,4 @@
+t2973.scala:1: error: ';' expected but 'package' found.
+package foo {} package bar {}
+ ^
+one error found \ No newline at end of file
diff --git a/test/files/neg/t2973.scala b/test/files/neg/t2973.scala
new file mode 100644
index 0000000000..b9d973580a
--- /dev/null
+++ b/test/files/neg/t2973.scala
@@ -0,0 +1 @@
+package foo {} package bar {}
diff --git a/test/files/neg/t3006.check b/test/files/neg/t3006.check
new file mode 100644
index 0000000000..2447eebc9c
--- /dev/null
+++ b/test/files/neg/t3006.check
@@ -0,0 +1,6 @@
+t3006.scala:8: error: type mismatch;
+ found : String("H")
+ required: Int
+ println(A(3) + "H")
+ ^
+one error found
diff --git a/test/files/neg/t3006.scala b/test/files/neg/t3006.scala
new file mode 100755
index 0000000000..a84b69c842
--- /dev/null
+++ b/test/files/neg/t3006.scala
@@ -0,0 +1,10 @@
+object Test extends App {
+ case class A(x: Int);
+
+ class Foo(a: A) { println("Foo created!"); def +(x: Int) = new A(this.a.x + x); }
+
+ implicit def aToFoo(x: A) = new Foo(x);
+
+ println(A(3) + "H")
+
+}
diff --git a/test/files/neg/t3015.check b/test/files/neg/t3015.check
new file mode 100644
index 0000000000..0b394e23d6
--- /dev/null
+++ b/test/files/neg/t3015.check
@@ -0,0 +1,11 @@
+t3015.scala:7: error: scrutinee is incompatible with pattern type;
+ found : _$1 where type +_$1
+ required: String
+ val b(foo) = "foo"
+ ^
+t3015.scala:7: error: type mismatch;
+ found : String with _$1(in object Test) where type +_$1(in object Test)
+ required: (some other)_$1(in object Test) where type +(some other)_$1(in object Test)
+ val b(foo) = "foo"
+ ^
+two errors found
diff --git a/test/files/neg/t3015.scala b/test/files/neg/t3015.scala
new file mode 100644
index 0000000000..9af8f30c65
--- /dev/null
+++ b/test/files/neg/t3015.scala
@@ -0,0 +1,8 @@
+class UnApp[P] {
+ def unapply(a: P): Option[P] = Some(a)
+}
+
+object Test extends App {
+ val b: UnApp[_] = new UnApp[String]
+ val b(foo) = "foo"
+}
diff --git a/test/files/neg/t3098.check b/test/files/neg/t3098.check
new file mode 100644
index 0000000000..403da281c8
--- /dev/null
+++ b/test/files/neg/t3098.check
@@ -0,0 +1,6 @@
+b.scala:3: error: match is not exhaustive!
+missing combination C
+
+ def f = (null: T) match {
+ ^
+one error found
diff --git a/test/files/neg/t3098.flags b/test/files/neg/t3098.flags
new file mode 100644
index 0000000000..e8fb65d50c
--- /dev/null
+++ b/test/files/neg/t3098.flags
@@ -0,0 +1 @@
+-Xfatal-warnings \ No newline at end of file
diff --git a/test/files/neg/t3098/a.scala b/test/files/neg/t3098/a.scala
new file mode 100644
index 0000000000..57a103c7a8
--- /dev/null
+++ b/test/files/neg/t3098/a.scala
@@ -0,0 +1,6 @@
+// Traits.scala
+sealed trait T
+
+trait A extends T
+trait B extends T
+trait C extends T
diff --git a/test/files/neg/t3098/b.scala b/test/files/neg/t3098/b.scala
new file mode 100644
index 0000000000..84a1f9f6f4
--- /dev/null
+++ b/test/files/neg/t3098/b.scala
@@ -0,0 +1,8 @@
+// Test.scala
+object Test {
+ def f = (null: T) match {
+ case _: A => println("A")
+ case _: B => println("B")
+ // no C
+ }
+}
diff --git a/test/files/neg/t3118.check b/test/files/neg/t3118.check
new file mode 100644
index 0000000000..da00f1c330
--- /dev/null
+++ b/test/files/neg/t3118.check
@@ -0,0 +1,7 @@
+t3118.scala:6: error: value C is not a member of O1
+ println(x.C()) // should not be accessible
+ ^
+t3118.scala:7: error: type C is not a member of O1
+ println(new x.C) // is correctly not accessible
+ ^
+two errors found
diff --git a/test/files/neg/t3118.scala b/test/files/neg/t3118.scala
new file mode 100644
index 0000000000..75f3b8f50c
--- /dev/null
+++ b/test/files/neg/t3118.scala
@@ -0,0 +1,8 @@
+class O1 {
+ private[this] case class C()
+
+ val x = new O1
+
+ println(x.C()) // should not be accessible
+ println(new x.C) // is correctly not accessible
+}
diff --git a/test/files/neg/t3209.check b/test/files/neg/t3209.check
new file mode 100644
index 0000000000..c5a6b1d95d
--- /dev/null
+++ b/test/files/neg/t3209.check
@@ -0,0 +1,4 @@
+t3209.scala:2: error: expected start of definition
+package test
+^
+one error found
diff --git a/test/files/neg/t3209.scala b/test/files/neg/t3209.scala
new file mode 100644
index 0000000000..d893726659
--- /dev/null
+++ b/test/files/neg/t3209.scala
@@ -0,0 +1,2 @@
+@javax.annotation.Generated(Array("test"))
+package test \ No newline at end of file
diff --git a/test/files/neg/t3222.check b/test/files/neg/t3222.check
new file mode 100644
index 0000000000..e724024f45
--- /dev/null
+++ b/test/files/neg/t3222.check
@@ -0,0 +1,7 @@
+t3222.scala:4: error: not found: type D
+ def foo(@throws(classOf[D]) x: Int) {}
+ ^
+t3222.scala:1: error: not found: type B
+@throws(classOf[B])
+ ^
+two errors found
diff --git a/test/files/neg/t3222.scala b/test/files/neg/t3222.scala
new file mode 100644
index 0000000000..448292e8a7
--- /dev/null
+++ b/test/files/neg/t3222.scala
@@ -0,0 +1,9 @@
+@throws(classOf[B])
+class ExceptionTest {
+ @throws(classOf[C])
+ def foo(@throws(classOf[D]) x: Int) {}
+
+ @throws(classOf[E])
+ type t = String
+}
+
diff --git a/test/files/neg/t3224.check b/test/files/neg/t3224.check
new file mode 100644
index 0000000000..29304c567a
--- /dev/null
+++ b/test/files/neg/t3224.check
@@ -0,0 +1,6 @@
+t3224.scala:29: error: polymorphic expression cannot be instantiated to expected type;
+ found : [T]Array[T]
+ required: List[?]
+ println(Texts textL Array()); println(Texts textL Array(1)); println(Texts textL Array(1, 1))
+ ^
+one error found
diff --git a/test/files/neg/t3224.scala b/test/files/neg/t3224.scala
new file mode 100755
index 0000000000..774de3335a
--- /dev/null
+++ b/test/files/neg/t3224.scala
@@ -0,0 +1,30 @@
+object Texts{
+ def textL[T](list: List[T]) = {
+ list match{
+ case List() => "Empty"
+ case List(_) => "One"
+ case List(_*) => "Many"
+ }
+ }
+
+ def textA[T](array: Array[T]) = {
+ array match{
+ case Array() => "Empty"
+ case Array(_) => "One"
+ case Array(_*) => "Many"
+ }
+ }
+}
+
+object Test extends App {
+
+ implicit def array2list[T](array: Array[T]) = {
+ println(array.toList.size)
+ array.toList
+ }
+
+
+ println(Texts textL List()); println(Texts textL List(1)); println(Texts textL List(1, 1));
+
+ println(Texts textL Array()); println(Texts textL Array(1)); println(Texts textL Array(1, 1))
+}
diff --git a/test/files/neg/t3240.check b/test/files/neg/t3240.check
new file mode 100644
index 0000000000..7ebabd5fcd
--- /dev/null
+++ b/test/files/neg/t3240.check
@@ -0,0 +1,7 @@
+t3240.scala:3: error: only classes can have declared but undefined members
+ type t
+ ^
+t3240.scala:5: error: type arguments [this.t] do not conform to method asInstanceOf's type parameter bounds [T0]
+ a.getOrElse(defVal).asInstanceOf[t]
+ ^
+two errors found
diff --git a/test/files/neg/t3240.scala b/test/files/neg/t3240.scala
new file mode 100644
index 0000000000..cf197a406d
--- /dev/null
+++ b/test/files/neg/t3240.scala
@@ -0,0 +1,8 @@
+class A {
+ val foo = new {
+ type t
+ def apply(a: Option[t], defVal: Any) = {
+ a.getOrElse(defVal).asInstanceOf[t]
+ }
+ }
+} \ No newline at end of file
diff --git a/test/files/neg/t3392.check b/test/files/neg/t3392.check
new file mode 100644
index 0000000000..842d63eec9
--- /dev/null
+++ b/test/files/neg/t3392.check
@@ -0,0 +1,4 @@
+t3392.scala:9: error: not found: value x
+ case x@A(x/*<-- refers to the pattern that includes this comment*/.Ex(42)) =>
+ ^
+one error found
diff --git a/test/files/neg/t3392.scala b/test/files/neg/t3392.scala
new file mode 100644
index 0000000000..655c2e84a3
--- /dev/null
+++ b/test/files/neg/t3392.scala
@@ -0,0 +1,11 @@
+object Test {
+ case class A(a: Int) {
+ object Ex {
+ def unapply(i: Int): Option[Int] = Some(i)
+ }
+ }
+
+ A(42) match {
+ case x@A(x/*<-- refers to the pattern that includes this comment*/.Ex(42)) =>
+ }
+}
diff --git a/test/files/neg/t3399.check b/test/files/neg/t3399.check
new file mode 100644
index 0000000000..987da944c6
--- /dev/null
+++ b/test/files/neg/t3399.check
@@ -0,0 +1,4 @@
+t3399.scala:23: error: Cannot prove that Nats.Add[Nats._1,Nats._1] =:= Nats._1.
+ implicitly[ Add[_1, _1] =:= _1]
+ ^
+one error found
diff --git a/test/files/neg/t3399.scala b/test/files/neg/t3399.scala
new file mode 100644
index 0000000000..b1fe4e5ee2
--- /dev/null
+++ b/test/files/neg/t3399.scala
@@ -0,0 +1,24 @@
+object Nats {
+ sealed trait Nat {
+ // fold right on N, N-1, ..., 1
+ type FoldR[Init <: Type, Type, F <: Fold[Nat, Type]] <: Type
+ }
+ sealed trait _0 extends Nat {
+ type FoldR[Init <: Type, Type, F <: Fold[Nat, Type]] = Init
+ }
+ sealed trait Succ[N <: Nat] extends Nat {
+ type FoldR[Init <: Type, Type, F <: Fold[Nat, Type]] =
+ F#Apply[Succ[N], N#FoldR[Init, Type, F]]
+ }
+
+ type Add[A <: Nat, B <: Nat] = A#FoldR[B, Nat, Inc]
+ trait Fold[-Elem, Value] {
+ type Apply[N <: Elem, Acc <: Value] <: Value
+ }
+ type Inc = Fold[Any, Nat] {
+ type Apply[N <: Any, Acc <: Nat] = Succ[Acc]
+ }
+
+ type _1 = Succ[_0]
+ implicitly[ Add[_1, _1] =:= _1]
+} \ No newline at end of file
diff --git a/test/files/neg/t3403.check b/test/files/neg/t3403.check
new file mode 100644
index 0000000000..e52d140e6a
--- /dev/null
+++ b/test/files/neg/t3403.check
@@ -0,0 +1,4 @@
+t3403.scala:2: error: implementation limitation: the BeanProperty annotation cannot be used in a type alias or renamed import
+class Foo { @bp var bar: Int = 1 }
+ ^
+one error found
diff --git a/test/files/neg/t3403.scala b/test/files/neg/t3403.scala
new file mode 100644
index 0000000000..8be6ab2a31
--- /dev/null
+++ b/test/files/neg/t3403.scala
@@ -0,0 +1,2 @@
+import scala.reflect.{BeanProperty => bp}
+class Foo { @bp var bar: Int = 1 }
diff --git a/test/files/neg/t343.check b/test/files/neg/t343.check
new file mode 100644
index 0000000000..d310b7915f
--- /dev/null
+++ b/test/files/neg/t343.check
@@ -0,0 +1,4 @@
+t343.scala:5: error: private class Foo escapes its defining scope as part of type C.this.Foo
+ def get:Foo = new Foo();
+ ^
+one error found
diff --git a/test/files/neg/bug343.scala b/test/files/neg/t343.scala
index ed57d2eef7..ed57d2eef7 100644
--- a/test/files/neg/bug343.scala
+++ b/test/files/neg/t343.scala
diff --git a/test/files/neg/t3453.check b/test/files/neg/t3453.check
new file mode 100644
index 0000000000..52c948128c
--- /dev/null
+++ b/test/files/neg/t3453.check
@@ -0,0 +1,21 @@
+t3453.scala:18: error: type mismatch;
+ found : A
+ required: B
+ new A
+ ^
+t3453.scala:36: error: type mismatch;
+ found : A
+ required: B
+ new A
+ ^
+t3453.scala:50: error: type mismatch;
+ found : A
+ required: B
+ new A
+ ^
+t3453.scala:64: error: type mismatch;
+ found : A
+ required: B
+ new A
+ ^
+four errors found
diff --git a/test/files/neg/t3453.scala b/test/files/neg/t3453.scala
new file mode 100644
index 0000000000..0f1c6e0282
--- /dev/null
+++ b/test/files/neg/t3453.scala
@@ -0,0 +1,66 @@
+// test shadowing of implicits by synonymous non-implicit symbols
+// whether they be inherited, imported (explicitly or using a wildcard) or defined directly
+class A
+class B
+
+trait S {
+ implicit def aToB(a: A): B = new B
+}
+
+class T1 extends S {
+ def x: B = {
+ val aToB = 3
+ // ok: doesn't compile, because aToB method requires 'T.this.' prefix
+ //aToB(new A)
+
+ // bug: compiles, using T.this.aToB,
+ // despite it not being accessible without a prefix
+ new A
+ }
+}
+
+object O {
+ implicit def aToB(a: A): B = new B
+}
+
+class T2a {
+ import O._
+
+ def x: B = {
+ val aToB = 3
+ // ok: doesn't compile, because aToB method requires 'T.this.' prefix
+ //aToB(new A)
+
+ // bug: compiles, using T.this.aToB,
+ // despite it not being accessible without a prefix
+ new A
+ }
+}
+
+class T2b {
+ import O.aToB
+
+ def x: B = {
+ val aToB = 3
+ // ok: doesn't compile, because aToB method requires 'T.this.' prefix
+ //aToB(new A)
+
+ // bug: compiles, using T.this.aToB,
+ // despite it not being accessible without a prefix
+ new A
+ }
+}
+
+class T3 {
+ implicit def aToB(a: A): B = new B
+
+ def x: B = {
+ val aToB = 3
+ // ok: doesn't compile, because aToB method requires 'T.this.' prefix
+ //aToB(new A)
+
+ // bug: compiles, using T.this.aToB,
+ // despite it not being accessible without a prefix
+ new A
+ }
+} \ No newline at end of file
diff --git a/test/files/neg/t3481.check b/test/files/neg/t3481.check
new file mode 100644
index 0000000000..48e6ff357b
--- /dev/null
+++ b/test/files/neg/t3481.check
@@ -0,0 +1,29 @@
+t3481.scala:5: error: type mismatch;
+ found : String("hello")
+ required: _$1 where type +_$1
+ f[A[Int]]("hello")
+ ^
+t3481.scala:11: error: type mismatch;
+ found : _$2 where type +_$2
+ required: b.T
+ (which expands to) _$2
+ def f[T <: B[_]](a: T#T, b: T) = b.m(a)
+ ^
+t3481.scala:12: error: type mismatch;
+ found : String("Hello")
+ required: _$2 where type +_$2
+ f("Hello", new B[Int])
+ ^
+t3481.scala:18: error: type mismatch;
+ found : String("Hello")
+ required: t3481.ex3.b.T2
+ (which expands to) _$3
+ b.m("Hello")
+ ^
+t3481.scala:25: error: type mismatch;
+ found : String("Hello")
+ required: t3481.ex4.Test.b.T2
+ (which expands to) _$4
+ b.m("Hello")
+ ^
+5 errors found
diff --git a/test/files/neg/t3481.scala b/test/files/neg/t3481.scala
new file mode 100644
index 0000000000..f4b781ee37
--- /dev/null
+++ b/test/files/neg/t3481.scala
@@ -0,0 +1,28 @@
+object t3481 {
+ object ex1 {
+ trait A[T] { type B = T }
+ def f[T <: A[_]](a: T#B) = 1
+ f[A[Int]]("hello")
+ }
+
+ object ex2 {
+ trait A { type T; def m(t: T) = t.toString }
+ class B[T2] extends A { type T = T2 }
+ def f[T <: B[_]](a: T#T, b: T) = b.m(a)
+ f("Hello", new B[Int])
+ }
+
+ object ex3 {
+ class B[T] { type T2 = T; def m(t: T2) = t.toString }
+ val b: B[_] = new B[Int]
+ b.m("Hello")
+ }
+
+ object ex4 {
+ abstract class B[T] { type T2 = T; def m(t: T2): Any }
+ object Test {
+ val b: B[_] = sys.error("")
+ b.m("Hello")
+ }
+ }
+} \ No newline at end of file
diff --git a/test/files/neg/t3507.check b/test/files/neg/t3507.check
new file mode 100644
index 0000000000..8e538e4a8b
--- /dev/null
+++ b/test/files/neg/t3507.check
@@ -0,0 +1,4 @@
+t3507.scala:13: error: No Manifest available for _1.b.c.type.
+ mani/*[object _1.b.c]*/(c) // kaboom in manifestOfType / TreeGen.mkAttributedQualifier
+ ^
+one error found
diff --git a/test/files/neg/t3507.scala b/test/files/neg/t3507.scala
new file mode 100644
index 0000000000..32688d3934
--- /dev/null
+++ b/test/files/neg/t3507.scala
@@ -0,0 +1,15 @@
+class A {
+ object b {
+ object c
+ }
+ def m = b.c
+}
+
+object Test {
+ var a: A = new A // mutable
+ val c /*: object _1.b.c forSome { val _1: A } */ = a.m // widening using existential
+
+ def mani[T: Manifest](x: T) = ()
+ mani/*[object _1.b.c]*/(c) // kaboom in manifestOfType / TreeGen.mkAttributedQualifier
+ // --> _1 is not in scope here
+} \ No newline at end of file
diff --git a/test/files/neg/t3604.check b/test/files/neg/t3604.check
new file mode 100644
index 0000000000..b07c5c9c71
--- /dev/null
+++ b/test/files/neg/t3604.check
@@ -0,0 +1,7 @@
+t3604.scala:3: error: in XML literal: expected closing tag of abbr
+ <abbr></div>
+ ^
+t3604.scala:3: error: start tag was here: abbr>
+ <abbr></div>
+ ^
+two errors found
diff --git a/test/files/neg/t3604.scala b/test/files/neg/t3604.scala
new file mode 100644
index 0000000000..f890a58e58
--- /dev/null
+++ b/test/files/neg/t3604.scala
@@ -0,0 +1,6 @@
+object Main {
+ <div>
+ <abbr></div>
+ { "..." }
+ </div>
+}
diff --git a/test/files/neg/t3631.check b/test/files/neg/t3631.check
new file mode 100644
index 0000000000..6d8feca1ed
--- /dev/null
+++ b/test/files/neg/t3631.check
@@ -0,0 +1,4 @@
+t3631.scala:3: error: Implementation restriction: case classes cannot have more than 22 parameters.
+case class X23(x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int, x8: Int, x9: Int, x10: Int, x11: Int, x12: Int, x13: Int, x14: Int, x15: Int, x16: Int, x17: Int, x18: Int, x19: Int, x20: Int, x21: Int, x22: Int, x23: Int) { }
+ ^
+one error found
diff --git a/test/files/neg/t3631.scala b/test/files/neg/t3631.scala
new file mode 100644
index 0000000000..bcf91619ee
--- /dev/null
+++ b/test/files/neg/t3631.scala
@@ -0,0 +1,3 @@
+case class X22(x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int, x8: Int, x9: Int, x10: Int, x11: Int, x12: Int, x13: Int, x14: Int, x15: Int, x16: Int, x17: Int, x18: Int, x19: Int, x20: Int, x21: Int, x22: Int) { }
+
+case class X23(x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int, x8: Int, x9: Int, x10: Int, x11: Int, x12: Int, x13: Int, x14: Int, x15: Int, x16: Int, x17: Int, x18: Int, x19: Int, x20: Int, x21: Int, x22: Int, x23: Int) { } \ No newline at end of file
diff --git a/test/files/neg/t3649.check b/test/files/neg/t3649.check
new file mode 100644
index 0000000000..76d68fa3b7
--- /dev/null
+++ b/test/files/neg/t3649.check
@@ -0,0 +1,10 @@
+t3649.scala:1: error: C is already defined as (compiler-generated) case class companion object C
+object T { class C(s: String = ""); val C = 0 }
+ ^
+t3649.scala:2: error: C is already defined as (compiler-generated) case class companion object C
+object U { class C(val s: String = ""); val C = new C() {} }
+ ^
+t3649.scala:2: error: not enough arguments for constructor C: (s: String)U.C
+object U { class C(val s: String = ""); val C = new C() {} }
+ ^
+three errors found
diff --git a/test/files/neg/t3649.scala b/test/files/neg/t3649.scala
new file mode 100644
index 0000000000..2aaff96100
--- /dev/null
+++ b/test/files/neg/t3649.scala
@@ -0,0 +1,2 @@
+object T { class C(s: String = ""); val C = 0 }
+object U { class C(val s: String = ""); val C = new C() {} }
diff --git a/test/files/neg/t3653.check b/test/files/neg/t3653.check
new file mode 100644
index 0000000000..ac6e2ca9dc
--- /dev/null
+++ b/test/files/neg/t3653.check
@@ -0,0 +1,7 @@
+t3653.scala:3: error: double definition:
+method x:(implicit x: Int)Int and
+method x:(i: Int)Int at line 2
+have same type after erasure: (x: Int)Int
+ def x(implicit x: Int) = 5
+ ^
+one error found
diff --git a/test/files/neg/t3653.scala b/test/files/neg/t3653.scala
new file mode 100644
index 0000000000..96cf96008a
--- /dev/null
+++ b/test/files/neg/t3653.scala
@@ -0,0 +1,4 @@
+class B {
+ def x(i: Int) = 3
+ def x(implicit x: Int) = 5
+} \ No newline at end of file
diff --git a/test/files/neg/t3663.check b/test/files/neg/t3663.check
new file mode 100644
index 0000000000..c4b27ef211
--- /dev/null
+++ b/test/files/neg/t3663.check
@@ -0,0 +1,4 @@
+main.scala:11: error: variable foo in class PackageProtected cannot be accessed in test.Test
+ println(t.foo)
+ ^
+one error found
diff --git a/test/files/neg/t3663/PackageProtected.java b/test/files/neg/t3663/PackageProtected.java
new file mode 100644
index 0000000000..f4535a55b4
--- /dev/null
+++ b/test/files/neg/t3663/PackageProtected.java
@@ -0,0 +1,5 @@
+package test;
+
+class PackageProtected {
+ int foo;
+}
diff --git a/test/files/neg/t3663/main.scala b/test/files/neg/t3663/main.scala
new file mode 100644
index 0000000000..29619550cc
--- /dev/null
+++ b/test/files/neg/t3663/main.scala
@@ -0,0 +1,14 @@
+package test
+
+final class Test extends PackageProtected {
+ def bar = foo
+}
+
+package another {
+ object Main {
+ def bug(t: Test) {
+ // Can always be replicated.
+ println(t.foo)
+ }
+ }
+} \ No newline at end of file
diff --git a/test/files/neg/t3683a.check b/test/files/neg/t3683a.check
new file mode 100644
index 0000000000..18e80dd5e8
--- /dev/null
+++ b/test/files/neg/t3683a.check
@@ -0,0 +1,6 @@
+t3683a.scala:14: error: match is not exhaustive!
+missing combination XX
+
+ w match {
+ ^
+one error found
diff --git a/test/files/neg/t3683a.flags b/test/files/neg/t3683a.flags
new file mode 100644
index 0000000000..85d8eb2ba2
--- /dev/null
+++ b/test/files/neg/t3683a.flags
@@ -0,0 +1 @@
+-Xfatal-warnings
diff --git a/test/files/neg/t3683a.scala b/test/files/neg/t3683a.scala
new file mode 100644
index 0000000000..6d1915213a
--- /dev/null
+++ b/test/files/neg/t3683a.scala
@@ -0,0 +1,20 @@
+sealed trait Foo
+sealed trait Bar extends Foo
+sealed trait W[T >: Bar <: Foo]
+case class X() extends W[Foo]
+case class XX() extends W[Bar]
+case class Y() extends W[Bar]
+case class Z[T >: Bar <: Foo](
+ z1: W[T]
+) extends W[T]
+
+object Main {
+ // should warn for not including XX()
+ def f1(w: W[Bar]): Int = {
+ w match {
+ // case XX() => 2
+ case Y() => 1
+ case Z(z) => f1(z)
+ }
+ }
+} \ No newline at end of file
diff --git a/test/files/neg/t3683b.check b/test/files/neg/t3683b.check
new file mode 100644
index 0000000000..6e3369241b
--- /dev/null
+++ b/test/files/neg/t3683b.check
@@ -0,0 +1,8 @@
+t3683b.scala:15: error: constructor cannot be instantiated to expected type;
+ found : X
+ required: W[Bar]
+Note: Foo >: Bar (and X <: W[Foo]), but trait W is invariant in type T.
+You may wish to define T as -T instead. (SLS 4.5)
+ case X() => 1
+ ^
+one error found
diff --git a/test/files/neg/t3683b.scala b/test/files/neg/t3683b.scala
new file mode 100644
index 0000000000..fbf75b6856
--- /dev/null
+++ b/test/files/neg/t3683b.scala
@@ -0,0 +1,21 @@
+sealed trait Foo
+sealed trait Bar extends Foo
+sealed trait W[T >: Bar <: Foo]
+case class X() extends W[Foo]
+case class XX() extends W[Bar]
+case class Y() extends W[Bar]
+case class Z[T >: Bar <: Foo](
+ z1: W[T]
+) extends W[T]
+
+object Main {
+ // should fail for including X()
+ def f1(w: W[Bar]): Int = {
+ w match {
+ case X() => 1
+ case XX() => 2
+ case Y() => 1
+ case Z(z) => f1(z)
+ }
+ }
+} \ No newline at end of file
diff --git a/test/files/neg/t3691.check b/test/files/neg/t3691.check
new file mode 100644
index 0000000000..cd7b440dce
--- /dev/null
+++ b/test/files/neg/t3691.check
@@ -0,0 +1,16 @@
+t3691.scala:4: error: type mismatch;
+ found : Object with Test.A[String]
+ required: AnyRef{type A[x]}
+ val b = (new A[String]{}): { type A[x] } // not ok
+ ^
+t3691.scala:5: error: type mismatch;
+ found : Object with Test.A[String]
+ required: AnyRef{type A}
+ val c = (new A[String]{}): { type A } // not ok
+ ^
+t3691.scala:7: error: type mismatch;
+ found : Object{type A = String}
+ required: AnyRef{type A[X]}
+ val x = (new { type A = String }): { type A[X] } // not ok
+ ^
+three errors found
diff --git a/test/files/neg/t3691.scala b/test/files/neg/t3691.scala
new file mode 100644
index 0000000000..69e8bef630
--- /dev/null
+++ b/test/files/neg/t3691.scala
@@ -0,0 +1,11 @@
+object Test {
+ trait A[X] { type A[x <: X] = x }
+ val a = (new A[String]{}): { type A[x <: String] } // ok
+ val b = (new A[String]{}): { type A[x] } // not ok
+ val c = (new A[String]{}): { type A } // not ok
+
+ val x = (new { type A = String }): { type A[X] } // not ok
+//a: AnyRef{type A[X]}
+
+ identity[x.A[Any]] _
+} \ No newline at end of file
diff --git a/test/files/neg/t3692.check b/test/files/neg/t3692.check
new file mode 100644
index 0000000000..96ddd2a461
--- /dev/null
+++ b/test/files/neg/t3692.check
@@ -0,0 +1,4 @@
+t3692.scala:15: error: unreachable code
+ case m2: Map[T, Int] => new java.util.HashMap[T, Integer]
+ ^
+one error found
diff --git a/test/files/neg/t3692.scala b/test/files/neg/t3692.scala
new file mode 100644
index 0000000000..151535ae94
--- /dev/null
+++ b/test/files/neg/t3692.scala
@@ -0,0 +1,19 @@
+import java.lang.Integer
+
+object ManifestTester {
+ def main(args: Array[String]) = {
+ val map = Map("John" -> 1, "Josh" -> 2)
+ new ManifestTester().toJavaMap(map)
+ }
+}
+
+class ManifestTester {
+ private final def toJavaMap[T, V](map: Map[T, V])(implicit m1: Manifest[T], m2: Manifest[V]): java.util.Map[_, _] = {
+ map match {
+ case m0: Map[Int, Int] => new java.util.HashMap[Integer, Integer]
+ case m1: Map[Int, V] => new java.util.HashMap[Integer, V]
+ case m2: Map[T, Int] => new java.util.HashMap[T, Integer]
+ case _ => new java.util.HashMap[T, V]
+ }
+ }
+} \ No newline at end of file
diff --git a/test/files/neg/t3714-neg.check b/test/files/neg/t3714-neg.check
new file mode 100644
index 0000000000..2db0655502
--- /dev/null
+++ b/test/files/neg/t3714-neg.check
@@ -0,0 +1,13 @@
+t3714-neg.scala:17: error: value break in class BreakImpl cannot be accessed in BreakImpl
+ Access to protected value break not permitted because
+ enclosing object Test is not a subclass of
+ class BreakImpl where target is defined
+ case b: BreakImpl => b.break
+ ^
+t3714-neg.scala:25: error: value break in class BreakImpl cannot be accessed in BreakImpl
+ Access to protected value break not permitted because
+ enclosing object Test is not a subclass of
+ class BreakImpl where target is defined
+ case b: BreakImpl => b.break
+ ^
+two errors found
diff --git a/test/files/neg/t3714-neg.scala b/test/files/neg/t3714-neg.scala
new file mode 100644
index 0000000000..4b56f9348c
--- /dev/null
+++ b/test/files/neg/t3714-neg.scala
@@ -0,0 +1,41 @@
+// this is a slight negative twist on run/t3714.scala.
+trait Break {
+ protected val break: Int;
+}
+
+class BreakImpl(protected val break: Int) extends Break { }
+object BreakImpl {
+ def apply(x: Int): Break = new BreakImpl(x)
+ def unapply(x: Any) = x match {
+ case x: BreakImpl => Some(x.break)
+ case _ => None
+ }
+}
+
+object Test {
+ def f1(x: Break) = x match {
+ case b: BreakImpl => b.break
+ case b => -1
+ }
+ def f2(x: Break) = x match {
+ case BreakImpl(x) => x
+ case _ => -1
+ }
+ def f3(x: Any) = x match {
+ case b: BreakImpl => b.break
+ case b => -1
+ }
+ def f4(x: Any) = x match {
+ case BreakImpl(x) => x
+ case _ => -1
+ }
+
+ def main(args: Array[String]) {
+ val break = BreakImpl(22)
+ assert(f1(break) == 22)
+ assert(f2(break) == 22)
+ assert(f3(break) == 22)
+ assert(f4(break) == 22)
+ }
+}
+
diff --git a/test/files/neg/t3736.check b/test/files/neg/t3736.check
new file mode 100644
index 0000000000..7a20f6c08b
--- /dev/null
+++ b/test/files/neg/t3736.check
@@ -0,0 +1,16 @@
+t3736.scala:4: error: super not allowed here: use this.isInstanceOf instead
+ def f2 = super.isInstanceOf[String]
+ ^
+t3736.scala:5: error: super not allowed here: use this.asInstanceOf instead
+ def f3 = super.asInstanceOf[AnyRef]
+ ^
+t3736.scala:6: error: super not allowed here: use this.== instead
+ def f4 = super.==(new AnyRef)
+ ^
+t3736.scala:7: error: super not allowed here: use this.!= instead
+ def f5 = super.!=(new AnyRef)
+ ^
+t3736.scala:8: error: super not allowed here: use this.## instead
+ def f6 = super.##
+ ^
+5 errors found
diff --git a/test/files/neg/t3736.scala b/test/files/neg/t3736.scala
new file mode 100644
index 0000000000..1efa397928
--- /dev/null
+++ b/test/files/neg/t3736.scala
@@ -0,0 +1,34 @@
+object Test {
+ class A {
+ def f1 = super.toString
+ def f2 = super.isInstanceOf[String]
+ def f3 = super.asInstanceOf[AnyRef]
+ def f4 = super.==(new AnyRef)
+ def f5 = super.!=(new AnyRef)
+ def f6 = super.##
+ }
+
+ // Ill-advised overloads to be sure...
+ class B {
+ def ##(x: String) = true
+ def ==(x1: String, xs: List[_]) = true
+ def !=(x1: String, xs: List[_]) = true
+ }
+
+ class C extends B {
+ override def ##(x: String) = super.##(x)
+ override def ==(x1: String, xs: List[_]) = super.==(x1, xs)
+ override def !=(x1: String, xs: List[_]) = super.!=(x1, xs)
+ }
+
+ def main(args: Array[String]): Unit = {
+ val x = new A
+ x.f1
+ x.f2
+ x.f3
+ x.f4
+ x.f5
+ x.f6
+ }
+}
+
diff --git a/test/files/neg/t3757.check b/test/files/neg/t3757.check
new file mode 100644
index 0000000000..1507df8c4f
--- /dev/null
+++ b/test/files/neg/t3757.check
@@ -0,0 +1,4 @@
+B.scala:4: error: method foo overrides nothing
+ override def foo = "B"
+ ^
+one error found
diff --git a/test/files/neg/t3757/A.java b/test/files/neg/t3757/A.java
new file mode 100644
index 0000000000..37da86fe15
--- /dev/null
+++ b/test/files/neg/t3757/A.java
@@ -0,0 +1,5 @@
+package a;
+
+public abstract class A {
+ abstract String foo(); // package protected!
+} \ No newline at end of file
diff --git a/test/files/neg/t3757/B.scala b/test/files/neg/t3757/B.scala
new file mode 100644
index 0000000000..68766a9f6e
--- /dev/null
+++ b/test/files/neg/t3757/B.scala
@@ -0,0 +1,5 @@
+package b
+
+class B extends a.A {
+ override def foo = "B"
+} \ No newline at end of file
diff --git a/test/files/neg/t3769.check b/test/files/neg/t3769.check
new file mode 100644
index 0000000000..40ccf05ff3
--- /dev/null
+++ b/test/files/neg/t3769.check
@@ -0,0 +1,7 @@
+t3769.scala:2: error: in XML literal: expected closing tag of a
+ val x = <b> <c><a></c> {"text"} </b>
+ ^
+t3769.scala:2: error: start tag was here: a>
+ val x = <b> <c><a></c> {"text"} </b>
+ ^
+two errors found
diff --git a/test/files/neg/t3769.scala b/test/files/neg/t3769.scala
new file mode 100644
index 0000000000..0132b59edf
--- /dev/null
+++ b/test/files/neg/t3769.scala
@@ -0,0 +1,3 @@
+object Test {
+ val x = <b> <c><a></c> {"text"} </b>
+}
diff --git a/test/files/neg/t3776.check b/test/files/neg/t3776.check
new file mode 100644
index 0000000000..4a5284cf0f
--- /dev/null
+++ b/test/files/neg/t3776.check
@@ -0,0 +1,4 @@
+t3776.scala:8: error: value someOperation is not a member of _$1
+ def parsedAs[T](v: T) = MyParser.parse(pattern, a).get someOperation v
+ ^
+one error found
diff --git a/test/files/neg/t3776.scala b/test/files/neg/t3776.scala
new file mode 100644
index 0000000000..454f914316
--- /dev/null
+++ b/test/files/neg/t3776.scala
@@ -0,0 +1,10 @@
+import util.parsing.combinator.{PackratParsers, RegexParsers}
+
+object MyParser extends RegexParsers with PackratParsers {
+}
+
+object Test {
+ class ParsedAs(a: String) (implicit pattern: MyParser.Parser[_]) {
+ def parsedAs[T](v: T) = MyParser.parse(pattern, a).get someOperation v
+ }
+}
diff --git a/test/files/neg/t3816.check b/test/files/neg/t3816.check
new file mode 100644
index 0000000000..3658e76b64
--- /dev/null
+++ b/test/files/neg/t3816.check
@@ -0,0 +1,7 @@
+t3816.scala:30: error: stable identifier required, but syncID found.
+ case Some( `syncID` ) =>
+ ^
+t3816.scala:38: error: stable identifier required, but Test.this.foo found.
+ case Some( `foo` ) =>
+ ^
+two errors found
diff --git a/test/files/neg/t3816.scala b/test/files/neg/t3816.scala
new file mode 100644
index 0000000000..b7f3fde699
--- /dev/null
+++ b/test/files/neg/t3816.scala
@@ -0,0 +1,42 @@
+class B {
+ def ::(a: List[Int]) {
+ a match {
+ case x::xs =>
+ case _ =>
+ }
+ }
+}
+
+object Test {
+ def testSuccess1( x: Any ) = {
+ val stable = 2
+ x match {
+ case Some( `stable` ) =>
+ case _ =>
+ }
+ }
+
+ val bar = 3
+ def testSuccess2( x: Any ) = {
+ x match {
+ case Some( `bar` ) =>
+ case _ =>
+ }
+ }
+
+ def testFail1( x: Any ) = {
+ var syncID = 0
+ x match {
+ case Some( `syncID` ) =>
+ case _ =>
+ }
+ }
+
+ var foo = 0
+ def testFail2( x: Any ) = {
+ x match {
+ case Some( `foo` ) =>
+ case _ =>
+ }
+ }
+}
diff --git a/test/files/neg/t3873.check b/test/files/neg/t3873.check
new file mode 100644
index 0000000000..54d6abdf63
--- /dev/null
+++ b/test/files/neg/t3873.check
@@ -0,0 +1,6 @@
+t3873.scala:11: error: type mismatch;
+ found : Test.a.B
+ required: a.B
+ wrongf(new A)(a.b) // should not compile -- TODO: improve error message? the "a" is ambiguous
+ ^
+one error found
diff --git a/test/files/neg/t3873.scala b/test/files/neg/t3873.scala
new file mode 100644
index 0000000000..e7815f0937
--- /dev/null
+++ b/test/files/neg/t3873.scala
@@ -0,0 +1,12 @@
+class A {
+ class B
+ def b: B = new B
+}
+
+object Test {
+ def wrongf(a: A)(b: a.B): a.B = b
+
+ val a = new A
+ wrongf(a)(a.b)
+ wrongf(new A)(a.b) // should not compile -- TODO: improve error message? the "a" is ambiguous
+} \ No newline at end of file
diff --git a/test/files/neg/t3909.check b/test/files/neg/t3909.check
new file mode 100644
index 0000000000..7da0195607
--- /dev/null
+++ b/test/files/neg/t3909.check
@@ -0,0 +1,4 @@
+t3909.scala:1: error: in object DO, multiple overloaded alternatives of m1 define default arguments
+object DO {
+ ^
+one error found
diff --git a/test/files/neg/t3909.scala b/test/files/neg/t3909.scala
new file mode 100644
index 0000000000..758dc70fd4
--- /dev/null
+++ b/test/files/neg/t3909.scala
@@ -0,0 +1,12 @@
+object DO {
+ class Extras { }
+ object Extras { val defaultValue = new Extras }
+
+ def m1(str: String, extraStuff: Extras = Extras.defaultValue): Int = str.length
+ def m1(i: Int, extraStuff: Extras = Extras.defaultValue): Int = 2 * i
+
+ def main(args: Array[String]): Unit = {
+ val m1s = m1("foo")
+ val m1i = m1(42)
+ }
+}
diff --git a/test/files/neg/t391.check b/test/files/neg/t391.check
new file mode 100644
index 0000000000..879d9af71f
--- /dev/null
+++ b/test/files/neg/t391.check
@@ -0,0 +1,13 @@
+t391.scala:2: error: identifier expected but 'def' found.
+ def fun1(def x: Int): Int = x; // the "def x" is illegal
+ ^
+t391.scala:4: error: ':' expected but '}' found.
+}
+^
+t391.scala:6: error: identifier expected but 'def' found.
+class E(def x: Int); // the "def x" is illegal
+ ^
+t391.scala:6: error: ':' expected but eof found.
+class E(def x: Int); // the "def x" is illegal
+ ^
+four errors found
diff --git a/test/files/neg/bug391.scala b/test/files/neg/t391.scala
index 08c083baa5..08c083baa5 100644
--- a/test/files/neg/bug391.scala
+++ b/test/files/neg/t391.scala
diff --git a/test/files/neg/t3913.check b/test/files/neg/t3913.check
new file mode 100644
index 0000000000..d85e5c5bea
--- /dev/null
+++ b/test/files/neg/t3913.check
@@ -0,0 +1,4 @@
+t3913.scala:2: error: super constructor cannot be passed a self reference unless parameter is declared by-name
+object LimboStage extends Stage( Set( LimboStage ))
+ ^
+one error found
diff --git a/test/files/neg/t3913.scala b/test/files/neg/t3913.scala
new file mode 100644
index 0000000000..e0917ff3e3
--- /dev/null
+++ b/test/files/neg/t3913.scala
@@ -0,0 +1,8 @@
+class Stage( val transits: Set[ Stage ])
+object LimboStage extends Stage( Set( LimboStage ))
+
+object Test {
+ def main( args: Array[ String ]) {
+ val x = LimboStage
+ }
+}
diff --git a/test/files/neg/t3934.check b/test/files/neg/t3934.check
new file mode 100644
index 0000000000..405ed2e879
--- /dev/null
+++ b/test/files/neg/t3934.check
@@ -0,0 +1,13 @@
+t3934.scala:15: error: method f2 in class J cannot be accessed in test.J
+ Access to protected method f2 not permitted because
+ enclosing class S1 in package nest is not a subclass of
+ class J in package test where target is defined
+ def g2(x: J) = x.f2()
+ ^
+t3934.scala:20: error: method f2 in class J cannot be accessed in test.J
+ Access to protected method f2 not permitted because
+ prefix type test.J does not conform to
+ class S2 in package nest where the access take place
+ def g2(x: J) = x.f2()
+ ^
+two errors found
diff --git a/test/files/neg/t3934.scala b/test/files/neg/t3934.scala
new file mode 100644
index 0000000000..46e9088af3
--- /dev/null
+++ b/test/files/neg/t3934.scala
@@ -0,0 +1,23 @@
+package test {
+
+class J {
+ def f1(): Int = { return 5; }
+ protected def f2(): Int = { return 5; }
+}
+
+}
+
+package test {
+package nest {
+
+class S1 {
+ def g1(x: J) = x.f1()
+ def g2(x: J) = x.f2()
+}
+
+class S2 extends J {
+ def g1(x: J) = x.f1()
+ def g2(x: J) = x.f2()
+}
+
+}}
diff --git a/test/files/neg/t3977.check b/test/files/neg/t3977.check
new file mode 100644
index 0000000000..9da118ee91
--- /dev/null
+++ b/test/files/neg/t3977.check
@@ -0,0 +1,4 @@
+t3977.scala:12: error: could not find implicit value for parameter w: False#If[E]
+ new NotNull
+ ^
+one error found
diff --git a/test/files/neg/t3977.scala b/test/files/neg/t3977.scala
new file mode 100644
index 0000000000..f55a832c52
--- /dev/null
+++ b/test/files/neg/t3977.scala
@@ -0,0 +1,13 @@
+trait Bool {
+ type If[T]
+}
+
+trait False extends Bool {
+ type If[F] = F
+}
+
+class Field[E, N <: Bool](implicit val w: N#If[E]) {
+ type NotNull = Field[E, False]
+
+ new NotNull
+} \ No newline at end of file
diff --git a/test/files/neg/t3987.check b/test/files/neg/t3987.check
new file mode 100644
index 0000000000..a9f7912b77
--- /dev/null
+++ b/test/files/neg/t3987.check
@@ -0,0 +1,7 @@
+t3987.scala:11: error: type mismatch;
+ found : Gox
+ required: Test.GoxZed
+ (which expands to) t#Zed forSome { type t <: Gox }
+ val y: GoxZed = x
+ ^
+one error found
diff --git a/test/files/neg/t3987.scala b/test/files/neg/t3987.scala
new file mode 100644
index 0000000000..c97d57b38f
--- /dev/null
+++ b/test/files/neg/t3987.scala
@@ -0,0 +1,13 @@
+class Gox {
+ object Zed { }
+ class Zed { }
+}
+
+object Test {
+ type GoxZed = t#Zed forSome { type t <: Gox }
+
+ def main(args: Array[String]): Unit = {
+ val x = new Gox
+ val y: GoxZed = x
+ }
+}
diff --git a/test/files/neg/t4044.check b/test/files/neg/t4044.check
new file mode 100644
index 0000000000..75dcf63bfe
--- /dev/null
+++ b/test/files/neg/t4044.check
@@ -0,0 +1,16 @@
+t4044.scala:9: error: AnyRef takes no type parameters, expected: one
+ M[AnyRef] // error, (AnyRef :: *) not kind-conformant to (N :: * -> * -> *)
+ ^
+t4044.scala:9: error: kinds of the type arguments (<error>) do not conform to the expected kinds of the type parameters (type N).
+<error>'s type parameters do not match type N's expected parameters: <none> has no type parameters, but type N has one
+ M[AnyRef] // error, (AnyRef :: *) not kind-conformant to (N :: * -> * -> *)
+ ^
+t4044.scala:11: error: kinds of the type arguments (Test.A) do not conform to the expected kinds of the type parameters (type N).
+Test.A's type parameters do not match type N's expected parameters: type _ has no type parameters, but type O has one
+ M[A] // error, (A :: (* -> *) not kind-conformant to (N :: * -> * -> *)
+ ^
+t4044.scala:15: error: kinds of the type arguments (Test.C) do not conform to the expected kinds of the type parameters (type N).
+Test.C's type parameters do not match type N's expected parameters: type _ has one type parameter, but type _ has none
+ M[C] // error, (C :: (* -> * -> * -> *) not kind-conformant to (N :: * -> * -> *)
+ ^
+four errors found
diff --git a/test/files/neg/t4044.scala b/test/files/neg/t4044.scala
new file mode 100644
index 0000000000..aedffbb96d
--- /dev/null
+++ b/test/files/neg/t4044.scala
@@ -0,0 +1,16 @@
+object Test {
+ def M[N[O[_]]] = ()
+ type A[_] = Any
+ type B[_[_]] = Any
+ type C[_[_[_]]] = Any
+
+ M[Any] // okay, Any is kind overloaded.
+
+ M[AnyRef] // error, (AnyRef :: *) not kind-conformant to (N :: * -> * -> *)
+
+ M[A] // error, (A :: (* -> *) not kind-conformant to (N :: * -> * -> *)
+
+ M[B] // okay, (B :: (* -> * -> *) is kind-conformant to (N :: * -> * -> *)
+
+ M[C] // error, (C :: (* -> * -> * -> *) not kind-conformant to (N :: * -> * -> *)
+} \ No newline at end of file
diff --git a/test/files/neg/t4064.check b/test/files/neg/t4064.check
new file mode 100644
index 0000000000..0d0e20ded1
--- /dev/null
+++ b/test/files/neg/t4064.check
@@ -0,0 +1,4 @@
+t4064.scala:4: error: value FALSE is not a member of object Boolean
+ new Foo[Boolean](Boolean.FALSE)
+ ^
+one error found
diff --git a/test/files/neg/t4064.scala b/test/files/neg/t4064.scala
new file mode 100644
index 0000000000..097a62eae2
--- /dev/null
+++ b/test/files/neg/t4064.scala
@@ -0,0 +1,5 @@
+class Foo[T](v: T) {}
+
+object Test {
+ new Foo[Boolean](Boolean.FALSE)
+} \ No newline at end of file
diff --git a/test/files/neg/t4069.check b/test/files/neg/t4069.check
new file mode 100644
index 0000000000..91bf882cec
--- /dev/null
+++ b/test/files/neg/t4069.check
@@ -0,0 +1,16 @@
+t4069.scala:7: error: unexpected end of input: possible missing '}' in XML block
+ case 2 =>
+ ^
+t4069.scala:6: error: Missing closing brace `}' assumed here
+ </div>
+ ^
+t4069.scala:9: error: in XML literal: in XML content, please use '}}' to express '}'
+ }
+ ^
+t4069.scala:4: error: I encountered a '}' where I didn't expect one, maybe this tag isn't closed <div>
+ <div>
+ ^
+t4069.scala:10: error: '}' expected but eof found.
+}
+^
+5 errors found
diff --git a/test/files/neg/t4069.scala b/test/files/neg/t4069.scala
new file mode 100644
index 0000000000..80df6ec16d
--- /dev/null
+++ b/test/files/neg/t4069.scala
@@ -0,0 +1,10 @@
+object ParserBug {
+ 1 match {
+ case 1 =>
+ <div>
+ { 1 match { case 1 => "1"; case 2 => "2" }
+ </div>
+ case 2 =>
+ <div/>
+ }
+} \ No newline at end of file
diff --git a/test/files/neg/t4079.check b/test/files/neg/t4079.check
new file mode 100644
index 0000000000..f4c956c445
--- /dev/null
+++ b/test/files/neg/t4079.check
@@ -0,0 +1,4 @@
+t4079_2.scala:2: error: could not find implicit value for parameter f: Functor[List]
+ Cat.compose[List,Option].Functor
+ ^
+one error found
diff --git a/test/files/neg/t4079/t4079_1.scala b/test/files/neg/t4079/t4079_1.scala
new file mode 100644
index 0000000000..8dc73556c7
--- /dev/null
+++ b/test/files/neg/t4079/t4079_1.scala
@@ -0,0 +1,33 @@
+trait Functor[F[_]] {
+ def map[A,B](fa: F[A], f: A => B): F[B]
+}
+
+trait ComposeT[F[_],G[_]] {
+ type Apply[A] = F[G[A]]
+}
+
+case class Compose[F[_],G[_]]() {
+ def Functor(implicit f: Functor[F], g: Functor[G]): Functor[ComposeT[F,G]#Apply] =
+ new Functor[ComposeT[F,G]#Apply] {
+ def map[A,B](c: ComposeT[F,G]#Apply[A], h: A => B) =
+ f.map(c, (x:G[A]) => g.map(x,h))
+ }
+}
+
+object Cat {
+ def compose[F[_],G[_]] = Compose[F,G]()
+}
+
+object Functors {
+ implicit val List = new Functor[List] {
+ def map[A,B](fa: List[A], f: A => B): List[B] = fa map f
+ }
+ implicit val Option = new Functor[Option] {
+ def map[A,B](fa: Option[A], f: A => B): Option[B] = fa map f
+ }
+}
+
+object Main {
+ import Functors._
+ val cf = Cat.compose[List,Option].Functor
+}
diff --git a/test/files/neg/t4079/t4079_2.scala b/test/files/neg/t4079/t4079_2.scala
new file mode 100644
index 0000000000..9069f0ab4e
--- /dev/null
+++ b/test/files/neg/t4079/t4079_2.scala
@@ -0,0 +1,3 @@
+object Test {
+ Cat.compose[List,Option].Functor
+}
diff --git a/test/files/neg/t409.check b/test/files/neg/t409.check
new file mode 100644
index 0000000000..433d64d25d
--- /dev/null
+++ b/test/files/neg/t409.check
@@ -0,0 +1,4 @@
+t409.scala:6: error: traits or objects may not have parameters
+class Toto extends Expr with Case1(12);
+ ^
+one error found
diff --git a/test/files/neg/bug409.scala b/test/files/neg/t409.scala
index 5dac2fdaa4..5dac2fdaa4 100644
--- a/test/files/neg/bug409.scala
+++ b/test/files/neg/t409.scala
diff --git a/test/files/neg/t4091.check b/test/files/neg/t4091.check
new file mode 100644
index 0000000000..2fdd07fd4d
--- /dev/null
+++ b/test/files/neg/t4091.check
@@ -0,0 +1,4 @@
+t4091.scala:1: error: expected start of definition
+private a
+ ^
+one error found
diff --git a/test/files/neg/t4091.scala b/test/files/neg/t4091.scala
new file mode 100644
index 0000000000..7df116d5b5
--- /dev/null
+++ b/test/files/neg/t4091.scala
@@ -0,0 +1,2 @@
+private a
+class b
diff --git a/test/files/neg/t412.check b/test/files/neg/t412.check
new file mode 100644
index 0000000000..9cb467e854
--- /dev/null
+++ b/test/files/neg/t412.check
@@ -0,0 +1,5 @@
+t412.scala:11: error: stable identifier required, but A.this.c found.
+ Note that value c is not stable because its type, A.this.CX with A.this.C2, is volatile.
+ def castA(x: c.T): T2 = x;
+ ^
+one error found
diff --git a/test/files/neg/bug412.scala b/test/files/neg/t412.scala
index 54cd90da1c..54cd90da1c 100644
--- a/test/files/neg/bug412.scala
+++ b/test/files/neg/t412.scala
diff --git a/test/files/neg/t4137.check b/test/files/neg/t4137.check
new file mode 100644
index 0000000000..9767bdb1ce
--- /dev/null
+++ b/test/files/neg/t4137.check
@@ -0,0 +1,9 @@
+t4137.scala:9: error: overriding type EPC in trait A, which equals [X1]C[X1];
+ type EPC has incompatible type
+ override type EPC = C[T]
+ ^
+t4137.scala:10: error: overriding type EPC2 in trait A, which equals [X1]C[X1];
+ type EPC2 has incompatible type
+ override type EPC2[X1 <: String] = C[X1]
+ ^
+two errors found
diff --git a/test/files/neg/t4137.scala b/test/files/neg/t4137.scala
new file mode 100644
index 0000000000..68f249fdeb
--- /dev/null
+++ b/test/files/neg/t4137.scala
@@ -0,0 +1,11 @@
+trait C[T]
+
+trait A[T] {
+ type EPC[X1] = C[X1]
+ type EPC2[X1] = C[X1]
+}
+
+trait B[T] extends A[T] {
+ override type EPC = C[T]
+ override type EPC2[X1 <: String] = C[X1]
+} \ No newline at end of file
diff --git a/test/files/neg/t414.check b/test/files/neg/t414.check
new file mode 100644
index 0000000000..a855497648
--- /dev/null
+++ b/test/files/neg/t414.check
@@ -0,0 +1,12 @@
+t414.scala:5: error: pattern type is incompatible with expected type;
+ found : object Empty
+ required: IntMap[a]
+Note: if you intended to match against the class, try `case _: Empty[_]` or `case Empty()`
+ case Empty =>
+ ^
+t414.scala:7: error: type mismatch;
+ found : Unit
+ required: a
+ case _ =>
+ ^
+two errors found
diff --git a/test/files/neg/t414.scala b/test/files/neg/t414.scala
new file mode 100644
index 0000000000..2bc83eedcb
--- /dev/null
+++ b/test/files/neg/t414.scala
@@ -0,0 +1,10 @@
+case class Empty[a]() extends IntMap[a];
+case class Node[a](left: IntMap[a], keyVal: Pair[Int, a], right: IntMap[a]) extends IntMap[a];
+abstract class IntMap[a] {
+ def lookup(key: Int): a = this match {
+ case Empty =>
+ error("clef inexistante")
+ case _ =>
+ };
+
+};
diff --git a/test/files/neg/t4158.check b/test/files/neg/t4158.check
new file mode 100644
index 0000000000..3ee2627c5b
--- /dev/null
+++ b/test/files/neg/t4158.check
@@ -0,0 +1,19 @@
+t4158.scala:3: error: type mismatch;
+ found : Null(null)
+ required: Int
+Note that implicit conversions are not applicable because they are ambiguous:
+ both method Integer2intNullConflict in class LowPriorityImplicits of type (x: Null)Int
+ and method Integer2int in object Predef of type (x: Integer)Int
+ are possible conversion functions from Null(null) to Int
+ var y = null: Int
+ ^
+t4158.scala:2: error: type mismatch;
+ found : Null(null)
+ required: Int
+Note that implicit conversions are not applicable because they are ambiguous:
+ both method Integer2intNullConflict in class LowPriorityImplicits of type (x: Null)Int
+ and method Integer2int in object Predef of type (x: Integer)Int
+ are possible conversion functions from Null(null) to Int
+ var x: Int = null
+ ^
+two errors found
diff --git a/test/files/neg/t4158.scala b/test/files/neg/t4158.scala
new file mode 100644
index 0000000000..07aa69a95c
--- /dev/null
+++ b/test/files/neg/t4158.scala
@@ -0,0 +1,4 @@
+class A {
+ var x: Int = null
+ var y = null: Int
+} \ No newline at end of file
diff --git a/test/files/neg/t4163.check b/test/files/neg/t4163.check
new file mode 100644
index 0000000000..47bc78d31c
--- /dev/null
+++ b/test/files/neg/t4163.check
@@ -0,0 +1,7 @@
+t4163.scala:4: error: '<-' expected but '=' found.
+ x = 3
+ ^
+t4163.scala:5: error: illegal start of simple expression
+ y <- 0 to 100
+^
+two errors found
diff --git a/test/files/neg/t4163.scala b/test/files/neg/t4163.scala
new file mode 100644
index 0000000000..44686731d1
--- /dev/null
+++ b/test/files/neg/t4163.scala
@@ -0,0 +1,8 @@
+class Bug {
+ val z = (
+ for {
+ x = 3
+ y <- 0 to 100
+ } yield y
+ ).toArray
+}
diff --git a/test/files/neg/t4166.check b/test/files/neg/t4166.check
new file mode 100644
index 0000000000..10b77d841a
--- /dev/null
+++ b/test/files/neg/t4166.check
@@ -0,0 +1,4 @@
+t4166.scala:3: error: super constructor arguments cannot reference unconstructed `this`
+class Demo extends Base(new { Demo.this.toString }) {
+ ^
+one error found
diff --git a/test/files/neg/t4166.scala b/test/files/neg/t4166.scala
new file mode 100644
index 0000000000..a2ee0671ab
--- /dev/null
+++ b/test/files/neg/t4166.scala
@@ -0,0 +1,11 @@
+class Base(a: Any)
+
+class Demo extends Base(new { Demo.this.toString }) {
+ val x: Any = ()
+}
+
+
+class Demo2 extends Base(new { this.toString }) {
+ val x: Any = ()
+}
+
diff --git a/test/files/neg/t4174.check b/test/files/neg/t4174.check
new file mode 100644
index 0000000000..914fcff76e
--- /dev/null
+++ b/test/files/neg/t4174.check
@@ -0,0 +1,4 @@
+t4174.scala:7: error: method bar overrides nothing
+ foo(new C { override def bar = 1 })
+ ^
+one error found
diff --git a/test/files/neg/t4174.scala b/test/files/neg/t4174.scala
new file mode 100644
index 0000000000..f5242950c2
--- /dev/null
+++ b/test/files/neg/t4174.scala
@@ -0,0 +1,9 @@
+class C
+
+object Test {
+ def foo(c: C) = 0
+
+ def main(args: Array[String]): Unit = {
+ foo(new C { override def bar = 1 })
+ }
+}
diff --git a/test/files/neg/t418.check b/test/files/neg/t418.check
new file mode 100644
index 0000000000..1489547823
--- /dev/null
+++ b/test/files/neg/t418.check
@@ -0,0 +1,7 @@
+t418.scala:2: error: not found: value Foo12340771
+ null match { case Foo12340771.Bar(x) => x }
+ ^
+t418.scala:2: error: not found: value x
+ null match { case Foo12340771.Bar(x) => x }
+ ^
+two errors found
diff --git a/test/pending/pos/bug0418.scala b/test/files/neg/t418.scala
index 67007010d4..67007010d4 100644
--- a/test/pending/pos/bug0418.scala
+++ b/test/files/neg/t418.scala
diff --git a/test/files/neg/t4196.check b/test/files/neg/t4196.check
new file mode 100644
index 0000000000..a0586819e9
--- /dev/null
+++ b/test/files/neg/t4196.check
@@ -0,0 +1,4 @@
+t4196.scala:5: error: Some[String] does not take parameters
+ }.apply("first param") ("spurious param")
+ ^
+one error found
diff --git a/test/files/neg/t4196.scala b/test/files/neg/t4196.scala
new file mode 100644
index 0000000000..ac00b19bee
--- /dev/null
+++ b/test/files/neg/t4196.scala
@@ -0,0 +1,6 @@
+object Weird {
+ { (s: String) =>
+ val foo = Some(s); // to illustrate that vals are printed in the error
+ foo
+ }.apply("first param") ("spurious param")
+} \ No newline at end of file
diff --git a/test/files/neg/t421.check b/test/files/neg/t421.check
new file mode 100644
index 0000000000..e81df52ab0
--- /dev/null
+++ b/test/files/neg/t421.check
@@ -0,0 +1,4 @@
+t421.scala:5: error: star patterns must correspond with varargs parameters
+ case Bar("foo",_*) => error("huh?");
+ ^
+one error found
diff --git a/test/files/neg/bug421.scala b/test/files/neg/t421.scala
index 43f6c9dafd..43f6c9dafd 100644
--- a/test/files/neg/bug421.scala
+++ b/test/files/neg/t421.scala
diff --git a/test/files/neg/t4217.check b/test/files/neg/t4217.check
new file mode 100644
index 0000000000..e8cd5fd69e
--- /dev/null
+++ b/test/files/neg/t4217.check
@@ -0,0 +1,4 @@
+t4217.scala:2: error: 'case' expected but '}' found.
+ 42 match { }
+ ^
+one error found
diff --git a/test/files/neg/t4217.scala b/test/files/neg/t4217.scala
new file mode 100644
index 0000000000..9343a9be54
--- /dev/null
+++ b/test/files/neg/t4217.scala
@@ -0,0 +1,3 @@
+object A extends App {
+ 42 match { }
+}
diff --git a/test/files/neg/t4221.check b/test/files/neg/t4221.check
new file mode 100644
index 0000000000..46c2d10a98
--- /dev/null
+++ b/test/files/neg/t4221.check
@@ -0,0 +1,6 @@
+t4221.scala:8: error: type mismatch;
+ found : Unit
+ required: Wrapper[S]
+ def wrap[S <: Cl#Sub[S]](v: S): Wrapper[S] = {
+ ^
+one error found
diff --git a/test/files/neg/t4221.scala b/test/files/neg/t4221.scala
new file mode 100644
index 0000000000..c979f7936e
--- /dev/null
+++ b/test/files/neg/t4221.scala
@@ -0,0 +1,10 @@
+class Cl {
+ class Sub[TheSub <: Sub[TheSub]]
+}
+
+case class Wrapper[T](v: T)
+
+object O {
+ def wrap[S <: Cl#Sub[S]](v: S): Wrapper[S] = {
+ }
+}
diff --git a/test/files/neg/t425.check b/test/files/neg/t425.check
new file mode 100644
index 0000000000..77ea0c5a4b
--- /dev/null
+++ b/test/files/neg/t425.check
@@ -0,0 +1,4 @@
+t425.scala:3: error: case class B has case ancestor Temp.A, but case-to-case inheritance is prohibited. To overcome this limitation, use extractors to pattern match on non-leaf nodes.
+ case class B(override val x: Int, y: Double) extends A(x)
+ ^
+one error found
diff --git a/test/pending/pos/t425.scala b/test/files/neg/t425.scala
index e50c50ac35..e50c50ac35 100644
--- a/test/pending/pos/t425.scala
+++ b/test/files/neg/t425.scala
diff --git a/test/files/neg/t4302.check b/test/files/neg/t4302.check
new file mode 100644
index 0000000000..327425acb0
--- /dev/null
+++ b/test/files/neg/t4302.check
@@ -0,0 +1,4 @@
+t4302.scala:2: error: abstract type T in type T is unchecked since it is eliminated by erasure
+ def hasMatch[T](x: AnyRef) = x.isInstanceOf[T]
+ ^
+one error found
diff --git a/test/files/neg/t4302.flags b/test/files/neg/t4302.flags
new file mode 100644
index 0000000000..779916d58f
--- /dev/null
+++ b/test/files/neg/t4302.flags
@@ -0,0 +1 @@
+-unchecked -Xfatal-warnings \ No newline at end of file
diff --git a/test/files/neg/t4302.scala b/test/files/neg/t4302.scala
new file mode 100644
index 0000000000..53565f05c2
--- /dev/null
+++ b/test/files/neg/t4302.scala
@@ -0,0 +1,3 @@
+object Test {
+ def hasMatch[T](x: AnyRef) = x.isInstanceOf[T]
+}
diff --git a/test/files/neg/t4417.check b/test/files/neg/t4417.check
new file mode 100644
index 0000000000..4e3f6c0b10
--- /dev/null
+++ b/test/files/neg/t4417.check
@@ -0,0 +1,7 @@
+t4417.scala:11: error: constructor Pixel$mcD$sp in class Pixel$mcD$sp cannot be accessed in object Pixel
+ Access to protected constructor Pixel$mcD$sp not permitted because
+ enclosing object Pixel is not a subclass of
+ class Pixel$mcD$sp where target is defined
+ def apply(v: Double): Pixel1d = new Pixel1d(v)
+ ^
+one error found
diff --git a/test/files/neg/t4417.scala b/test/files/neg/t4417.scala
new file mode 100644
index 0000000000..7f104e58bf
--- /dev/null
+++ b/test/files/neg/t4417.scala
@@ -0,0 +1,17 @@
+
+
+
+
+class Pixel[@specialized T] protected (var v: T)
+
+
+object Pixel {
+ type Pixel1d = Pixel[Double]
+
+ def apply(v: Double): Pixel1d = new Pixel1d(v)
+}
+
+
+
+
+
diff --git a/test/files/neg/t4419.check b/test/files/neg/t4419.check
new file mode 100644
index 0000000000..a53e0c95da
--- /dev/null
+++ b/test/files/neg/t4419.check
@@ -0,0 +1,4 @@
+t4419.scala:2: error: forward reference extends over definition of value b
+ { val b = a; val a = 1 ; println(a) }
+ ^
+one error found
diff --git a/test/files/neg/t4419.scala b/test/files/neg/t4419.scala
new file mode 100644
index 0000000000..5dc86d354e
--- /dev/null
+++ b/test/files/neg/t4419.scala
@@ -0,0 +1,3 @@
+class A {
+ { val b = a; val a = 1 ; println(a) }
+} \ No newline at end of file
diff --git a/test/files/neg/t4425.check b/test/files/neg/t4425.check
new file mode 100644
index 0000000000..4ff4b1eec0
--- /dev/null
+++ b/test/files/neg/t4425.check
@@ -0,0 +1,4 @@
+t4425.scala:3: error: erroneous or inaccessible type
+ 42 match { case _ X _ => () }
+ ^
+one error found
diff --git a/test/files/neg/t4425.scala b/test/files/neg/t4425.scala
new file mode 100644
index 0000000000..d8cc6922f7
--- /dev/null
+++ b/test/files/neg/t4425.scala
@@ -0,0 +1,4 @@
+object Foo {
+ object X { def unapply(x : Int)(y : Option[Int] = None) = None }
+ 42 match { case _ X _ => () }
+}
diff --git a/test/files/neg/t4431.check b/test/files/neg/t4431.check
new file mode 100644
index 0000000000..7896ec1a62
--- /dev/null
+++ b/test/files/neg/t4431.check
@@ -0,0 +1,7 @@
+t4431.scala:5: error: class BB needs to be abstract, since there is a deferred declaration of method f which is not implemented in a subclass
+ class BB extends B { def f (): Unit }
+ ^
+t4431.scala:8: error: trait cannot redefine final method from class AnyRef
+ trait C { def wait (): Unit }
+ ^
+two errors found
diff --git a/test/files/neg/t4431.scala b/test/files/neg/t4431.scala
new file mode 100644
index 0000000000..91e4abfe36
--- /dev/null
+++ b/test/files/neg/t4431.scala
@@ -0,0 +1,16 @@
+object Test {
+ // this works.
+ class B { final def f(): Unit = () }
+ trait A extends B { def f (): Unit }
+ class BB extends B { def f (): Unit }
+
+ // this earns a VerifyError.
+ trait C { def wait (): Unit }
+ class D { }
+
+ def main(args: Array[String]): Unit = {
+ new B with A { }
+ new BB
+// new D with C { }
+ }
+}
diff --git a/test/files/neg/t4457_1.check b/test/files/neg/t4457_1.check
new file mode 100644
index 0000000000..c6b83c6ce5
--- /dev/null
+++ b/test/files/neg/t4457_1.check
@@ -0,0 +1,7 @@
+t4457_1.scala:27: error: ambiguous reference to overloaded definition,
+both method aFunc in object ImplicitConvAmbiguity2 of type [A](a: ImplicitConvAmbiguity2.NZ[A])ImplicitConvAmbiguity2.AA[Float]
+and method aFunc in object ImplicitConvAmbiguity2 of type [A](a: ImplicitConvAmbiguity2.NE[A])ImplicitConvAmbiguity2.AA[A]
+match argument types (Float)
+ val x = aFunc(4F)
+ ^
+one error found
diff --git a/test/files/neg/t4457_1.scala b/test/files/neg/t4457_1.scala
new file mode 100644
index 0000000000..91d9bc9f51
--- /dev/null
+++ b/test/files/neg/t4457_1.scala
@@ -0,0 +1,33 @@
+object ImplicitConvAmbiguity2 {
+
+ class N[T]
+ class NE[T] extends N[T]
+ class NN[T] extends N[T]
+ class NQ[T] extends N[T]
+ class NZ[T] extends N[T]
+ class AA[A]
+ class BB[A]
+
+ implicit def conv1(i: Float) = new NE[Float]
+ implicit def conv3(op: AA[java.util.TooManyListenersException]) = new N[java.util.TooManyListenersException]
+ implicit def conv4(op: AA[Float]) = new N[Float]
+ implicit def conv7(i: Float) = new NZ[Float]
+ implicit def conv5(e: BB[java.util.GregorianCalendar]) = new N[java.util.GregorianCalendar]
+
+ // These two will be in conflict in typeMe1
+ def aFunc[A](a: NE[A]) = new AA[A]
+ def aFunc[A](a: NZ[A]) = new AA[Float]
+
+ def aFunc[A](a: NN[A]) = new BB[A]
+ def aFunc[A](a: NQ[A]) = new BB[A]
+
+ def bFunc[T](e1: N[T]) = {}
+
+ def typeMe1 {
+ val x = aFunc(4F)
+ bFunc(x)
+ }
+ def typeMe2 {
+ bFunc(aFunc(4F))
+ }
+}
diff --git a/test/files/neg/t4457_2.check b/test/files/neg/t4457_2.check
new file mode 100644
index 0000000000..770a355395
--- /dev/null
+++ b/test/files/neg/t4457_2.check
@@ -0,0 +1,13 @@
+t4457_2.scala:27: error: ambiguous reference to overloaded definition,
+both method aFunc in object ImplicitConvAmbiguity2 of type [A](a: ImplicitConvAmbiguity2.NZ[A])ImplicitConvAmbiguity2.AA[A]
+and method aFunc in object ImplicitConvAmbiguity2 of type [A](a: ImplicitConvAmbiguity2.NE[A])ImplicitConvAmbiguity2.AA[A]
+match argument types (Float)
+ val x = aFunc(4F)
+ ^
+t4457_2.scala:31: error: ambiguous reference to overloaded definition,
+both method aFunc in object ImplicitConvAmbiguity2 of type [A](a: ImplicitConvAmbiguity2.NZ[A])ImplicitConvAmbiguity2.AA[A]
+and method aFunc in object ImplicitConvAmbiguity2 of type [A](a: ImplicitConvAmbiguity2.NE[A])ImplicitConvAmbiguity2.AA[A]
+match argument types (Float)
+ bFunc(aFunc(4F))
+ ^
+two errors found
diff --git a/test/files/neg/t4457_2.scala b/test/files/neg/t4457_2.scala
new file mode 100644
index 0000000000..b2e7505cf2
--- /dev/null
+++ b/test/files/neg/t4457_2.scala
@@ -0,0 +1,33 @@
+object ImplicitConvAmbiguity2 {
+
+ class N[T]
+ class NE[T] extends N[T]
+ class NN[T] extends N[T]
+ class NQ[T] extends N[T]
+ class NZ[T] extends N[T]
+ class AA[A]
+ class BB[A]
+
+ implicit def conv1(i: Float) = new NE[Float]
+ implicit def conv3(op: AA[java.util.TooManyListenersException]) = new N[java.util.TooManyListenersException]
+ implicit def conv4(op: AA[Float]) = new N[Float]
+ implicit def conv7(i: Float) = new NZ[Float]
+ implicit def conv5(e: BB[java.util.GregorianCalendar]) = new N[java.util.GregorianCalendar]
+
+ def aFunc[A](a: NE[A]) = new AA[A]
+ def aFunc[A](a: NZ[A]) = new AA[A]
+
+ def aFunc[A](a: NN[A]) = new BB[A]
+
+ def aFunc[A](a: NQ[A]) = new BB[A]
+
+ def bFunc[T](e1: N[T]) = {}
+
+ def typeMe2 {
+ val x = aFunc(4F)
+ bFunc(x)
+ }
+ def typeMe1 {
+ bFunc(aFunc(4F))
+ }
+}
diff --git a/test/files/neg/t452.check b/test/files/neg/t452.check
new file mode 100644
index 0000000000..85197af21b
--- /dev/null
+++ b/test/files/neg/t452.check
@@ -0,0 +1,6 @@
+t452.scala:3: error: type mismatch;
+ found : Test.type (with underlying type object Test)
+ required: Test.Foo
+ def this() = this(this);
+ ^
+one error found
diff --git a/test/files/neg/bug452.scala b/test/files/neg/t452.scala
index 855406d0c4..855406d0c4 100644
--- a/test/files/neg/bug452.scala
+++ b/test/files/neg/t452.scala
diff --git a/test/files/neg/t4537.check b/test/files/neg/t4537.check
new file mode 100644
index 0000000000..931bcd0405
--- /dev/null
+++ b/test/files/neg/t4537.check
@@ -0,0 +1,4 @@
+c.scala:7: error: object Settings in package a cannot be accessed in package a
+ println(Settings.Y)
+ ^
+one error found
diff --git a/test/files/neg/t4537/a.scala b/test/files/neg/t4537/a.scala
new file mode 100644
index 0000000000..65e183c5f8
--- /dev/null
+++ b/test/files/neg/t4537/a.scala
@@ -0,0 +1,5 @@
+package a
+
+private[a] object Settings {
+ val X = 0
+} \ No newline at end of file
diff --git a/test/files/neg/t4537/b.scala b/test/files/neg/t4537/b.scala
new file mode 100644
index 0000000000..bb9dd4e15a
--- /dev/null
+++ b/test/files/neg/t4537/b.scala
@@ -0,0 +1,5 @@
+package b
+
+object Settings {
+ val Y = 0
+} \ No newline at end of file
diff --git a/test/files/neg/t4537/c.scala b/test/files/neg/t4537/c.scala
new file mode 100644
index 0000000000..379599112d
--- /dev/null
+++ b/test/files/neg/t4537/c.scala
@@ -0,0 +1,8 @@
+package b
+package c
+
+import a._
+
+object Test {
+ println(Settings.Y)
+} \ No newline at end of file
diff --git a/test/files/neg/t4584.check b/test/files/neg/t4584.check
new file mode 100644
index 0000000000..060160d76a
--- /dev/null
+++ b/test/files/neg/t4584.check
@@ -0,0 +1,4 @@
+t4584.scala:1: error: incomplete unicode escape
+class A { val /u2
+ ^
+one error found
diff --git a/test/files/neg/t4584.scala b/test/files/neg/t4584.scala
new file mode 100644
index 0000000000..b34aba91a2
--- /dev/null
+++ b/test/files/neg/t4584.scala
@@ -0,0 +1 @@
+class A { val \u2 \ No newline at end of file
diff --git a/test/files/neg/t464-neg.check b/test/files/neg/t464-neg.check
new file mode 100644
index 0000000000..aea1987b2e
--- /dev/null
+++ b/test/files/neg/t464-neg.check
@@ -0,0 +1,16 @@
+t464-neg.scala:7: error: not found: value f1
+ f1()
+ ^
+t464-neg.scala:8: error: method f1 in class A cannot be accessed in A with ScalaObject
+ super.f1()
+ ^
+t464-neg.scala:9: error: value f2 is not a member of B
+ def otherb(b2: B) = b2.f2()
+ ^
+t464-neg.scala:10: error: method f3 in class A cannot be accessed in B
+ f3()
+ ^
+t464-neg.scala:11: error: method f3 in class A cannot be accessed in A with ScalaObject
+ super.f3()
+ ^
+5 errors found
diff --git a/test/files/neg/t464-neg.scala b/test/files/neg/t464-neg.scala
new file mode 100644
index 0000000000..138fa8e869
--- /dev/null
+++ b/test/files/neg/t464-neg.scala
@@ -0,0 +1,12 @@
+class A {
+ private[this] def f1() {}
+ protected[this] def f2() {}
+ private[A] def f3() {}
+}
+class B extends A {
+ f1()
+ super.f1()
+ def otherb(b2: B) = b2.f2()
+ f3()
+ super.f3()
+} \ No newline at end of file
diff --git a/test/files/neg/t4727.check b/test/files/neg/t4727.check
new file mode 100644
index 0000000000..8a4536fec3
--- /dev/null
+++ b/test/files/neg/t4727.check
@@ -0,0 +1,11 @@
+t4727.scala:5: error: type mismatch;
+ found : Null
+ required: Int
+Note that implicit conversions are not applicable because they are ambiguous:
+ both method Integer2intNullConflict in class LowPriorityImplicits of type (x: Null)Int
+ and method Integer2int in object Predef of type (x: Integer)Int
+ are possible conversion functions from Null to Int
+Error occurred in an application involving default arguments.
+ new C[Int]
+ ^
+one error found
diff --git a/test/files/neg/t4727.scala b/test/files/neg/t4727.scala
new file mode 100644
index 0000000000..40c06713ca
--- /dev/null
+++ b/test/files/neg/t4727.scala
@@ -0,0 +1,7 @@
+class C[T](x : T = null)
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ new C[Int]
+ }
+}
diff --git a/test/files/neg/t473.check b/test/files/neg/t473.check
new file mode 100644
index 0000000000..a14222c962
--- /dev/null
+++ b/test/files/neg/t473.check
@@ -0,0 +1,4 @@
+t473.scala:3: error: super constructor cannot be passed a self reference unless parameter is declared by-name
+case object Voop extends Foo(Voop)
+ ^
+one error found
diff --git a/test/files/neg/bug473.scala b/test/files/neg/t473.scala
index c7631705ac..c7631705ac 100644
--- a/test/files/neg/bug473.scala
+++ b/test/files/neg/t473.scala
diff --git a/test/files/neg/t4762.check b/test/files/neg/t4762.check
new file mode 100644
index 0000000000..5e67f2022a
--- /dev/null
+++ b/test/files/neg/t4762.check
@@ -0,0 +1,7 @@
+t4762.scala:15: error: private[this] value x in class B shadows mutable x inherited from class A. Changes to x will not be visible within class B - you may want to give them distinct names.
+ /* (99,99) */ (this.x, this.y),
+ ^
+t4762.scala:48: error: private[this] value x in class Derived shadows mutable x inherited from class Base. Changes to x will not be visible within class Derived - you may want to give them distinct names.
+ class Derived( x : Int ) extends Base( x ) { override def toString = x.toString }
+ ^
+two errors found
diff --git a/test/files/neg/t4762.flags b/test/files/neg/t4762.flags
new file mode 100644
index 0000000000..e93641e931
--- /dev/null
+++ b/test/files/neg/t4762.flags
@@ -0,0 +1 @@
+-Xlint -Xfatal-warnings \ No newline at end of file
diff --git a/test/files/neg/t4762.scala b/test/files/neg/t4762.scala
new file mode 100644
index 0000000000..8757f4a103
--- /dev/null
+++ b/test/files/neg/t4762.scala
@@ -0,0 +1,51 @@
+// https://issues.scala-lang.org/browse/SI-4762
+
+// In A, x and y are -1.
+class A(var x: Int) {
+ val y: Int = -1
+}
+
+// In B, x and y are 99 and private[this], implicitly so
+// in the case of x.
+class B(x: Int) extends A(-1) {
+ private[this] def y: Int = 99
+
+ // Three distinct results.
+ def f = List(
+ /* (99,99) */ (this.x, this.y),
+ /* (-1,99) */ ((this: B).x, (this: B).y),
+ /* (-1,-1) */ ((this: A).x, (this: A).y)
+ )
+
+ // The 99s tell us we are reading the private[this]
+ // data of a different instance.
+ def g(b: B) = List(
+ /* (-1,99) */ (b.x, b.y),
+ /* (-1,99) */ ((b: B).x, (b: B).y),
+ /* (-1,-1) */ ((b: A).x, (b: A).y)
+ )
+}
+
+object Test {
+ def f(x: A) = /* -2 */ x.x + x.y
+ def g1(x: B) = /* -2 */ (x: A).x + (x: A).y
+ def g2(x: B) = (x: B).x + (x: B).y
+ // java.lang.IllegalAccessError: tried to access method B.y()I from class Test$
+
+ def main(args: Array[String]): Unit = {
+ val b = new B(99)
+ b.f foreach println
+ b.g(new B(99)) foreach println
+
+ println(f(b))
+ println(g1(b))
+ println(g2(b))
+ }
+}
+
+class bug4762 {
+ class Base( var x : Int ) { def increment() { x = x + 1 } }
+ class Derived( x : Int ) extends Base( x ) { override def toString = x.toString }
+
+ val derived = new Derived( 1 )
+}
diff --git a/test/files/neg/t4851.check b/test/files/neg/t4851.check
new file mode 100644
index 0000000000..8011350f23
--- /dev/null
+++ b/test/files/neg/t4851.check
@@ -0,0 +1,43 @@
+S.scala:2: error: Adapting argument list by inserting (): leaky (Object-receiving) target makes this especially dangerous.
+ signature: J(x: Any): J
+ given arguments: <none>
+ after adaptation: new J((): Unit)
+ val x1 = new J
+ ^
+S.scala:3: error: Adapting argument list by inserting (): leaky (Object-receiving) target makes this especially dangerous.
+ signature: J(x: Any): J
+ given arguments: <none>
+ after adaptation: new J((): Unit)
+ val x2 = new J()
+ ^
+S.scala:4: error: Adapting argument list by creating a 5-tuple: this may not be what you want.
+ signature: J(x: Any): J
+ given arguments: 1, 2, 3, 4, 5
+ after adaptation: new J((1, 2, 3, 4, 5): (Int, Int, Int, Int, Int))
+ val x3 = new J(1, 2, 3, 4, 5)
+ ^
+S.scala:6: error: Adapting argument list by creating a 3-tuple: this may not be what you want.
+ signature: Some.apply[A](x: A): Some[A]
+ given arguments: 1, 2, 3
+ after adaptation: Some((1, 2, 3): (Int, Int, Int))
+ val y1 = Some(1, 2, 3)
+ ^
+S.scala:7: error: Adapting argument list by creating a 3-tuple: this may not be what you want.
+ signature: Some(x: A): Some[A]
+ given arguments: 1, 2, 3
+ after adaptation: new Some((1, 2, 3): (Int, Int, Int))
+ val y2 = new Some(1, 2, 3)
+ ^
+S.scala:9: error: Adapting argument list by inserting (): this is unlikely to be what you want.
+ signature: J2[T](x: T): J2[T]
+ given arguments: <none>
+ after adaptation: new J2((): Unit)
+ val z1 = new J2
+ ^
+S.scala:10: error: Adapting argument list by inserting (): this is unlikely to be what you want.
+ signature: J2[T](x: T): J2[T]
+ given arguments: <none>
+ after adaptation: new J2((): Unit)
+ val z2 = new J2()
+ ^
+7 errors found
diff --git a/test/files/neg/t4851.flags b/test/files/neg/t4851.flags
new file mode 100644
index 0000000000..0545cb8b84
--- /dev/null
+++ b/test/files/neg/t4851.flags
@@ -0,0 +1 @@
+-Ywarn-adapted-args -Xfatal-warnings
diff --git a/test/files/neg/t4851/J.java b/test/files/neg/t4851/J.java
new file mode 100644
index 0000000000..dbf8b8288e
--- /dev/null
+++ b/test/files/neg/t4851/J.java
@@ -0,0 +1,15 @@
+public class J {
+ Object x;
+
+ public J(Object x) {
+ this.x = x;
+ }
+
+ public J(int x1, int x2, int x3, int x4, int x5, int x6) {
+ this.x = null;
+ }
+
+ public String toString() {
+ return "J:" + x.getClass();
+ }
+} \ No newline at end of file
diff --git a/test/files/neg/t4851/J2.java b/test/files/neg/t4851/J2.java
new file mode 100644
index 0000000000..c3a7231315
--- /dev/null
+++ b/test/files/neg/t4851/J2.java
@@ -0,0 +1,11 @@
+public class J2<T> {
+ T x;
+
+ public <T> J(T x) {
+ this.x = x;
+ }
+
+ public String toString() {
+ return "J2:" + x.getClass();
+ }
+} \ No newline at end of file
diff --git a/test/files/neg/t4851/S.scala b/test/files/neg/t4851/S.scala
new file mode 100644
index 0000000000..1550892967
--- /dev/null
+++ b/test/files/neg/t4851/S.scala
@@ -0,0 +1,23 @@
+object Test {
+ val x1 = new J
+ val x2 = new J()
+ val x3 = new J(1, 2, 3, 4, 5)
+
+ val y1 = Some(1, 2, 3)
+ val y2 = new Some(1, 2, 3)
+
+ val z1 = new J2
+ val z2 = new J2()
+ val z3 = new J2(())
+
+ def main(args: Array[String]): Unit = {
+ println(x1)
+ println(x2)
+ println(x3)
+ println(y1)
+
+ println(z1)
+ println(z2)
+ println(z3)
+ }
+}
diff --git a/test/files/neg/t4877.check b/test/files/neg/t4877.check
new file mode 100644
index 0000000000..0f72300bb4
--- /dev/null
+++ b/test/files/neg/t4877.check
@@ -0,0 +1,22 @@
+t4877.scala:4: error: type mismatch;
+ found : Object{def bar: Int}
+ required: AnyRef{def bar: String}
+ def foo: AnyRef { def bar: String } = new AnyRef { def bar = 42 }
+ ^
+t4877.scala:6: error: type mismatch;
+ found : Object{def bar(x: Int): String}
+ required: AnyRef{def bar(x: Int): Int}
+ def foo3: AnyRef { def bar(x: Int): Int } = new AnyRef { def bar(x: Int) = "abc" }
+ ^
+t4877.scala:7: error: type mismatch;
+ found : Object with C{def bar(x: Int): Int}
+ required: C{def bar(x: Int): Int; def quux(x: Int): Int}
+ def foo4: C { def bar(x: Int): Int ; def quux(x: Int): Int } = new C { def bar(x: Int) = 5 }
+ ^
+t4877.scala:17: error: type mismatch;
+ found : Object{type Mom = String; def bar(x: Int): Int; def bippy(): List[Int]}
+ required: B.this.Bippy
+ (which expands to) AnyRef{type Mom; def bar(x: Int): this.Mom; def bippy(): List[this.Mom]}
+ val x: Bippy = new AnyRef {
+ ^
+four errors found
diff --git a/test/files/neg/t4877.flags b/test/files/neg/t4877.flags
new file mode 100644
index 0000000000..7ccd56103a
--- /dev/null
+++ b/test/files/neg/t4877.flags
@@ -0,0 +1 @@
+-Xlint \ No newline at end of file
diff --git a/test/files/neg/t4877.scala b/test/files/neg/t4877.scala
new file mode 100644
index 0000000000..9cad156f84
--- /dev/null
+++ b/test/files/neg/t4877.scala
@@ -0,0 +1,22 @@
+trait C { }
+
+class A {
+ def foo: AnyRef { def bar: String } = new AnyRef { def bar = 42 }
+ def foo2: AnyRef { def bar: String } = new AnyRef { def bar = "abc" }
+ def foo3: AnyRef { def bar(x: Int): Int } = new AnyRef { def bar(x: Int) = "abc" }
+ def foo4: C { def bar(x: Int): Int ; def quux(x: Int): Int } = new C { def bar(x: Int) = 5 }
+}
+
+class B {
+ type Bippy = {
+ type Mom
+ def bar(x: Int): Mom
+ def bippy(): List[Mom]
+ }
+
+ val x: Bippy = new AnyRef {
+ type Mom = String
+ def bar(x: Int) = 55
+ def bippy() = List(bar(55))
+ }
+} \ No newline at end of file
diff --git a/test/files/neg/t4879.check b/test/files/neg/t4879.check
new file mode 100644
index 0000000000..49f3c73cf7
--- /dev/null
+++ b/test/files/neg/t4879.check
@@ -0,0 +1,13 @@
+t4879.scala:6: error: pattern type is incompatible with expected type;
+ found : object C
+ required: C
+Note: if you intended to match against the class, try `case _: C` or `case C(_)`
+ case C => true
+ ^
+t4879.scala:10: error: pattern type is incompatible with expected type;
+ found : object D
+ required: D[T,U,V]
+Note: if you intended to match against the class, try `case _: D[_,_,_]` or `case D(_,_,_)`
+ case D => true
+ ^
+two errors found
diff --git a/test/files/neg/t4879.scala b/test/files/neg/t4879.scala
new file mode 100644
index 0000000000..7d6561e9e0
--- /dev/null
+++ b/test/files/neg/t4879.scala
@@ -0,0 +1,15 @@
+case class C(d: Double) { }
+case class D[T, U, V](bingo: Int, donkey: String, private val vegas: Set[A])(jehovah: Int) { }
+
+class A {
+ def f = (new C(5)) match {
+ case C => true
+ case _ => false
+ }
+ def g[T, U, V](x: D[T, U, V]) = x match {
+ case D => true
+ case _ => false
+ }
+}
+
+
diff --git a/test/files/neg/t4882.check b/test/files/neg/t4882.check
new file mode 100644
index 0000000000..0aafc82770
--- /dev/null
+++ b/test/files/neg/t4882.check
@@ -0,0 +1,4 @@
+t4882.scala:2: error: `implicit' modifier not allowed for constructors
+ implicit def this(a: String) = this(a.toInt)
+ ^
+one error found
diff --git a/test/files/neg/t4882.scala b/test/files/neg/t4882.scala
new file mode 100644
index 0000000000..4e58ef7879
--- /dev/null
+++ b/test/files/neg/t4882.scala
@@ -0,0 +1,3 @@
+class Foo(value: Int) {
+ implicit def this(a: String) = this(a.toInt)
+}
diff --git a/test/files/neg/t500.check b/test/files/neg/t500.check
new file mode 100644
index 0000000000..b3f5c85978
--- /dev/null
+++ b/test/files/neg/t500.check
@@ -0,0 +1,4 @@
+t500.scala:3: error: lower bound X does not conform to upper bound Y
+ type T >: X <: Y;
+ ^
+one error found
diff --git a/test/files/neg/bug500.scala b/test/files/neg/t500.scala
index d843d71f07..d843d71f07 100644
--- a/test/files/neg/bug500.scala
+++ b/test/files/neg/t500.scala
diff --git a/test/files/neg/t501.check b/test/files/neg/t501.check
new file mode 100644
index 0000000000..3e3bf39075
--- /dev/null
+++ b/test/files/neg/t501.check
@@ -0,0 +1,4 @@
+t501.scala:3: error: lower bound X does not conform to upper bound Y
+ abstract class I { type T >: X <: Y; }
+ ^
+one error found
diff --git a/test/files/neg/bug501.scala b/test/files/neg/t501.scala
index 437ab8f21e..437ab8f21e 100644
--- a/test/files/neg/bug501.scala
+++ b/test/files/neg/t501.scala
diff --git a/test/files/neg/t5060.check b/test/files/neg/t5060.check
new file mode 100644
index 0000000000..ab860c9d5b
--- /dev/null
+++ b/test/files/neg/t5060.check
@@ -0,0 +1,7 @@
+t5060.scala:2: error: covariant type T occurs in contravariant position in type => Object with ScalaObject{def contains(x: T): Unit} of value foo0
+ val foo0 = {
+ ^
+t5060.scala:6: error: covariant type T occurs in contravariant position in type => Object with ScalaObject{def contains(x: T): Unit} of method foo1
+ def foo1 = {
+ ^
+two errors found
diff --git a/test/files/neg/t5060.scala b/test/files/neg/t5060.scala
new file mode 100644
index 0000000000..4d934a9a16
--- /dev/null
+++ b/test/files/neg/t5060.scala
@@ -0,0 +1,19 @@
+class A[+T] {
+ val foo0 = {
+ class AsVariantAsIWantToBe { def contains(x: T) = () }
+ new AsVariantAsIWantToBe
+ }
+ def foo1 = {
+ class VarianceIsTheSpiceOfTypes { def contains(x: T) = () }
+ new VarianceIsTheSpiceOfTypes
+ }
+}
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ val xs: A[String] = new A[String]
+ println(xs.foo0 contains "abc")
+ println((xs: A[Any]).foo0 contains 5)
+ // java.lang.NoSuchMethodException: A$AsVariantAsIWantToBe$1.contains(java.lang.String)
+ }
+}
diff --git a/test/files/neg/t5067.check b/test/files/neg/t5067.check
new file mode 100644
index 0000000000..32491766d7
--- /dev/null
+++ b/test/files/neg/t5067.check
@@ -0,0 +1,6 @@
+t5067.scala:3: error: type mismatch;
+ found : ((Int, Int)) => Int
+ required: (Int, Int) => Int
+ override def tupled: (Int, Int) => Int = super.tupled
+ ^
+one error found
diff --git a/test/files/neg/t5067.scala b/test/files/neg/t5067.scala
new file mode 100644
index 0000000000..f8235c0e83
--- /dev/null
+++ b/test/files/neg/t5067.scala
@@ -0,0 +1,4 @@
+class Foo extends Function2[Int, Int, Int] {
+ def apply(x: Int, y: Int) = x + y
+ override def tupled: (Int, Int) => Int = super.tupled
+}
diff --git a/test/files/neg/t5078.check b/test/files/neg/t5078.check
new file mode 100644
index 0000000000..8f66445b03
--- /dev/null
+++ b/test/files/neg/t5078.check
@@ -0,0 +1,13 @@
+t5078.scala:7: error: an unapply method must accept a single argument.
+ val Foo(x1) = 1
+ ^
+t5078.scala:7: error: recursive value x1 needs type
+ val Foo(x1) = 1
+ ^
+t5078.scala:8: error: an unapply method must accept a single argument.
+ val Foo2(y2) = 2
+ ^
+t5078.scala:8: error: recursive value y2 needs type
+ val Foo2(y2) = 2
+ ^
+four errors found
diff --git a/test/files/neg/t5078.scala b/test/files/neg/t5078.scala
new file mode 100644
index 0000000000..2e727e773d
--- /dev/null
+++ b/test/files/neg/t5078.scala
@@ -0,0 +1,11 @@
+object Foo { def unapply: Option[Int] = Some(42) }
+object Foo2 { def unapply(): Option[Int] = Some(42) }
+
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ val Foo(x1) = 1
+ val Foo2(y2) = 2
+ ()
+ }
+}
diff --git a/test/files/neg/t5093.check b/test/files/neg/t5093.check
new file mode 100644
index 0000000000..daba460011
--- /dev/null
+++ b/test/files/neg/t5093.check
@@ -0,0 +1,10 @@
+t5093.scala:2: error: illegal cyclic reference involving type C
+ def f[C[X] <: C[X]](l: C[_]) = l.x
+ ^
+t5093.scala:2: error: cyclic aliasing or subtyping involving type C
+ def f[C[X] <: C[X]](l: C[_]) = l.x
+ ^
+t5093.scala:2: error: C does not take type parameters
+ def f[C[X] <: C[X]](l: C[_]) = l.x
+ ^
+three errors found
diff --git a/test/files/neg/t5093.scala b/test/files/neg/t5093.scala
new file mode 100644
index 0000000000..9cde364dee
--- /dev/null
+++ b/test/files/neg/t5093.scala
@@ -0,0 +1,3 @@
+class T {
+ def f[C[X] <: C[X]](l: C[_]) = l.x
+}
diff --git a/test/files/neg/t510.check b/test/files/neg/t510.check
new file mode 100644
index 0000000000..355a6cdf07
--- /dev/null
+++ b/test/files/neg/t510.check
@@ -0,0 +1,4 @@
+t510.scala:19: error: cyclic aliasing or subtyping involving type T
+ def g(t: e.T): Unit = {
+ ^
+one error found
diff --git a/test/files/neg/bug510.scala b/test/files/neg/t510.scala
index a1cd2df009..a1cd2df009 100644
--- a/test/files/neg/bug510.scala
+++ b/test/files/neg/t510.scala
diff --git a/test/files/neg/t512.check b/test/files/neg/t512.check
new file mode 100644
index 0000000000..814e65e405
--- /dev/null
+++ b/test/files/neg/t512.check
@@ -0,0 +1,4 @@
+t512.scala:3: error: not found: value something
+ val xxx = something ||
+ ^
+one error found
diff --git a/test/files/neg/bug512.scala b/test/files/neg/t512.scala
index 0a0ccde75c..0a0ccde75c 100644
--- a/test/files/neg/bug512.scala
+++ b/test/files/neg/t512.scala
diff --git a/test/files/neg/t5120.check b/test/files/neg/t5120.check
new file mode 100644
index 0000000000..34d4ebde31
--- /dev/null
+++ b/test/files/neg/t5120.check
@@ -0,0 +1,12 @@
+t5120.scala:11: error: type mismatch;
+ found : Object
+ required: _1
+ List(str, other) foreach (_.x1 = new AnyRef)
+ ^
+t5120.scala:25: error: type mismatch;
+ found : Thread
+ required: h.T
+ (which expands to) _2
+ List(str, num).foreach(h => h.f1 = new Thread())
+ ^
+two errors found
diff --git a/test/files/neg/t5120.scala b/test/files/neg/t5120.scala
new file mode 100644
index 0000000000..c7063b7d15
--- /dev/null
+++ b/test/files/neg/t5120.scala
@@ -0,0 +1,29 @@
+class Cell[T](x0: T) {
+ type U = T
+ var x1: U = x0
+}
+
+object Test {
+ val str: Cell[String] = new Cell("a")
+ val other: Cell[Int] = new Cell(0)
+
+ def main(args: Array[String]): Unit = {
+ List(str, other) foreach (_.x1 = new AnyRef)
+ str.x1.length
+ }
+}
+// another way demonstrating the same underlying problem, as reported by roman kalukiewicz
+
+class Holder[_T](_f1 : _T, _f2 : _T) {
+ type T = _T
+ var f1 : T = _f1
+ var f2 : T = _f2
+}
+object Test2 {
+ val str = new Holder("t1", "t2")
+ val num = new Holder(1, 2)
+ List(str, num).foreach(h => h.f1 = new Thread())
+ def main(args: Array[String]) {
+ println(str.f1)
+ }
+}
diff --git a/test/files/neg/t515.check b/test/files/neg/t515.check
new file mode 100644
index 0000000000..47d2d30d01
--- /dev/null
+++ b/test/files/neg/t515.check
@@ -0,0 +1,6 @@
+t515.scala:7: error: type mismatch;
+ found : String
+ required: Test.Truc
+ val parent: Truc = file.getMachin
+ ^
+one error found
diff --git a/test/files/neg/t515.scala b/test/files/neg/t515.scala
new file mode 100644
index 0000000000..bb2376dcab
--- /dev/null
+++ b/test/files/neg/t515.scala
@@ -0,0 +1,8 @@
+object Test extends App {
+ class Truc {
+ def getMachin() = "machin"
+ def getMachinAsTruc() = this
+ }
+ val file = new Truc
+ val parent: Truc = file.getMachin
+}
diff --git a/test/files/neg/t5152.check b/test/files/neg/t5152.check
new file mode 100644
index 0000000000..80e0141b64
--- /dev/null
+++ b/test/files/neg/t5152.check
@@ -0,0 +1,9 @@
+t5152.scala:7: error: kinds of the type arguments (Test.B) do not conform to the expected kinds of the type parameters (type E) in class A.
+Test.B's type parameters do not match type E's expected parameters: type E has one type parameter, but type _ has none
+ class B[E[_]] extends A[B] { } // B is depth 2 but A requires 1
+ ^
+t5152.scala:11: error: kinds of the type arguments (Test.B1) do not conform to the expected kinds of the type parameters (type E) in class A1.
+Test.B1's type parameters do not match type E's expected parameters: type _ has no type parameters, but type G has one
+ class B1[E[_]] extends A1[B1] // B1 is depth 2 but A1 requires 3
+ ^
+two errors found
diff --git a/test/files/neg/t5152.scala b/test/files/neg/t5152.scala
new file mode 100644
index 0000000000..5efc76af24
--- /dev/null
+++ b/test/files/neg/t5152.scala
@@ -0,0 +1,17 @@
+object Test {
+ new C
+ new C1
+ new C2
+
+ class A[E[_]] { }
+ class B[E[_]] extends A[B] { } // B is depth 2 but A requires 1
+ class C extends B { }
+
+ class A1[E[F[G[_]]]] { }
+ class B1[E[_]] extends A1[B1] // B1 is depth 2 but A1 requires 3
+ class C1 extends B1 { }
+
+ class A2[E[_]] { }
+ class B2[E] extends A2[B2] { } // this one is correct
+ class C2 extends B2 { }
+}
diff --git a/test/files/neg/t520.check b/test/files/neg/t520.check
new file mode 100644
index 0000000000..0035f89a79
--- /dev/null
+++ b/test/files/neg/t520.check
@@ -0,0 +1,4 @@
+t520.scala:8: error: overloaded method verifyKeyword needs result type
+ verifyKeyword("", source, pos);
+ ^
+one error found
diff --git a/test/files/neg/t520.scala b/test/files/neg/t520.scala
new file mode 100644
index 0000000000..949a509518
--- /dev/null
+++ b/test/files/neg/t520.scala
@@ -0,0 +1,9 @@
+object test {
+
+ def verifyKeyword(keyword : String, source : java.io.File, pos : Int) = {
+ assert(keyword != null);
+ }
+
+ def verifyKeyword(source : java.io.File, pos : Int) =
+ verifyKeyword("", source, pos);
+}
diff --git a/test/files/neg/t521.check b/test/files/neg/t521.check
new file mode 100644
index 0000000000..a100195655
--- /dev/null
+++ b/test/files/neg/t521.check
@@ -0,0 +1,15 @@
+t521.scala:10: error: class PlainFile needs to be abstract, since method path in class AbstractFile of type => String is not defined
+class PlainFile(val file : File) extends AbstractFile {}
+ ^
+t521.scala:13: error: overriding value file in class PlainFile of type java.io.File;
+ value file needs `override' modifier
+final class ZipArchive(val file : File, archive : ZipFile) extends PlainFile(file) {
+ ^
+t521.scala:13: error: class ZipArchive needs to be abstract, since method path in class AbstractFile of type => String is not defined
+final class ZipArchive(val file : File, archive : ZipFile) extends PlainFile(file) {
+ ^
+t521.scala:15: error: overriding value path in class VirtualFile of type String;
+ method path needs to be a stable, immutable value
+ override def path = "";
+ ^
+four errors found
diff --git a/test/files/neg/bug521.scala b/test/files/neg/t521.scala
index c6afebc0be..c6afebc0be 100644
--- a/test/files/neg/bug521.scala
+++ b/test/files/neg/t521.scala
diff --git a/test/files/neg/t545.check b/test/files/neg/t545.check
new file mode 100644
index 0000000000..8ebbf9bdf6
--- /dev/null
+++ b/test/files/neg/t545.check
@@ -0,0 +1,7 @@
+t545.scala:4: error: value blah is not a member of Test.Foo
+ val x = foo.blah match {
+ ^
+t545.scala:5: error: recursive value x needs type
+ case List(x) => x
+ ^
+two errors found
diff --git a/test/files/neg/bug545.scala b/test/files/neg/t545.scala
index f1f9909dcb..f1f9909dcb 100644
--- a/test/files/neg/bug545.scala
+++ b/test/files/neg/t545.scala
diff --git a/test/files/neg/t550.check b/test/files/neg/t550.check
new file mode 100644
index 0000000000..da862e110e
--- /dev/null
+++ b/test/files/neg/t550.check
@@ -0,0 +1,7 @@
+t550.scala:6: error: type List takes type parameters
+ def sum[a](xs: List)(implicit m: Monoid[a]): a =
+ ^
+t550.scala:8: error: could not find implicit value for parameter m: Monoid[a]
+ sum(List(1,2,3))
+ ^
+two errors found
diff --git a/test/files/neg/bug550.scala b/test/files/neg/t550.scala
index 5212a2658d..5212a2658d 100644
--- a/test/files/neg/bug550.scala
+++ b/test/files/neg/t550.scala
diff --git a/test/files/neg/t556.check b/test/files/neg/t556.check
new file mode 100644
index 0000000000..c278e13991
--- /dev/null
+++ b/test/files/neg/t556.check
@@ -0,0 +1,4 @@
+t556.scala:3: error: wrong number of parameters; expected = 1
+ def g:Int = f((x,y)=>x)
+ ^
+one error found
diff --git a/test/files/neg/t556.scala b/test/files/neg/t556.scala
new file mode 100644
index 0000000000..b0113258c9
--- /dev/null
+++ b/test/files/neg/t556.scala
@@ -0,0 +1,4 @@
+object Main extends App {
+ def f(a:Int=>Int):Int = a(4)
+ def g:Int = f((x,y)=>x)
+}
diff --git a/test/files/neg/t558.check b/test/files/neg/t558.check
new file mode 100644
index 0000000000..f33ddc451f
--- /dev/null
+++ b/test/files/neg/t558.check
@@ -0,0 +1,4 @@
+t558.scala:13: error: value file is not a member of NewModel.this.RootURL
+ final val source = top.file;
+ ^
+one error found
diff --git a/test/files/neg/t558.scala b/test/files/neg/t558.scala
new file mode 100644
index 0000000000..4941a06c3b
--- /dev/null
+++ b/test/files/neg/t558.scala
@@ -0,0 +1,19 @@
+package scala.tools.nsc.models;
+import scala.tools.nsc.io.AbstractFile;
+
+abstract class NewModel {
+ abstract class SymbolURL {
+ val top : RootURL;
+ val name : String;
+ val source : AbstractFile;
+ }
+ abstract class NodeURL extends SymbolURL {
+ val parent : SymbolURL;
+ final val top = parent.top;
+ final val source = top.file;
+
+ }
+ abstract class RootURL extends SymbolURL {
+ final val top : RootURL = this;
+ }
+}
diff --git a/test/files/neg/t562.check b/test/files/neg/t562.check
new file mode 100644
index 0000000000..8c3823642a
--- /dev/null
+++ b/test/files/neg/t562.check
@@ -0,0 +1,4 @@
+t562.scala:10: error: super may be not be used on value y
+ override val y = super.y;
+ ^
+one error found
diff --git a/test/files/neg/bug562.scala b/test/files/neg/t562.scala
index c4a6e61742..c4a6e61742 100644
--- a/test/files/neg/bug562.scala
+++ b/test/files/neg/t562.scala
diff --git a/test/files/neg/t563.check b/test/files/neg/t563.check
new file mode 100644
index 0000000000..1431c85eb0
--- /dev/null
+++ b/test/files/neg/t563.check
@@ -0,0 +1,4 @@
+t563.scala:6: error: missing parameter type
+ map(n,ptr => Option(ptr.get));
+ ^
+one error found
diff --git a/test/files/neg/t563.scala b/test/files/neg/t563.scala
new file mode 100644
index 0000000000..d367e2a73c
--- /dev/null
+++ b/test/files/neg/t563.scala
@@ -0,0 +1,7 @@
+object Test {
+ def map[A,R](a : List[A], f : A => R) : List[R] = a.map(f);
+
+ def split(sn : Iterable[List[Option[Int]]]) : Unit =
+ for (n <- sn)
+ map(n,ptr => Option(ptr.get));
+}
diff --git a/test/files/neg/t565.check b/test/files/neg/t565.check
new file mode 100644
index 0000000000..136cc94b6f
--- /dev/null
+++ b/test/files/neg/t565.check
@@ -0,0 +1,5 @@
+t565.scala:2: error: only classes can have declared but undefined members
+(Note that variables need to be initialized to be defined)
+ var s0: String
+ ^
+one error found
diff --git a/test/files/neg/bug565.scala b/test/files/neg/t565.scala
index 9a4732fcc3..9a4732fcc3 100644
--- a/test/files/neg/bug565.scala
+++ b/test/files/neg/t565.scala
diff --git a/test/files/neg/t576.check b/test/files/neg/t576.check
new file mode 100644
index 0000000000..7105c92866
--- /dev/null
+++ b/test/files/neg/t576.check
@@ -0,0 +1,4 @@
+t576.scala:14: error: overloaded method insert needs result type
+ if (true) sibling.insert(node);
+ ^
+one error found
diff --git a/test/files/neg/t576.scala b/test/files/neg/t576.scala
new file mode 100644
index 0000000000..fa7ee6019f
--- /dev/null
+++ b/test/files/neg/t576.scala
@@ -0,0 +1,20 @@
+package lampion.collections;
+
+abstract class BaseListXXX {
+ type Node <: BaseNode;
+ abstract class BaseNode {
+ }
+}
+trait PriorityTreeXXX extends BaseListXXX {
+ type Node <: BasicTreeNode;
+
+ trait BasicTreeNode extends BaseNode {
+ def sibling: Node;
+ def insert(dir : Int, node : Node) = {
+ if (true) sibling.insert(node);
+ //else insert(node);
+
+ }
+ def insert(node : Node) : Unit = {}
+ }
+}
diff --git a/test/files/neg/t585.check b/test/files/neg/t585.check
new file mode 100644
index 0000000000..d332ac5414
--- /dev/null
+++ b/test/files/neg/t585.check
@@ -0,0 +1,4 @@
+t585.scala:1: error: unclosed comment
+/*
+^
+one error found
diff --git a/test/files/neg/bug585.scala b/test/files/neg/t585.scala
index 0875e2cb0f..0875e2cb0f 100644
--- a/test/files/neg/bug585.scala
+++ b/test/files/neg/t585.scala
diff --git a/test/files/neg/t588.check b/test/files/neg/t588.check
new file mode 100644
index 0000000000..f8b5516fdc
--- /dev/null
+++ b/test/files/neg/t588.check
@@ -0,0 +1,13 @@
+t588.scala:3: error: double definition:
+method visit:(f: Int => String)Boolean and
+method visit:(f: Int => Unit)Boolean at line 2
+have same type after erasure: (f: Function1)Boolean
+ def visit(f: Int => String): Boolean
+ ^
+t588.scala:10: error: double definition:
+method f:(brac: Test.this.TypeB)Unit and
+method f:(node: Test.this.TypeA)Unit at line 9
+have same type after erasure: (brac: Test#TraitA)Unit
+ def f(brac : TypeB) : Unit;
+ ^
+two errors found
diff --git a/test/files/neg/t588.scala b/test/files/neg/t588.scala
new file mode 100644
index 0000000000..1bc6d2680f
--- /dev/null
+++ b/test/files/neg/t588.scala
@@ -0,0 +1,15 @@
+abstract class Test0 {
+ def visit(f: Int => Unit): Boolean
+ def visit(f: Int => String): Boolean
+}
+trait Test {
+ type TypeA <: TraitA;
+ type TypeB <: TypeA with TraitB;
+
+ def f(node : TypeA) : Unit;
+ def f(brac : TypeB) : Unit;
+
+ trait TraitA;
+ trait TraitB;
+
+}
diff --git a/test/files/neg/t591.check b/test/files/neg/t591.check
new file mode 100644
index 0000000000..434c2dd002
--- /dev/null
+++ b/test/files/neg/t591.check
@@ -0,0 +1,4 @@
+t591.scala:38: error: method input_= is defined twice
+ def input_=(in : Input) = {}
+ ^
+one error found
diff --git a/test/files/neg/t591.scala b/test/files/neg/t591.scala
new file mode 100644
index 0000000000..5f2397e6a9
--- /dev/null
+++ b/test/files/neg/t591.scala
@@ -0,0 +1,41 @@
+abstract class BaseList {
+ type Node <: BaseNode;
+
+
+ abstract class BaseNode {
+ protected def self : Node;
+ private[BaseList] def self00 = self;
+ def dirty : Unit = {}
+ def replaceWith(node : Node) = {}
+ }
+
+ implicit def baseNode2Node(bnode : BaseNode): Node = bnode.self00;
+
+
+}
+
+
+trait BaseFlow extends BaseList {
+ type Node <: BFNode;
+ type Flow <: FlowBase;
+ type Output <: OutputBase;
+ type Input <: InputBase;
+
+ abstract class FlowBase {
+
+ }
+ trait OutputBase extends FlowBase {
+
+ }
+ trait InputBase extends FlowBase {
+
+ }
+
+ trait BFNode extends BaseNode {
+ private var input : Input = _;
+ private var output : Output = _;
+
+ def input_=(in : Input) = {}
+
+ }
+}
diff --git a/test/files/neg/t593.check b/test/files/neg/t593.check
new file mode 100644
index 0000000000..c1aeab8ec4
--- /dev/null
+++ b/test/files/neg/t593.check
@@ -0,0 +1,4 @@
+t593.scala:1: error: traits or objects may not have parameters
+trait Wrapper[T](x : T) {
+ ^
+one error found
diff --git a/test/files/neg/bug593.scala b/test/files/neg/t593.scala
index df7199a42a..df7199a42a 100644
--- a/test/files/neg/bug593.scala
+++ b/test/files/neg/t593.scala
diff --git a/test/files/neg/t608.check b/test/files/neg/t608.check
new file mode 100644
index 0000000000..5c7f49d004
--- /dev/null
+++ b/test/files/neg/t608.check
@@ -0,0 +1,6 @@
+t608.scala:16: error: type mismatch;
+ found : hs{type a = ha}
+ required: hs{type s = hs; type a = ha}
+ = g(f(x).bimap(id))
+ ^
+one error found
diff --git a/test/files/neg/t608.scala b/test/files/neg/t608.scala
new file mode 100644
index 0000000000..1f12764dd1
--- /dev/null
+++ b/test/files/neg/t608.scala
@@ -0,0 +1,17 @@
+trait CrashDueToTypeError {
+ def id[a](x :a) :a = x
+
+ trait Bifunctor {
+ type a; // content
+ type s <: Bifunctor
+
+ // uncomment this-vvvvvvvvvvvvvvvvvvvvvvvvvvvv, and it compiles
+ def bimap[c](f :a=>c) :s{/*type s=Bifunctor.this.s;*/type a=c; }
+ }
+
+ def hylo[hs <: Bifunctor,ha,hb,hc]
+ (f :hb=>hs{type s=hs; type a=ha},
+ g :hs{type s=hs; type a=ha}=>hc)(x :hb)
+ :hc
+ = g(f(x).bimap(id))
+}
diff --git a/test/files/neg/t630.check b/test/files/neg/t630.check
new file mode 100644
index 0000000000..0814ef0c18
--- /dev/null
+++ b/test/files/neg/t630.check
@@ -0,0 +1,5 @@
+t630.scala:20: error: overriding value foo in trait Bar of type Req2;
+ object foo has incompatible type
+ object foo extends Req1
+ ^
+one error found
diff --git a/test/files/neg/t630.scala b/test/files/neg/t630.scala
new file mode 100644
index 0000000000..8a073963b0
--- /dev/null
+++ b/test/files/neg/t630.scala
@@ -0,0 +1,23 @@
+trait Req1
+
+trait Req2 {
+ def test() = Console.println("Test")
+}
+
+trait Foo {
+ val foo : Req1
+}
+
+trait Bar {
+ val foo : Req2
+ def test() = foo.test
+}
+
+object Test
+ extends Foo
+ with Bar
+{
+ object foo extends Req1
+
+ def main(argv : Array[String]) = test
+}
diff --git a/test/files/neg/t631.check b/test/files/neg/t631.check
new file mode 100644
index 0000000000..3759565e11
--- /dev/null
+++ b/test/files/neg/t631.check
@@ -0,0 +1,4 @@
+t631.scala:1: error: `implicit' modifier cannot be used for top-level objects
+implicit object Test {
+ ^
+one error found
diff --git a/test/files/neg/bug631.scala b/test/files/neg/t631.scala
index 631db3eb10..631db3eb10 100644
--- a/test/files/neg/bug631.scala
+++ b/test/files/neg/t631.scala
diff --git a/test/files/neg/t633.check b/test/files/neg/t633.check
new file mode 100644
index 0000000000..d69d3be70e
--- /dev/null
+++ b/test/files/neg/t633.check
@@ -0,0 +1,4 @@
+t633.scala:3: error: not found: type ListBuffer
+ def t(a : ListBuffer[String]) = {
+ ^
+one error found
diff --git a/test/files/neg/bug633.scala b/test/files/neg/t633.scala
index fd4e560720..fd4e560720 100644
--- a/test/files/neg/bug633.scala
+++ b/test/files/neg/t633.scala
diff --git a/test/files/neg/t639.check b/test/files/neg/t639.check
new file mode 100644
index 0000000000..3b53da0515
--- /dev/null
+++ b/test/files/neg/t639.check
@@ -0,0 +1,4 @@
+t639.scala:3: error: not found: object a
+import a._
+ ^
+one error found
diff --git a/test/files/neg/bug639.scala b/test/files/neg/t639.scala
index eaeed944a4..eaeed944a4 100644
--- a/test/files/neg/bug639.scala
+++ b/test/files/neg/t639.scala
diff --git a/test/files/neg/t649.check b/test/files/neg/t649.check
new file mode 100644
index 0000000000..5a270d4751
--- /dev/null
+++ b/test/files/neg/t649.check
@@ -0,0 +1,4 @@
+t649.scala:3: error: overloaded method foo needs result type
+ def foo[A] = foo[A]
+ ^
+one error found
diff --git a/test/files/neg/bug649.scala b/test/files/neg/t649.scala
index 2519eb5cf3..2519eb5cf3 100644
--- a/test/files/neg/bug649.scala
+++ b/test/files/neg/t649.scala
diff --git a/test/files/neg/t650.check b/test/files/neg/t650.check
new file mode 100644
index 0000000000..320ae66704
--- /dev/null
+++ b/test/files/neg/t650.check
@@ -0,0 +1,4 @@
+t650.scala:4: error: missing type arguments
+trait Test2 extends LinkedList;
+ ^
+one error found
diff --git a/test/files/neg/bug650.scala b/test/files/neg/t650.scala
index cdb4b3da47..cdb4b3da47 100644
--- a/test/files/neg/bug650.scala
+++ b/test/files/neg/t650.scala
diff --git a/test/files/neg/t663.check b/test/files/neg/t663.check
new file mode 100644
index 0000000000..40161fb3e3
--- /dev/null
+++ b/test/files/neg/t663.check
@@ -0,0 +1,7 @@
+t663.scala:11: error: name clash between defined and inherited member:
+method asMatch:(m: Test.this.Node)Any and
+method asMatch:(node: Test.this.Matchable)Any in trait MatchableImpl
+have same type after erasure: (m: test.Test#NodeImpl)Object
+ def asMatch(m : Node) : Any = {
+ ^
+one error found
diff --git a/test/files/neg/bug663.scala b/test/files/neg/t663.scala
index 797c4a300d..797c4a300d 100644
--- a/test/files/neg/bug663.scala
+++ b/test/files/neg/t663.scala
diff --git a/test/files/neg/t664.check b/test/files/neg/t664.check
new file mode 100644
index 0000000000..43a6bea074
--- /dev/null
+++ b/test/files/neg/t664.check
@@ -0,0 +1,7 @@
+t664.scala:4: error: type Foo is not a member of test.Test with ScalaObject
+ trait Foo extends super.Foo {
+ ^
+t664.scala:5: error: type Bar is not a member of AnyRef with ScalaObject
+ trait Bar extends super.Bar;
+ ^
+two errors found
diff --git a/test/files/neg/bug664.scala b/test/files/neg/t664.scala
index f3b8d06053..f3b8d06053 100644
--- a/test/files/neg/bug664.scala
+++ b/test/files/neg/t664.scala
diff --git a/test/files/neg/t667.check b/test/files/neg/t667.check
new file mode 100644
index 0000000000..d4367bc87b
--- /dev/null
+++ b/test/files/neg/t667.check
@@ -0,0 +1,4 @@
+t667.scala:8: error: class Ni inherits itself
+ class Ni extends super.Ni with Ni;
+ ^
+one error found
diff --git a/test/files/neg/bug667.scala b/test/files/neg/t667.scala
index a79bc272e4..a79bc272e4 100644
--- a/test/files/neg/bug667.scala
+++ b/test/files/neg/t667.scala
diff --git a/test/files/neg/t668.check b/test/files/neg/t668.check
new file mode 100644
index 0000000000..b057ca7936
--- /dev/null
+++ b/test/files/neg/t668.check
@@ -0,0 +1,4 @@
+t668.scala:1: error: type Iterable takes type parameters
+class Test extends Iterable
+ ^
+one error found
diff --git a/test/files/neg/bug668.scala b/test/files/neg/t668.scala
index 3256037b1e..3256037b1e 100644
--- a/test/files/neg/bug668.scala
+++ b/test/files/neg/t668.scala
diff --git a/test/files/neg/t677.check b/test/files/neg/t677.check
new file mode 100644
index 0000000000..122830a98f
--- /dev/null
+++ b/test/files/neg/t677.check
@@ -0,0 +1,6 @@
+t677.scala:2: error: type mismatch;
+ found : () => Int
+ required: Nothing
+ val zx: Nothing = {() => 4}
+ ^
+one error found
diff --git a/test/files/neg/bug677.scala b/test/files/neg/t677.scala
index c65ee9640f..c65ee9640f 100644
--- a/test/files/neg/bug677.scala
+++ b/test/files/neg/t677.scala
diff --git a/test/files/neg/t691.check b/test/files/neg/t691.check
new file mode 100644
index 0000000000..77ff7b1d02
--- /dev/null
+++ b/test/files/neg/t691.check
@@ -0,0 +1,4 @@
+t691.scala:27: error: ambiguous parent class qualifier
+ trait TiC extends super[Arrow].Ti2 with super[AssignArrow].Ti1;
+ ^
+one error found
diff --git a/test/files/neg/bug691.scala b/test/files/neg/t691.scala
index 233476f658..233476f658 100644
--- a/test/files/neg/bug691.scala
+++ b/test/files/neg/t691.scala
diff --git a/test/files/neg/t692.check b/test/files/neg/t692.check
new file mode 100644
index 0000000000..12b7d40ba5
--- /dev/null
+++ b/test/files/neg/t692.check
@@ -0,0 +1,24 @@
+t692.scala:3: error: not found: type T
+ trait Type[T0] extends Type0[T];
+ ^
+t692.scala:10: error: class Foo takes type parameters
+ case class FooType() extends ClassType[Foo,AnyRef](ObjectType());
+ ^
+t692.scala:13: error: class Foo takes type parameters
+ case class BarType[T3 <: Foo](tpeT : RefType[T3]) extends ClassType[Bar[T3],Foo](FooType);
+ ^
+t692.scala:13: error: class Foo takes type parameters
+ case class BarType[T3 <: Foo](tpeT : RefType[T3]) extends ClassType[Bar[T3],Foo](FooType);
+ ^
+t692.scala:14: error: class Foo takes type parameters
+ implicit def typeOfBar[T4 <: Foo](implicit elem : RefType[T4]) : RefType[Bar[T4]] =
+ ^
+t692.scala:15: error: type mismatch;
+ found : test3.this.BarType[T4]
+ required: test3.this.RefType[test3.this.Bar[T4]]
+ BarType(elem);
+ ^
+t692.scala:19: error: class Foo takes type parameters
+ class Bar[A <: Foo](implicit tpeA : Type[A]) extends Foo;
+ ^
+7 errors found
diff --git a/test/files/neg/t692.scala b/test/files/neg/t692.scala
new file mode 100644
index 0000000000..f230a6bacf
--- /dev/null
+++ b/test/files/neg/t692.scala
@@ -0,0 +1,20 @@
+abstract class test3 {
+ trait Type0[+T0];
+ trait Type[T0] extends Type0[T];
+ trait ClassType0[+C <: AnyRef] extends Type0[C];
+ abstract class RefType[C <: AnyRef] extends Type[C];
+ case class ObjectType() extends RefType[AnyRef];
+ abstract class ClassType[C <: Z, Z <: AnyRef](zuper : RefType[Z]) extends RefType[C];
+
+
+ case class FooType() extends ClassType[Foo,AnyRef](ObjectType());
+ implicit def typeOfFoo = FooType();
+
+ case class BarType[T3 <: Foo](tpeT : RefType[T3]) extends ClassType[Bar[T3],Foo](FooType);
+ implicit def typeOfBar[T4 <: Foo](implicit elem : RefType[T4]) : RefType[Bar[T4]] =
+ BarType(elem);
+
+
+ class Foo[A <: AnyRef];
+ class Bar[A <: Foo](implicit tpeA : Type[A]) extends Foo;
+}
diff --git a/test/files/neg/t693.check b/test/files/neg/t693.check
new file mode 100644
index 0000000000..62325b5c60
--- /dev/null
+++ b/test/files/neg/t693.check
@@ -0,0 +1,4 @@
+t693.scala:4: error: x is already defined as value x
+ val x : Int = 10;
+ ^
+one error found
diff --git a/test/files/neg/t693.scala b/test/files/neg/t693.scala
new file mode 100644
index 0000000000..d2074bee38
--- /dev/null
+++ b/test/files/neg/t693.scala
@@ -0,0 +1,5 @@
+abstract class test4 {
+ trait Type;
+ val x : Type = null;
+ val x : Int = 10;
+}
diff --git a/test/files/neg/t696.check b/test/files/neg/t696.check
new file mode 100644
index 0000000000..ac26a864a5
--- /dev/null
+++ b/test/files/neg/t696.check
@@ -0,0 +1,5 @@
+t696.scala:4: error: diverging implicit expansion for type TypeUtil0.Type[Any]
+starting with method WithType in object TypeUtil0
+ as[Any](null);
+ ^
+one error found
diff --git a/test/files/neg/bug696.scala b/test/files/neg/t696.scala
index a06a32141a..a06a32141a 100644
--- a/test/files/neg/bug696.scala
+++ b/test/files/neg/t696.scala
diff --git a/test/files/neg/t700.check b/test/files/neg/t700.check
new file mode 100644
index 0000000000..4c0a2e5fda
--- /dev/null
+++ b/test/files/neg/t700.check
@@ -0,0 +1,4 @@
+t700.scala:6: error: method foobar in trait Foo is accessed from super. It may not be abstract unless it is overridden by a member declared `abstract' and `override'
+ def foobar: Unit = super.foobar
+ ^
+one error found
diff --git a/test/files/neg/t700.scala b/test/files/neg/t700.scala
new file mode 100644
index 0000000000..b08c8b5529
--- /dev/null
+++ b/test/files/neg/t700.scala
@@ -0,0 +1,10 @@
+trait Foo {
+ def foobar: Unit;
+}
+
+trait Bar extends Foo {
+ def foobar: Unit = super.foobar
+}
+
+// the following definition breaks the compiler
+abstract class Foobar extends Bar
diff --git a/test/files/neg/t708.check b/test/files/neg/t708.check
new file mode 100644
index 0000000000..15a9c9ed93
--- /dev/null
+++ b/test/files/neg/t708.check
@@ -0,0 +1,5 @@
+t708.scala:8: error: overriding type S in trait X with bounds >: Nothing <: A.this.T;
+ type S has incompatible type
+ override private[A] type S = Any;
+ ^
+one error found
diff --git a/test/files/neg/bug708.scala b/test/files/neg/t708.scala
index f86a005811..f86a005811 100644
--- a/test/files/neg/bug708.scala
+++ b/test/files/neg/t708.scala
diff --git a/test/files/neg/t712.check b/test/files/neg/t712.check
new file mode 100644
index 0000000000..6819dc0ce9
--- /dev/null
+++ b/test/files/neg/t712.check
@@ -0,0 +1,4 @@
+t712.scala:10: error: value self is not a member of B.this.ParentImpl
+ implicit def coerce(p : ParentImpl) = p.self;
+ ^
+one error found
diff --git a/test/files/neg/bug712.scala b/test/files/neg/t712.scala
index 6f2627743f..6f2627743f 100644
--- a/test/files/neg/bug712.scala
+++ b/test/files/neg/t712.scala
diff --git a/test/files/neg/t715.check b/test/files/neg/t715.check
new file mode 100644
index 0000000000..2c01047a63
--- /dev/null
+++ b/test/files/neg/t715.check
@@ -0,0 +1,4 @@
+t715.scala:12: error: method chilren in trait NodeImpl is accessed from super. It may not be abstract unless it is overridden by a member declared `abstract' and `override'
+ override def children = super.chilren;
+ ^
+one error found
diff --git a/test/files/neg/t715.scala b/test/files/neg/t715.scala
new file mode 100644
index 0000000000..a5ccd567f9
--- /dev/null
+++ b/test/files/neg/t715.scala
@@ -0,0 +1,15 @@
+package test;
+trait B {
+ type Node <: NodeImpl;
+ trait NodeImpl {
+ def self : Node;
+ def chilren : List[Node];
+ }
+}
+trait C extends B {
+ type Node <: NodeImpl;
+ trait NodeImpl extends super.NodeImpl {
+ override def children = super.chilren;
+ children;
+ }
+}
diff --git a/test/files/neg/t729.check b/test/files/neg/t729.check
new file mode 100644
index 0000000000..fb858dc09a
--- /dev/null
+++ b/test/files/neg/t729.check
@@ -0,0 +1,6 @@
+t729.scala:20: error: type mismatch;
+ found : ScalaParserAutoEdit.this.NodeImpl(in trait Parser)
+ required: ScalaParserAutoEdit.this.NodeImpl(in trait ScalaParserAutoEdit)
+ val yyy : NodeImpl = link.from;
+ ^
+one error found
diff --git a/test/files/neg/bug729.scala b/test/files/neg/t729.scala
index 83e7f4cd1e..83e7f4cd1e 100644
--- a/test/files/neg/bug729.scala
+++ b/test/files/neg/t729.scala
diff --git a/test/files/neg/t742.check b/test/files/neg/t742.check
new file mode 100644
index 0000000000..f587948ef1
--- /dev/null
+++ b/test/files/neg/t742.check
@@ -0,0 +1,5 @@
+t742.scala:5: error: kinds of the type arguments (Crash._1,Crash._2,Any) do not conform to the expected kinds of the type parameters (type m,type n,type z).
+Crash._1's type parameters do not match type m's expected parameters: type s1 has one type parameter, but type n has two
+ type p = mul[_1, _2, Any] // mul[_1, _1, Any] needs -Yrecursion
+ ^
+one error found
diff --git a/test/files/neg/t742.scala b/test/files/neg/t742.scala
new file mode 100644
index 0000000000..bb1c2f85ea
--- /dev/null
+++ b/test/files/neg/t742.scala
@@ -0,0 +1,8 @@
+object Crash {
+ type mul[m[n[s[_], z], z], n[s[_], z], z] = m[n, z]
+ type _1[s1[_], z1] = s1[z1]
+ type _2[s1[_], z1] = s1[z1]
+ type p = mul[_1, _2, Any] // mul[_1, _1, Any] needs -Yrecursion
+ // _1[_2, Zero]
+ // _2[Zero]
+} \ No newline at end of file
diff --git a/test/files/neg/t752.check b/test/files/neg/t752.check
new file mode 100644
index 0000000000..a91bba46ea
--- /dev/null
+++ b/test/files/neg/t752.check
@@ -0,0 +1,6 @@
+t752.scala:6: error: type mismatch;
+ found : String => Unit
+ required: Int => Unit
+ f(g _)
+ ^
+one error found
diff --git a/test/files/neg/bug752.scala b/test/files/neg/t752.scala
index 00f45e323c..00f45e323c 100644
--- a/test/files/neg/bug752.scala
+++ b/test/files/neg/t752.scala
diff --git a/test/files/neg/t765.check b/test/files/neg/t765.check
new file mode 100644
index 0000000000..5a5f603252
--- /dev/null
+++ b/test/files/neg/t765.check
@@ -0,0 +1,4 @@
+t765.scala:3: error: not found: type Bar123
+ val bar = new Bar123
+ ^
+one error found
diff --git a/test/files/neg/bug765.scala b/test/files/neg/t765.scala
index 3e5371b533..3e5371b533 100644
--- a/test/files/neg/bug765.scala
+++ b/test/files/neg/t765.scala
diff --git a/test/files/neg/t766.check b/test/files/neg/t766.check
new file mode 100644
index 0000000000..92039ed1ff
--- /dev/null
+++ b/test/files/neg/t766.check
@@ -0,0 +1,4 @@
+t766.scala:5: error: not found: value badIdentifier
+ val p = badIdentifier
+ ^
+one error found
diff --git a/test/files/neg/bug766.scala b/test/files/neg/t766.scala
index b4b04d9642..b4b04d9642 100644
--- a/test/files/neg/bug766.scala
+++ b/test/files/neg/t766.scala
diff --git a/test/files/neg/t771.check b/test/files/neg/t771.check
new file mode 100644
index 0000000000..c0d1e002f8
--- /dev/null
+++ b/test/files/neg/t771.check
@@ -0,0 +1,4 @@
+t771.scala:4: error: trait Iterator is abstract; cannot be instantiated
+ def c[A](it:java.util.Iterator[A]) = new scala.Iterator[A]
+ ^
+one error found
diff --git a/test/files/neg/t771.scala b/test/files/neg/t771.scala
new file mode 100755
index 0000000000..26bf441648
--- /dev/null
+++ b/test/files/neg/t771.scala
@@ -0,0 +1,5 @@
+class Foo {
+ def a = c(b)
+ def b[List[AnyRef]] = new java.util.Iterator[List[Object]] { }
+ def c[A](it:java.util.Iterator[A]) = new scala.Iterator[A]
+}
diff --git a/test/files/neg/t779.check b/test/files/neg/t779.check
new file mode 100644
index 0000000000..65f463c192
--- /dev/null
+++ b/test/files/neg/t779.check
@@ -0,0 +1,4 @@
+t779.scala:6: error: method ast has return statement; needs result type
+ override def ast = return null
+ ^
+one error found
diff --git a/test/files/neg/bug779.scala b/test/files/neg/t779.scala
index cc92f9062a..cc92f9062a 100644
--- a/test/files/neg/bug779.scala
+++ b/test/files/neg/t779.scala
diff --git a/test/files/neg/t783.check b/test/files/neg/t783.check
new file mode 100644
index 0000000000..37610a50ff
--- /dev/null
+++ b/test/files/neg/t783.check
@@ -0,0 +1,6 @@
+t783.scala:12: error: type mismatch;
+ found : Contexts.this.Global#Template
+ required: Contexts.this.global.Template
+ globalInit0.Template(10, 20);
+ ^
+one error found
diff --git a/test/files/neg/t783.scala b/test/files/neg/t783.scala
new file mode 100644
index 0000000000..5d20bc6d24
--- /dev/null
+++ b/test/files/neg/t783.scala
@@ -0,0 +1,29 @@
+package test;
+
+object Main extends App {
+ class Global {
+ case class Template(x : Int, y : Int) {
+ Console.println("outer: " + Global.this);
+ }
+ }
+ trait Contexts { self: Analyzer =>
+ val xxx : global.Template = {
+ assert(globalInit0 != null);
+ globalInit0.Template(10, 20);
+ }
+ }
+ abstract class Analyzer extends Contexts {
+ type Global <: Main.Global;
+ final val global : Global = globalInit;
+ def globalInit : Global;
+ final def globalInit0 = globalInit.asInstanceOf[global.type];
+ }
+
+ object global0 extends Global {
+ object analyzer extends Analyzer {
+ type Global = global0.type;
+ override def globalInit = global0;
+ }
+ }
+ Console.println(global0.analyzer.xxx);
+}
diff --git a/test/files/neg/t798.check b/test/files/neg/t798.check
new file mode 100644
index 0000000000..b120f3a403
--- /dev/null
+++ b/test/files/neg/t798.check
@@ -0,0 +1,4 @@
+t798.scala:2: error: cyclic aliasing or subtyping involving type Bracks
+trait Test[Bracks <: Bracks] {
+ ^
+one error found
diff --git a/test/files/neg/t798.scala b/test/files/neg/t798.scala
new file mode 100644
index 0000000000..b4a1939444
--- /dev/null
+++ b/test/files/neg/t798.scala
@@ -0,0 +1,8 @@
+package test;
+trait Test[Bracks <: Bracks] {
+ def f(list : Any) = null;
+ class C[T]
+ val bracks : Bracks;
+ val singletons = f(bracks);
+
+}
diff --git a/test/files/neg/t800.check b/test/files/neg/t800.check
new file mode 100644
index 0000000000..4bfba5420b
--- /dev/null
+++ b/test/files/neg/t800.check
@@ -0,0 +1,13 @@
+t800.scala:4: error: qualification is already defined as value qualification
+ val qualification = false;
+ ^
+t800.scala:8: error: method qualification is defined twice
+ val qualification = false;
+ ^
+t800.scala:12: error: value qualification is defined twice
+ var qualification = false;
+ ^
+t800.scala:16: error: method qualification is defined twice
+ var qualification = false;
+ ^
+four errors found
diff --git a/test/files/neg/bug800.scala b/test/files/neg/t800.scala
index 388574d42d..388574d42d 100644
--- a/test/files/neg/bug800.scala
+++ b/test/files/neg/t800.scala
diff --git a/test/files/neg/t835.check b/test/files/neg/t835.check
new file mode 100644
index 0000000000..6ad18d3028
--- /dev/null
+++ b/test/files/neg/t835.check
@@ -0,0 +1,9 @@
+t835.scala:2: error: no `: _*' annotation allowed here
+(such annotations are only allowed in arguments to *-parameters)
+ Console.println(List(List(1, 2, 3) : _*, List(4, 5, 6) : _*))
+ ^
+t835.scala:2: error: no `: _*' annotation allowed here
+(such annotations are only allowed in arguments to *-parameters)
+ Console.println(List(List(1, 2, 3) : _*, List(4, 5, 6) : _*))
+ ^
+two errors found
diff --git a/test/files/neg/t835.scala b/test/files/neg/t835.scala
new file mode 100644
index 0000000000..553d2c1be4
--- /dev/null
+++ b/test/files/neg/t835.scala
@@ -0,0 +1,3 @@
+object Test extends App {
+ Console.println(List(List(1, 2, 3) : _*, List(4, 5, 6) : _*))
+}
diff --git a/test/files/neg/t836.check b/test/files/neg/t836.check
new file mode 100644
index 0000000000..cf2faf926f
--- /dev/null
+++ b/test/files/neg/t836.check
@@ -0,0 +1,7 @@
+t836.scala:9: error: type mismatch;
+ found : Any
+ required: A.this.S
+ (which expands to) A.this.MyObj#S
+ val some: S = any // compiles => type X is set to scala.Any
+ ^
+one error found
diff --git a/test/files/neg/t836.scala b/test/files/neg/t836.scala
new file mode 100644
index 0000000000..de23cf5387
--- /dev/null
+++ b/test/files/neg/t836.scala
@@ -0,0 +1,16 @@
+abstract class Obj { type S }
+class ObjImpl extends Obj { type S = String }
+
+abstract class A {
+ type MyObj <: Obj
+ type S = MyObj#S
+
+ val any: Any = 0
+ val some: S = any // compiles => type X is set to scala.Any
+}
+
+class B extends A {
+ type MyObj = ObjImpl
+ val myString: S = "hello"
+ val realString: String = myString // error: type missmatch
+}
diff --git a/test/files/neg/t845.check b/test/files/neg/t845.check
new file mode 100644
index 0000000000..07ed7e417b
--- /dev/null
+++ b/test/files/neg/t845.check
@@ -0,0 +1,4 @@
+t845.scala:4: error: only classes can have declared but undefined members
+ type Bar;
+ ^
+one error found
diff --git a/test/files/neg/t845.scala b/test/files/neg/t845.scala
new file mode 100644
index 0000000000..ddf6a16f32
--- /dev/null
+++ b/test/files/neg/t845.scala
@@ -0,0 +1,16 @@
+package test;
+
+object Test extends App {
+ type Bar;
+ trait FooImpl;
+
+ trait Bob {
+ def bar : Bar with FooImpl;
+ }
+ def ifn[A,B](a : A)(f : A => B) =
+ if (a != null) f(a) else null;
+
+ val bob : Bob = null;
+ val bar = ifn(bob)(_.bar);
+ assert(bar == null);
+}
diff --git a/test/files/neg/t846.check b/test/files/neg/t846.check
new file mode 100644
index 0000000000..242a8001ff
--- /dev/null
+++ b/test/files/neg/t846.check
@@ -0,0 +1,6 @@
+t846.scala:9: error: type mismatch;
+ found : Null(null)
+ required: B
+ if (a != null) f(a) else null
+ ^
+one error found
diff --git a/test/files/neg/bug846.scala b/test/files/neg/t846.scala
index acf8462030..acf8462030 100644
--- a/test/files/neg/bug846.scala
+++ b/test/files/neg/t846.scala
diff --git a/test/files/neg/t856.check b/test/files/neg/t856.check
new file mode 100644
index 0000000000..02978e1622
--- /dev/null
+++ b/test/files/neg/t856.check
@@ -0,0 +1,14 @@
+t856.scala:3: error: class ComplexRect needs to be abstract, since:
+it has 2 unimplemented members.
+/** As seen from class ComplexRect, the missing signatures are as follows.
+ * For convenience, these are usable as stub implementations.
+ */
+ // Members declared in scala.Equals
+ def canEqual(that: Any): Boolean = ???
+
+ // Members declared in scala.Product2
+ def _2: Double = ???
+
+class ComplexRect(val _1:Double, _2:Double) extends Complex {
+ ^
+one error found
diff --git a/test/files/neg/t856.scala b/test/files/neg/t856.scala
new file mode 100644
index 0000000000..e50084b6bd
--- /dev/null
+++ b/test/files/neg/t856.scala
@@ -0,0 +1,11 @@
+trait Complex extends Product2[Double,Double]
+
+class ComplexRect(val _1:Double, _2:Double) extends Complex {
+ override def toString = "ComplexRect("+_1+","+_2+")"
+}
+
+object Test {
+ def main(args:Array[String]) = {
+ new ComplexRect(1,1)._2
+ }
+}
diff --git a/test/files/neg/t875.check b/test/files/neg/t875.check
new file mode 100644
index 0000000000..406edcf507
--- /dev/null
+++ b/test/files/neg/t875.check
@@ -0,0 +1,17 @@
+t875.scala:3: error: no `: _*' annotation allowed here
+(such annotations are only allowed in arguments to *-parameters)
+ val ys = List(1, 2, 3, xs: _*)
+ ^
+t875.scala:6: error: no `: _*' annotation allowed here
+(such annotations are only allowed in arguments to *-parameters)
+ mkList1(xs: _*)
+ ^
+t875.scala:15: error: no `: _*' annotation allowed here
+(such annotations are only allowed in arguments to *-parameters)
+ f(true, 1, xs: _*)
+ ^
+t875.scala:16: error: no `: _*' annotation allowed here
+(such annotations are only allowed in arguments to *-parameters)
+ g(1, xs:_*)
+ ^
+four errors found
diff --git a/test/files/neg/t875.scala b/test/files/neg/t875.scala
new file mode 100644
index 0000000000..841b2aec3f
--- /dev/null
+++ b/test/files/neg/t875.scala
@@ -0,0 +1,18 @@
+object Test extends App {
+ val xs = List(4, 5, 6)
+ val ys = List(1, 2, 3, xs: _*)
+ def mkList1(x: Int) = List(x)
+ def mkList2(x: Boolean) = List(x)
+ mkList1(xs: _*)
+
+
+ def f(x: Int*) = List(x: _*)
+
+ def f(x: Boolean, y: Int*) = List(y: _*)
+
+ def g[a](x: a*) = List(x: _*)
+
+ f(true, 1, xs: _*)
+ g(1, xs:_*)
+
+}
diff --git a/test/files/neg/t876.check b/test/files/neg/t876.check
new file mode 100644
index 0000000000..04c5c8f22e
--- /dev/null
+++ b/test/files/neg/t876.check
@@ -0,0 +1,4 @@
+t876.scala:25: error: too many arguments for method apply: (key: AssertionError.A)manager.B in class HashMap
+ assert(manager.map(A2) == List(manager.map(A2, A1)))
+ ^
+one error found
diff --git a/test/files/neg/t876.scala b/test/files/neg/t876.scala
new file mode 100644
index 0000000000..fb1461a7d3
--- /dev/null
+++ b/test/files/neg/t876.scala
@@ -0,0 +1,28 @@
+import scala.collection.mutable.HashMap
+
+object AssertionError extends AnyRef with App
+{
+ abstract class A {}
+
+ object A1 extends A {}
+
+ object A2 extends A {}
+
+ class Manager
+ {
+ final class B {}
+
+ val map = new HashMap[A, B]
+ }
+
+
+ def test[T](f: => T) { f }
+
+ test {
+ val manager = new Manager
+
+ // This line is illegal and causes a compiler crash with Scala 2.3.1
+ assert(manager.map(A2) == List(manager.map(A2, A1)))
+ }
+
+}
diff --git a/test/files/neg/t877.check b/test/files/neg/t877.check
new file mode 100644
index 0000000000..5f25bd439c
--- /dev/null
+++ b/test/files/neg/t877.check
@@ -0,0 +1,7 @@
+t877.scala:3: error: Invalid literal number
+trait Foo extends A(22A, Bug!) {}
+ ^
+t877.scala:3: error: parents of traits may not have parameters
+trait Foo extends A(22A, Bug!) {}
+ ^
+two errors found
diff --git a/test/files/neg/t877.scala b/test/files/neg/t877.scala
new file mode 100644
index 0000000000..8cb98279db
--- /dev/null
+++ b/test/files/neg/t877.scala
@@ -0,0 +1,3 @@
+class A
+
+trait Foo extends A(22A, Bug!) {}
diff --git a/test/files/neg/t882.check b/test/files/neg/t882.check
new file mode 100644
index 0000000000..a906778a1a
--- /dev/null
+++ b/test/files/neg/t882.check
@@ -0,0 +1,4 @@
+t882.scala:2: error: traits cannot have type parameters with context bounds `: ...' nor view bounds `<% ...'
+trait SortedSet[A <% Ordered[A]] {
+ ^
+one error found
diff --git a/test/files/neg/bug882.scala b/test/files/neg/t882.scala
index 5a8908befc..5a8908befc 100644
--- a/test/files/neg/bug882.scala
+++ b/test/files/neg/t882.scala
diff --git a/test/files/neg/t900.check b/test/files/neg/t900.check
new file mode 100644
index 0000000000..cede26258b
--- /dev/null
+++ b/test/files/neg/t900.check
@@ -0,0 +1,10 @@
+t900.scala:4: error: type mismatch;
+ found : Foo.this.x.type (with underlying type Foo.this.bar)
+ required: AnyRef
+Note that implicit conversions are not applicable because they are ambiguous:
+ both method any2Ensuring in object Predef of type [A](x: A)Ensuring[A]
+ and method any2ArrowAssoc in object Predef of type [A](x: A)ArrowAssoc[A]
+ are possible conversion functions from Foo.this.x.type to AnyRef
+ def break(): x.type
+ ^
+one error found
diff --git a/test/files/neg/bug900.scala b/test/files/neg/t900.scala
index 2d2c857575..2d2c857575 100644
--- a/test/files/neg/bug900.scala
+++ b/test/files/neg/t900.scala
diff --git a/test/files/neg/t908.check b/test/files/neg/t908.check
new file mode 100644
index 0000000000..2c723a700b
--- /dev/null
+++ b/test/files/neg/t908.check
@@ -0,0 +1,4 @@
+t908.scala:8: error: not found: value makeA
+ this(makeA)
+ ^
+one error found
diff --git a/test/files/neg/bug908.scala b/test/files/neg/t908.scala
index 97f3c50586..97f3c50586 100644
--- a/test/files/neg/bug908.scala
+++ b/test/files/neg/t908.scala
diff --git a/test/files/neg/t909.check b/test/files/neg/t909.check
new file mode 100644
index 0000000000..e7a42bd246
--- /dev/null
+++ b/test/files/neg/t909.check
@@ -0,0 +1,6 @@
+t909.scala:6: error: type mismatch;
+ found : String("Hello")
+ required: Int
+ case Foo("Hello") =>
+ ^
+one error found
diff --git a/test/files/neg/bug909.scala b/test/files/neg/t909.scala
index cd67042e02..cd67042e02 100644
--- a/test/files/neg/bug909.scala
+++ b/test/files/neg/t909.scala
diff --git a/test/files/neg/t910.check b/test/files/neg/t910.check
new file mode 100644
index 0000000000..45420f8e35
--- /dev/null
+++ b/test/files/neg/t910.check
@@ -0,0 +1,6 @@
+t910.scala:4: error: type mismatch;
+ found : Seq[Char]
+ required: Seq[Int]
+ val y: Seq[Int] = rest
+ ^
+one error found
diff --git a/test/files/neg/t910.scala b/test/files/neg/t910.scala
new file mode 100644
index 0000000000..cc47104d14
--- /dev/null
+++ b/test/files/neg/t910.scala
@@ -0,0 +1,7 @@
+object RegExpTest1 extends App {
+ def co(x: Seq[Char]) = x match {
+ case Seq('s','c','a','l','a', rest @ _*) =>
+ val y: Seq[Int] = rest
+ y
+ }
+}
diff --git a/test/files/neg/t935.check b/test/files/neg/t935.check
new file mode 100644
index 0000000000..af634a2630
--- /dev/null
+++ b/test/files/neg/t935.check
@@ -0,0 +1,7 @@
+t935.scala:7: error: type arguments [Test3.B] do not conform to class E's type parameter bounds [T <: String]
+ @E[B](new B) val b = "hi"
+ ^
+t935.scala:13: error: type arguments [Test4.B] do not conform to class E's type parameter bounds [T <: String]
+ val b: String @E[B](new B) = "hi"
+ ^
+two errors found
diff --git a/test/files/neg/t935.scala b/test/files/neg/t935.scala
new file mode 100644
index 0000000000..299062adb8
--- /dev/null
+++ b/test/files/neg/t935.scala
@@ -0,0 +1,14 @@
+import annotation.Annotation
+
+object Test3 {
+ class E[T >: Nothing <: String](s: T) extends Annotation
+ class B
+ // val a = new E[B](new B)
+ @E[B](new B) val b = "hi"
+}
+
+object Test4 {
+ class E[T <: String](s: T) extends Annotation
+ class B
+ val b: String @E[B](new B) = "hi"
+}
diff --git a/test/files/neg/t944.check b/test/files/neg/t944.check
new file mode 100644
index 0000000000..1fc0a12208
--- /dev/null
+++ b/test/files/neg/t944.check
@@ -0,0 +1,4 @@
+t944.scala:5: error: implementation restricts functions to 22 parameters
+ a23:Int) => 1
+ ^
+one error found
diff --git a/test/files/neg/t944.scala b/test/files/neg/t944.scala
new file mode 100644
index 0000000000..352269a80b
--- /dev/null
+++ b/test/files/neg/t944.scala
@@ -0,0 +1,6 @@
+object TooManyArgsFunction {
+ val f = (a1:Int, a2:Int, a3:Int, a4:Int, a5:Int, a6:Int, a7:Int, a8:Int,
+ a9:Int, a10:Int, a11:Int, a12:Int, a13:Int, a14:Int, a15:Int,
+ a16:Int, a17:Int, a18:Int, a19:Int, a20:Int, a21:Int, a22:Int,
+ a23:Int) => 1
+}
diff --git a/test/files/neg/t960.check b/test/files/neg/t960.check
new file mode 100644
index 0000000000..d65b0cea93
--- /dev/null
+++ b/test/files/neg/t960.check
@@ -0,0 +1,10 @@
+t960.scala:18: error: ambiguous reference to overloaded definition,
+both method unapply in object List of type [a](xs: List[a])Option[Null]
+and method unapply in object List of type [a](xs: List[a])Option[(a, List[a])]
+match argument types (List[a])
+ case List(x, xs) => 7
+ ^
+t960.scala:12: error: method unapply is defined twice
+ def unapply[a](xs: List[a]): Option[Null] = xs match {
+ ^
+two errors found
diff --git a/test/files/neg/bug960.scala b/test/files/neg/t960.scala
index 5101cf8433..5101cf8433 100644
--- a/test/files/neg/bug960.scala
+++ b/test/files/neg/t960.scala
diff --git a/test/files/neg/t961.check b/test/files/neg/t961.check
new file mode 100644
index 0000000000..48273f764d
--- /dev/null
+++ b/test/files/neg/t961.check
@@ -0,0 +1,4 @@
+t961.scala:11: error: object Temp.B does not take parameters
+ B() match {
+ ^
+one error found
diff --git a/test/files/neg/t961.scala b/test/files/neg/t961.scala
new file mode 100644
index 0000000000..088bddd7ee
--- /dev/null
+++ b/test/files/neg/t961.scala
@@ -0,0 +1,14 @@
+object Temp {
+ abstract class A
+ object B {
+ private case class B_inner() extends A
+ def apply: A = B_inner()
+ def unapply(a: A) = a match {
+ case B_inner() => true
+ case _ => false
+ }
+ }
+ B() match {
+ case B() => Console.println("match")
+ }
+}
diff --git a/test/files/neg/t987.check b/test/files/neg/t987.check
new file mode 100644
index 0000000000..90ab70ba1c
--- /dev/null
+++ b/test/files/neg/t987.check
@@ -0,0 +1,19 @@
+t987.scala:15: error: illegal inheritance;
+ class E inherits different type instances of trait B:
+B[D] and B[C]
+class E extends D
+ ^
+t987.scala:20: error: illegal inheritance;
+ class F inherits different type instances of trait B:
+B[D] and B[C]
+class F extends D
+ ^
+t987.scala:25: error: illegal inheritance;
+ class D inherits different type instances of trait B:
+B[D] and B[C]
+abstract class D extends C with B[D] {}
+ ^
+t987.scala:25: error: type arguments [D] do not conform to trait B's type parameter bounds [T <: B[T]]
+abstract class D extends C with B[D] {}
+ ^
+four errors found
diff --git a/test/files/neg/t987.scala b/test/files/neg/t987.scala
new file mode 100644
index 0000000000..1fedf12ebc
--- /dev/null
+++ b/test/files/neg/t987.scala
@@ -0,0 +1,25 @@
+// tested using Scala compiler version 2.4.0-RC1 -- (c) 2002-2011 LAMP/EPFL
+
+// Many thanks to all at LAMP for the work that goes into Scala.
+
+
+class A {}
+
+trait B[T <: B[T]] { self: T => }
+
+abstract class C extends A with B[C]
+{
+ protected val data: List[Int]
+}
+
+class E extends D
+{
+ val data = Nil
+}
+
+class F extends D
+{
+ val data = Nil
+}
+
+abstract class D extends C with B[D] {}
diff --git a/test/files/neg/t997.check b/test/files/neg/t997.check
new file mode 100644
index 0000000000..c9fe0de756
--- /dev/null
+++ b/test/files/neg/t997.check
@@ -0,0 +1,13 @@
+t997.scala:7: error: wrong number of arguments for object Foo
+"x" match { case Foo(a) => Console.println(a) }
+ ^
+t997.scala:7: error: not found: value a
+"x" match { case Foo(a) => Console.println(a) }
+ ^
+t997.scala:13: error: wrong number of arguments for object Foo
+"x" match { case Foo(a, b, c) => Console.println((a,b,c)) }
+ ^
+t997.scala:13: error: not found: value a
+"x" match { case Foo(a, b, c) => Console.println((a,b,c)) }
+ ^
+four errors found
diff --git a/test/files/neg/t997.scala b/test/files/neg/t997.scala
new file mode 100644
index 0000000000..42b46174d6
--- /dev/null
+++ b/test/files/neg/t997.scala
@@ -0,0 +1,15 @@
+// An extractor with 2 results
+object Foo { def unapply(x : String) = Some(Pair(x, x)) }
+
+object Test extends App {
+
+// Prints 'x'; ought not to compile (or maybe a should be the Pair?).
+"x" match { case Foo(a) => Console.println(a) }
+
+// Prints '(x,x)' as expected.
+"x" match { case Foo(a, b) => Console.println((a,b)) }
+
+// Gives confusing error 'not found: value c'.
+"x" match { case Foo(a, b, c) => Console.println((a,b,c)) }
+
+}
diff --git a/test/files/neg/tailrec-2.check b/test/files/neg/tailrec-2.check
new file mode 100644
index 0000000000..4f763a1c8d
--- /dev/null
+++ b/test/files/neg/tailrec-2.check
@@ -0,0 +1,4 @@
+tailrec-2.scala:6: error: could not optimize @tailrec annotated method f: it contains a recursive call targetting a supertype
+ @annotation.tailrec final def f[B >: A](mem: List[B]): List[B] = (null: Super[A]).f(mem)
+ ^
+one error found
diff --git a/test/files/neg/tailrec-2.scala b/test/files/neg/tailrec-2.scala
new file mode 100644
index 0000000000..342cd85323
--- /dev/null
+++ b/test/files/neg/tailrec-2.scala
@@ -0,0 +1,26 @@
+sealed abstract class Super[+A] {
+ def f[B >: A](mem: List[B]) : List[B]
+}
+// This one should fail, target is a supertype
+class Bop1[+A](val element: A) extends Super[A] {
+ @annotation.tailrec final def f[B >: A](mem: List[B]): List[B] = (null: Super[A]).f(mem)
+}
+// These succeed
+class Bop2[+A](val element: A) extends Super[A] {
+ @annotation.tailrec final def f[B >: A](mem: List[B]): List[B] = (null: Bop2[A]).f(mem)
+}
+object Bop3 extends Super[Nothing] {
+ @annotation.tailrec final def f[B](mem: List[B]): List[B] = (null: Bop3.type).f(mem)
+}
+class Bop4[+A](val element: A) extends Super[A] {
+ @annotation.tailrec final def f[B >: A](mem: List[B]): List[B] = Other.f[A].f(mem)
+}
+
+object Other {
+ def f[T] : Bop4[T] = sys.error("")
+}
+
+object Bop {
+ def m1[A] : Super[A] = sys.error("")
+ def m2[A] : Bop2[A] = sys.error("")
+} \ No newline at end of file
diff --git a/test/files/neg/tailrec-3.check b/test/files/neg/tailrec-3.check
new file mode 100644
index 0000000000..a3542fb564
--- /dev/null
+++ b/test/files/neg/tailrec-3.check
@@ -0,0 +1,10 @@
+tailrec-3.scala:4: error: could not optimize @tailrec annotated method quux: it contains a recursive call not in tail position
+ @tailrec private def quux(xs: List[String]): List[String] = quux(quux(xs))
+ ^
+tailrec-3.scala:6: error: could not optimize @tailrec annotated method quux2: it contains a recursive call not in tail position
+ case x1 :: x2 :: rest => quux2(x1 :: quux2(rest))
+ ^
+tailrec-3.scala:10: error: could not optimize @tailrec annotated method quux3: it contains a recursive call not in tail position
+ case x :: xs if quux3(List("abc")) => quux3(xs)
+ ^
+three errors found
diff --git a/test/files/neg/tailrec-3.scala b/test/files/neg/tailrec-3.scala
new file mode 100644
index 0000000000..20361658ea
--- /dev/null
+++ b/test/files/neg/tailrec-3.scala
@@ -0,0 +1,14 @@
+import annotation.tailrec
+
+object Test {
+ @tailrec private def quux(xs: List[String]): List[String] = quux(quux(xs))
+ @tailrec private def quux2(xs: List[String]): List[String] = xs match {
+ case x1 :: x2 :: rest => quux2(x1 :: quux2(rest))
+ case _ => Nil
+ }
+ @tailrec private def quux3(xs: List[String]): Boolean = xs match {
+ case x :: xs if quux3(List("abc")) => quux3(xs)
+ case _ => false
+ }
+}
+
diff --git a/test/files/neg/tailrec.check b/test/files/neg/tailrec.check
index 22d70e82a0..ad92731b2c 100644
--- a/test/files/neg/tailrec.check
+++ b/test/files/neg/tailrec.check
@@ -1,10 +1,16 @@
-tailrec.scala:6: error: could not optimize @tailrec annotated method
- def facfail(n: Int): Int =
- ^
-tailrec.scala:42: error: could not optimize @tailrec annotated method
+tailrec.scala:45: error: could not optimize @tailrec annotated method facfail: it contains a recursive call not in tail position
+ else n * facfail(n - 1)
+ ^
+tailrec.scala:50: error: could not optimize @tailrec annotated method fail1: it is neither private nor final so can be overridden
@tailrec def fail1(x: Int): Int = fail1(x)
^
-tailrec.scala:45: error: could not optimize @tailrec annotated method
- @tailrec def fail2[T](xs: List[T]): List[T] = xs match {
- ^
-three errors found
+tailrec.scala:55: error: could not optimize @tailrec annotated method fail2: it contains a recursive call not in tail position
+ case x :: xs => x :: fail2[T](xs)
+ ^
+tailrec.scala:59: error: could not optimize @tailrec annotated method fail3: it is called recursively with different type arguments
+ @tailrec final def fail3[T](x: Int): Int = fail3(x - 1)
+ ^
+tailrec.scala:63: error: could not optimize @tailrec annotated method fail4: it changes type of 'this' on a polymorphic recursive call
+ @tailrec final def fail4[U](other: Tom[U], x: Int): Int = other.fail4[U](other, x - 1)
+ ^
+5 errors found
diff --git a/test/files/neg/tailrec.scala b/test/files/neg/tailrec.scala
index 4c45672f93..5b9018ae89 100644
--- a/test/files/neg/tailrec.scala
+++ b/test/files/neg/tailrec.scala
@@ -1,53 +1,65 @@
import scala.annotation.tailrec
// putting @tailrec through the paces
-object Main {
- @tailrec
- def facfail(n: Int): Int =
- if (n == 0) 1
- else n * facfail(n - 1)
-
+object Winners {
@tailrec
def facsucc(n: Int, acc: Int): Int =
if (n == 0) acc
else facsucc(n - 1, n * acc)
- @tailrec def loopy1(x: Int): Int = loopy1(x - 1)
-
- def ding {
+ @tailrec def loopsucc1(x: Int): Int = loopsucc1(x - 1)
+ @tailrec def loopsucc2[T](x: Int): Int = loopsucc2[T](x - 1)
+
+ def ding() {
object dong {
- @tailrec def loopy2(x: Int): Int = loopy2(x)
+ @tailrec def loopsucc3(x: Int): Int = loopsucc3(x)
}
()
}
-
+
def inner(q: Int) = {
@tailrec
- def loopy3(x: Int): Int = loopy3(x + 1)
-
- loopy3(q)
+ def loopsucc4(x: Int): Int = loopsucc4(x + 1)
+
+ loopsucc4(q)
+ }
+
+ object innerBob {
+ @tailrec def loopsucc5(x: Int): Int = loopsucc5(x)
}
}
-class Bob {
- // these should work
+class Winners {
@tailrec private def succ1(x: Int): Int = succ1(x)
@tailrec final def succ2(x: Int): Int = succ2(x)
@tailrec final def succ3[T](in: List[T], acc: List[T]): List[T] = in match {
case Nil => Nil
case x :: xs => succ3(xs, x :: acc)
}
+}
+
+object Failures {
+ @tailrec
+ def facfail(n: Int): Int =
+ if (n == 0) 1
+ else n * facfail(n - 1)
+}
+class Failures {
// not private, not final
@tailrec def fail1(x: Int): Int = fail1(x)
-
+
// a typical between-chair-and-keyboard error
- @tailrec def fail2[T](xs: List[T]): List[T] = xs match {
+ @tailrec final def fail2[T](xs: List[T]): List[T] = xs match {
case Nil => Nil
- case x :: xs => x :: fail2(xs)
+ case x :: xs => x :: fail2[T](xs)
}
-
- object innerBob {
- @tailrec def succ4(x: Int): Int = succ4(x)
+
+ // unsafe
+ @tailrec final def fail3[T](x: Int): Int = fail3(x - 1)
+
+ // unsafe
+ class Tom[T](x: Int) {
+ @tailrec final def fail4[U](other: Tom[U], x: Int): Int = other.fail4[U](other, x - 1)
}
}
diff --git a/test/files/neg/tcpoly_infer_ticket1162.check b/test/files/neg/tcpoly_infer_ticket1162.check
index 03334222c1..67b79e7f3c 100644
--- a/test/files/neg/tcpoly_infer_ticket1162.check
+++ b/test/files/neg/tcpoly_infer_ticket1162.check
@@ -1,4 +1,4 @@
-tcpoly_infer_ticket1162.scala:6: error: wrong number of type parameters for method apply: [A,B,F[_]]()Test.Lift[A,B,F] in object Lift
+tcpoly_infer_ticket1162.scala:6: error: wrong number of type parameters for method apply: [A, B, F[_]]()Test.Lift[A,B,F] in object Lift
def simplify[A,B]: Expression[A,B] = Lift[A,B]()
^
one error found
diff --git a/test/files/neg/tcpoly_infer_ticket1162.scala b/test/files/neg/tcpoly_infer_ticket1162.scala
index 0552b42a22..b88bd358d9 100644
--- a/test/files/neg/tcpoly_infer_ticket1162.scala
+++ b/test/files/neg/tcpoly_infer_ticket1162.scala
@@ -1,8 +1,8 @@
object Test {
- trait Expression[A,B]
+ trait Expression[A,B]
case class Lift[A,B,F[_]]() extends Expression[F[A],F[B]]
-
+
def simplify[A,B]: Expression[A,B] = Lift[A,B]()
}
diff --git a/test/files/neg/tcpoly_override.scala b/test/files/neg/tcpoly_override.scala
index 7f64ad0d5f..dd043b47ed 100644
--- a/test/files/neg/tcpoly_override.scala
+++ b/test/files/neg/tcpoly_override.scala
@@ -1,4 +1,4 @@
-// bug1231: reported by Vladimir Reshetnikov on 19 July 2007
+// t1231: reported by Vladimir Reshetnikov on 19 July 2007
trait A {
type T[_]
}
diff --git a/test/files/neg/tcpoly_ticket2101.check b/test/files/neg/tcpoly_ticket2101.check
index eac582e8ba..ad0fd8bda2 100644
--- a/test/files/neg/tcpoly_ticket2101.check
+++ b/test/files/neg/tcpoly_ticket2101.check
@@ -1,4 +1,4 @@
tcpoly_ticket2101.scala:2: error: type arguments [T2,X] do not conform to class T's type parameter bounds [A[Y] <: T[A,B],B]
class T2[X] extends T[T2, X] // ill-typed
^
-one error found \ No newline at end of file
+one error found
diff --git a/test/files/neg/tcpoly_ticket2101.scala b/test/files/neg/tcpoly_ticket2101.scala
index 68f061ce70..3af07acfac 100644
--- a/test/files/neg/tcpoly_ticket2101.scala
+++ b/test/files/neg/tcpoly_ticket2101.scala
@@ -4,10 +4,10 @@ class T2[X] extends T[T2, X] // ill-typed
// Forall Y. T2[Y] <: T[T2, X]
// debugging before fix:
-// def isSubType0 -->
+// def isSubType0 -->
// case (PolyType(tparams1, res1), PolyType(tparams2, res2)) => println("<:<PT: "+((tparams1, res1), (tparams2, res2))) //@MDEBUG
// (tparams1.length == tparams2.length &&
-// List.forall2(tparams1, tparams2)
+// List.forall2(tparams1, tparams2)
// ((p1, p2) => p2.info.substSym(tparams2, tparams1) <:< p1.info) &&
// res1 <:< res2.substSym(tparams2, tparams1))
@@ -22,7 +22,7 @@ class T2[X] extends T[T2, X] // ill-typed
// (tparams1.length == tparams2.length &&
// {
// val tpsFresh = cloneSymbols(tparams1) // @M cloneSymbols(tparams2) should be equivalent -- TODO: check
-// List.forall2(tparams1, tparams2)
+// List.forall2(tparams1, tparams2)
// ((p1, p2) => p2.info.substSym(tparams2, tpsFresh) <:< p1.info.substSym(tparams1, tpsFresh)) &&
-// res1.substSym(tparams1, tpsFresh) <:< res2.substSym(tparams2, tpsFresh)
+// res1.substSym(tparams1, tpsFresh) <:< res2.substSym(tparams2, tpsFresh)
// })
diff --git a/test/files/neg/tcpoly_typealias.scala b/test/files/neg/tcpoly_typealias.scala
index 6c7f80cc0b..96e9349298 100644
--- a/test/files/neg/tcpoly_typealias.scala
+++ b/test/files/neg/tcpoly_typealias.scala
@@ -12,7 +12,7 @@ trait A3 {
trait FooCov[+x]
trait FooCon[-x]
-trait FooBound[+x <: String]
+trait FooBound[+x <: String]
trait BOk1 extends A {
type m[+x] = FooCov[x]
@@ -30,8 +30,8 @@ trait BOk4 extends A3 {
type m[+x] = FooCov[x] // weaker variance
}
-// there are two aspects to check:
- // does type alias signature (not considering RHS) correspond to abstract type member in super class
+// there are two aspects to check:
+ // does type alias signature (not considering RHS) correspond to abstract type member in super class
// does RHS correspond to the type alias sig
trait BInv extends A{
type m[x] = FooCov[x] // error: invariant x in alias def
diff --git a/test/files/neg/tcpoly_variance.check b/test/files/neg/tcpoly_variance.check
index 2df4b4d429..c0dfcac2dd 100644
--- a/test/files/neg/tcpoly_variance.check
+++ b/test/files/neg/tcpoly_variance.check
@@ -1,5 +1,5 @@
-tcpoly_variance.scala:6: error: overriding method str in class A of type => m[java.lang.Object];
+tcpoly_variance.scala:6: error: overriding method str in class A of type => m[Object];
method str has incompatible type
- override def str: m[String] = error("foo") // since x in m[x] is invariant, ! m[String] <: m[Object]
+ override def str: m[String] = sys.error("foo") // since x in m[x] is invariant, ! m[String] <: m[Object]
^
one error found
diff --git a/test/files/neg/tcpoly_variance.scala b/test/files/neg/tcpoly_variance.scala
index 52c1452162..4b9bd50e08 100644
--- a/test/files/neg/tcpoly_variance.scala
+++ b/test/files/neg/tcpoly_variance.scala
@@ -1,7 +1,7 @@
class A[m[x]] {
- def str: m[Object] = error("foo")
+ def str: m[Object] = sys.error("foo")
}
class B[m[x]] extends A[m] {
- override def str: m[String] = error("foo") // since x in m[x] is invariant, ! m[String] <: m[Object]
+ override def str: m[String] = sys.error("foo") // since x in m[x] is invariant, ! m[String] <: m[Object]
}
diff --git a/test/files/neg/tcpoly_variance_enforce.check b/test/files/neg/tcpoly_variance_enforce.check
index 508ed90fbb..44b5b2c15c 100644
--- a/test/files/neg/tcpoly_variance_enforce.check
+++ b/test/files/neg/tcpoly_variance_enforce.check
@@ -36,10 +36,10 @@ object fcoll4_2 extends coll4[FooString, Any] // error
^
tcpoly_variance_enforce.scala:37: error: kinds of the type arguments (FooInvar) do not conform to the expected kinds of the type parameters (type m) in trait coll.
FooInvar's type parameters do not match type m's expected parameters: type x (in class FooInvar) is invariant, but type x is declared covariant
- def x: coll[FooInvar] = error("foo") // error
+ def x: coll[FooInvar] = sys.error("foo") // error
^
tcpoly_variance_enforce.scala:38: error: kinds of the type arguments (FooContra) do not conform to the expected kinds of the type parameters (type m) in trait coll.
FooContra's type parameters do not match type m's expected parameters: type x (in class FooContra) is contravariant, but type x is declared covariant
- def y: coll[FooContra] = error("foo") // error
+ def y: coll[FooContra] = sys.error("foo") // error
^
11 errors found
diff --git a/test/files/neg/tcpoly_variance_enforce.scala b/test/files/neg/tcpoly_variance_enforce.scala
index f3962d6757..0db7b692f8 100644
--- a/test/files/neg/tcpoly_variance_enforce.scala
+++ b/test/files/neg/tcpoly_variance_enforce.scala
@@ -6,7 +6,7 @@ trait coll3[m[x]]
trait coll4[m[x <: y], y]
-class FooInvar[x]
+class FooInvar[x]
class FooContra[-x]
class FooCov[+x]
class FooString[+x <: String]
@@ -15,15 +15,15 @@ object fcollok extends coll[FooCov]
object fcollinv extends coll[FooInvar] // error
object fcollcon extends coll[FooContra] // error
object fcollwb extends coll[FooString] // error
-
+
object fcoll2ok extends coll2[FooCov] // error
object fcoll2inv extends coll2[FooInvar] // error
-object fcoll2con extends coll2[FooContra]
+object fcoll2con extends coll2[FooContra]
object fcoll2wb extends coll2[FooString] // error
-
-object fcoll3ok extends coll3[FooCov]
-object fcoll3inv extends coll3[FooInvar]
-object fcoll3con extends coll3[FooContra]
+
+object fcoll3ok extends coll3[FooCov]
+object fcoll3inv extends coll3[FooInvar]
+object fcoll3con extends coll3[FooContra]
object fcoll3wb extends coll3[FooString] // error
object fcoll4ok extends coll4[FooString, String]
@@ -33,9 +33,9 @@ object fcoll4_2 extends coll4[FooString, Any] // error
object test {
var ok: coll[FooCov] = _
-
- def x: coll[FooInvar] = error("foo") // error
- def y: coll[FooContra] = error("foo") // error
+
+ def x: coll[FooInvar] = sys.error("foo") // error
+ def y: coll[FooContra] = sys.error("foo") // error
}
diff --git a/test/files/neg/type-diagnostics.check b/test/files/neg/type-diagnostics.check
new file mode 100644
index 0000000000..c5e6dec3f8
--- /dev/null
+++ b/test/files/neg/type-diagnostics.check
@@ -0,0 +1,21 @@
+type-diagnostics.scala:4: error: type mismatch;
+ found : scala.collection.Set[String]
+ required: scala.collection.immutable.Set[String]
+ def f = Calculator("Hello", binding.keySet: collection.Set[String])
+ ^
+type-diagnostics.scala:13: error: type mismatch;
+ found : List[a(in method f2)]
+ required: List[a(in method f1)]
+ y match { case y1: List[a] => f3(x, y1) }
+ ^
+type-diagnostics.scala:17: error: type mismatch;
+ found : String(in method f2)
+ required: java.lang.String
+ def f2[String](s: String) = strings(List(s))
+ ^
+type-diagnostics.scala:21: error: missing parameter type for expanded function
+The argument types of an anonymous function must be fully known. (SLS 8.5)
+Expected type was: ?
+ val f = { case 5 => 10 }
+ ^
+four errors found
diff --git a/test/files/neg/type-diagnostics.scala b/test/files/neg/type-diagnostics.scala
new file mode 100644
index 0000000000..de7e7adc3c
--- /dev/null
+++ b/test/files/neg/type-diagnostics.scala
@@ -0,0 +1,22 @@
+object SetVsSet {
+ case class Calculator[+T](name: String, parameters: Set[String])
+ val binding = Map.empty[String, String]
+ def f = Calculator("Hello", binding.keySet: collection.Set[String])
+}
+
+object TParamConfusion {
+ def strings(xs: List[String]) = xs
+
+ def f1[a <% Ordered[a]](x: List[a]) = {
+ def f2[b >: List[a] <% Ordered[b]](x: List[a], y: b): Int = {
+ def f3(xs: List[a], ys: List[a]) = -1
+ y match { case y1: List[a] => f3(x, y1) }
+ }
+ }
+
+ def f2[String](s: String) = strings(List(s))
+}
+
+object PartialInfer {
+ val f = { case 5 => 10 }
+} \ No newline at end of file
diff --git a/test/files/neg/typeerror.check b/test/files/neg/typeerror.check
index 3e21a79ad5..3ce11dad8a 100644
--- a/test/files/neg/typeerror.check
+++ b/test/files/neg/typeerror.check
@@ -1,6 +1,6 @@
typeerror.scala:6: error: type mismatch;
found : Long(in method add)
- required: Long(in package scala)
+ required: scala.Long
else add2(x.head, y.head) :: add(x.tail, y.tail)
^
one error found
diff --git a/test/files/neg/unit-returns-value.check b/test/files/neg/unit-returns-value.check
new file mode 100644
index 0000000000..ab458a350b
--- /dev/null
+++ b/test/files/neg/unit-returns-value.check
@@ -0,0 +1,7 @@
+unit-returns-value.scala:4: error: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+ if (b) return 5
+ ^
+unit-returns-value.scala:4: error: enclosing method f has result type Unit: return value discarded
+ if (b) return 5
+ ^
+two errors found
diff --git a/test/files/neg/unit-returns-value.flags b/test/files/neg/unit-returns-value.flags
new file mode 100644
index 0000000000..e8fb65d50c
--- /dev/null
+++ b/test/files/neg/unit-returns-value.flags
@@ -0,0 +1 @@
+-Xfatal-warnings \ No newline at end of file
diff --git a/test/files/neg/unit-returns-value.scala b/test/files/neg/unit-returns-value.scala
new file mode 100644
index 0000000000..ecc981f217
--- /dev/null
+++ b/test/files/neg/unit-returns-value.scala
@@ -0,0 +1,11 @@
+object Test {
+ def f {
+ var b = false
+ if (b) return 5
+ }
+
+ // no warning
+ def g {
+ return println("hello")
+ }
+}
diff --git a/test/files/neg/unit2anyref.check b/test/files/neg/unit2anyref.check
index 7af4564ffb..10fe1861f5 100644
--- a/test/files/neg/unit2anyref.check
+++ b/test/files/neg/unit2anyref.check
@@ -1,10 +1,8 @@
unit2anyref.scala:2: error: type mismatch;
found : Unit
required: AnyRef
-Note that implicit conversions are not applicable because they are ambiguous:
- both method any2stringadd in object Predef of type (x: Any)scala.runtime.StringAdd
- and method any2ArrowAssoc in object Predef of type [A](x: A)ArrowAssoc[A]
- are possible conversion functions from Unit to AnyRef
+Note: Unit is not implicitly converted to AnyRef. You can safely
+pattern match `x: AnyRef` or cast `x.asInstanceOf[AnyRef]` to do so.
val x: AnyRef = () // this should not succeed.
^
one error found
diff --git a/test/files/neg/unreachablechar.scala b/test/files/neg/unreachablechar.scala
index 94438ce321..ed04c5cd35 100644
--- a/test/files/neg/unreachablechar.scala
+++ b/test/files/neg/unreachablechar.scala
@@ -1,4 +1,4 @@
-object Foo extends Application{
+object Foo extends App{
'f' match {
case 'o'|'c'|'b' => println("Oooo");
case _ => println("stuff");
diff --git a/test/files/neg/varargs.check b/test/files/neg/varargs.check
new file mode 100644
index 0000000000..424e24403c
--- /dev/null
+++ b/test/files/neg/varargs.check
@@ -0,0 +1,10 @@
+varargs.scala:16: error: A method with a varargs annotation produces a forwarder method with the same signature (a: Int, b: Array[String])Int as an existing method.
+ @varargs def v1(a: Int, b: String*) = a + b.length
+ ^
+varargs.scala:19: error: A method without repeated parameters cannot be annotated with the `varargs` annotation.
+ @varargs def nov(a: Int) = 0
+ ^
+varargs.scala:21: error: A method with a varargs annotation produces a forwarder method with the same signature (a: Int, b: Array[String])Int as an existing method.
+ @varargs def v2(a: Int, b: String*) = 0
+ ^
+three errors found
diff --git a/test/files/neg/varargs.scala b/test/files/neg/varargs.scala
new file mode 100644
index 0000000000..657750ec8f
--- /dev/null
+++ b/test/files/neg/varargs.scala
@@ -0,0 +1,27 @@
+
+
+
+import annotation.varargs
+
+
+
+// Failing varargs annotation
+object Test {
+
+ trait A {
+ def v1(a: Int, b: Array[String]) = a
+ }
+
+ trait B extends A {
+ @varargs def v1(a: Int, b: String*) = a + b.length
+ }
+
+ @varargs def nov(a: Int) = 0
+ @varargs def v(a: Int, b: String*) = a + b.length
+ @varargs def v2(a: Int, b: String*) = 0
+ def v2(a: Int, b: Array[String]) = 0
+
+ def main(args: Array[String]) {
+ }
+
+}
diff --git a/test/files/neg/variances.check b/test/files/neg/variances.check
index e6abdcbb53..4eaab56cef 100644
--- a/test/files/neg/variances.check
+++ b/test/files/neg/variances.check
@@ -7,7 +7,10 @@ variances.scala:14: error: covariant type A occurs in contravariant position in
variances.scala:16: error: covariant type A occurs in invariant position in supertype test.C[A] with ScalaObject of object Baz
object Baz extends C[A]
^
-variances.scala:63: error: covariant type A occurs in contravariant position in type => test.Covariant.T[A]{def m: (A) => A} of value x
+variances.scala:63: error: covariant type A occurs in contravariant position in type => test.Covariant.T[A]{val m: A => A} of value x
val x: T[A] {
^
-four errors found
+variances.scala:79: error: covariant type T occurs in contravariant position in type => test.TestAlias.B[C.this.A] of method foo
+ def foo: B[A]
+ ^
+5 errors found
diff --git a/test/files/neg/variances.scala b/test/files/neg/variances.scala
index 67783bc4aa..726bc35270 100644
--- a/test/files/neg/variances.scala
+++ b/test/files/neg/variances.scala
@@ -1,7 +1,7 @@
package test
trait Vector[+A] {
- def append(x: Vector[A]): Vector[A]
+ def append(x: Vector[A]): Vector[A]
private[this] def append3(x: Vector[A]): Vector[A] = append(x)
}
@@ -11,8 +11,8 @@ object Covariant {
class Foo[+A] {
private[this] var a : A = _
def getA : A = a
- private[this] def setA(a : A) = this.a = a
-
+ private[this] def setA(a : A) = this.a = a
+
object Baz extends C[A]
trait Convert[B] {
def b2a(b : B) : A
@@ -22,21 +22,21 @@ object Covariant {
class Foo2[+A] {
private[this] var a : A = _
def getA : A = a
- private[this] def setA(a : A) = this.a = a
-
+ private[this] def setA(a : A) = this.a = a
+
{
trait Convert[B] {
def b2a(b : B) : A
def doit(b : B) = setA(b2a(b))
}
- ()
+ println("")
}
}
class Foo3[+A] {
private[this] var a : A = _
def getA : A = a
- private[this] def setA(a : A) = this.a = a
-
+ private[this] def setA(a : A) = this.a = a
+
private[this] trait Convert[B] {
def b2a(b : B) : A
def doit(b : B) = setA(b2a(b))
@@ -71,3 +71,11 @@ object Covariant {
val t: T[Any] = ST
t.x.m(new Object)
}
+
+object TestAlias {
+ class B[-T]
+ trait C[+T] {
+ type A = T
+ def foo: B[A]
+ }
+}
diff --git a/test/files/neg/viewtest.scala b/test/files/neg/viewtest.scala
index 778e672d91..ddb7fa4a3b 100644
--- a/test/files/neg/viewtest.scala
+++ b/test/files/neg/viewtest.scala
@@ -12,13 +12,13 @@ trait Ordered[+a] {
*/
def compareTo [b >: a <% Ordered[b]](that: b): Int
- def < [b >: a <% Ordered[b]](that: b): boolean = (this compareTo that) < 0
+ def < [b >: a <% Ordered[b]](that: b): Boolean = (this compareTo that) < 0
- def > [b >: a <% Ordered[b]](that: b): boolean = (this compareTo that) > 0
+ def > [b >: a <% Ordered[b]](that: b): Boolean = (this compareTo that) > 0
- def <= [b >: a <% Ordered[b]](that: b): boolean = (this compareTo that) <= 0
+ def <= [b >: a <% Ordered[b]](that: b): Boolean = (this compareTo that) <= 0
- def >= [b >: a <% Ordered[b]](that: b): boolean = (this compareTo that) >= 0
+ def >= [b >: a <% Ordered[b]](that: b): Boolean = (this compareTo that) >= 0
}
@@ -30,14 +30,14 @@ object O {
case _ => -(y compareTo x)
}
}
- implicit def view2(x: char): Ordered[char] = new Ordered[char] {
- def compareTo [b >: char <% Ordered[b]](y: b): Int = y match {
- case y1: char => x - y1
+ implicit def view2(x: Char): Ordered[Char] = new Ordered[Char] {
+ def compareTo [b >: Char <% Ordered[b]](y: b): Int = y match {
+ case y1: Char => x - y1
case _ => -(y compareTo x)
}
}
- implicit def view3[a <% Ordered[a]](x: List[a]): Ordered[List[a]] =
+ implicit def view3[a <% Ordered[a]](x: List[a]): Ordered[List[a]] =
new Ordered[List[a]] {
def compareTo [b >: List[a] <% Ordered[b]](y: b): Int = y match {
case y1: List[a] => compareLists(x, y1)
@@ -72,7 +72,7 @@ class Node[a <% Ordered[a]](elem: a, l: Tree[a], r: Tree[a]) extends Tree[a] {
if (x == elem) this
else if (x < elem) new Node(elem, l insert x, r)
else new Node(elem, l, r insert x)
- def elements: List[a] =
+ def elements: List[a] =
l.elements ::: List(elem) ::: r.elements
}
@@ -86,7 +86,7 @@ case class Str(elem: String) extends Ordered[Str] {
object Test {
import O._
- private def toCharList(s: String): List[Char] =
+ private def toCharList(s: String): List[Char] =
if (s.length() == 0) List()
else s.charAt(0) :: toCharList(s.substring(1))
@@ -106,7 +106,7 @@ object Test {
Console.println(t.elements)
}
{
- var t: Tree[List[char]] = Empty
+ var t: Tree[List[Char]] = Empty
for (s <- args) {
t = t insert toCharList(s)
}
diff --git a/test/files/neg/volatile-intersection.scala b/test/files/neg/volatile-intersection.scala
index 086c474a37..209d13baef 100644
--- a/test/files/neg/volatile-intersection.scala
+++ b/test/files/neg/volatile-intersection.scala
@@ -1,4 +1,4 @@
-object Test extends Application {
+object Test extends App {
trait A
trait B extends A
diff --git a/test/files/neg/volatile.scala b/test/files/neg/volatile.scala
index 11f6eb539f..8292863152 100644
--- a/test/files/neg/volatile.scala
+++ b/test/files/neg/volatile.scala
@@ -1,4 +1,4 @@
-object Test extends Application {
+object Test extends App {
trait A
trait B extends A
diff --git a/test/files/neg/xmltruncated7.check b/test/files/neg/xmltruncated7.check
new file mode 100644
index 0000000000..67e7bd4b18
--- /dev/null
+++ b/test/files/neg/xmltruncated7.check
@@ -0,0 +1,7 @@
+xmltruncated7.scala:2: error: in XML literal: in XML content, please use '}}' to express '}'
+ <p>foo}: </p>
+ ^
+xmltruncated7.scala:2: error: I encountered a '}' where I didn't expect one, maybe this tag isn't closed <p>
+ <p>foo}: </p>
+ ^
+two errors found
diff --git a/test/files/neg/xmltruncated7.scala b/test/files/neg/xmltruncated7.scala
new file mode 100644
index 0000000000..7e296a910d
--- /dev/null
+++ b/test/files/neg/xmltruncated7.scala
@@ -0,0 +1,3 @@
+object Test {
+ <p>foo}: </p>
+} \ No newline at end of file
diff --git a/test/files/pos/CustomGlobal.scala b/test/files/pos/CustomGlobal.scala
new file mode 100644
index 0000000000..30bf227950
--- /dev/null
+++ b/test/files/pos/CustomGlobal.scala
@@ -0,0 +1,33 @@
+package custom
+
+import scala.tools.nsc._, reporters._, typechecker._
+
+/** Demonstration of a custom Global with a custom Typer,
+ * decoupled from trunk. Demonstration:
+ *
+{{{
+scalac -d . CustomGlobal.scala && scala -nc -Yglobal-class custom.CustomGlobal \
+ -e 'class Bippy(x: Int) ; def f = new Bippy(5)'
+
+I'm typing a Bippy! It's a ClassDef.
+I'm typing a Bippy! It's a Ident.
+I'm typing a Bippy! It's a DefDef.
+}}}
+ *
+ */
+class CustomGlobal(currentSettings: Settings, reporter: Reporter) extends Global(currentSettings, reporter) {
+ override lazy val analyzer = new {
+ val global: CustomGlobal.this.type = CustomGlobal.this
+ } with Analyzer {
+ override def newTyper(context: Context): Typer = new CustomTyper(context)
+
+ class CustomTyper(context : Context) extends Typer(context) {
+ override def typed(tree: Tree, mode: Int, pt: Type): Tree = {
+ if (tree.summaryString contains "Bippy")
+ println("I'm typing a Bippy! It's a " + tree.shortClass + ".")
+
+ super.typed(tree, mode, pt)
+ }
+ }
+ }
+}
diff --git a/test/files/pos/FPTest.scala b/test/files/pos/FPTest.scala
new file mode 100644
index 0000000000..b351b7bb9c
--- /dev/null
+++ b/test/files/pos/FPTest.scala
@@ -0,0 +1,11 @@
+// On some hypothetical future day when we can test the emitted bytecode,
+// should look for the fp bit. Until then, just a pos test.
+import annotation.strictfp
+
+@strictfp class FPTest {
+ def main(args: Array[String]): Unit = {
+ val d: Double = 8e+307
+ println(4.0 * d * 0.5);
+ println(2.0 * d);
+ }
+}
diff --git a/test/files/pos/List1.scala b/test/files/pos/List1.scala
index 1321d95c20..9d3a51f4e3 100644
--- a/test/files/pos/List1.scala
+++ b/test/files/pos/List1.scala
@@ -17,7 +17,7 @@ object lists {
def isEmpty = false;
def head = x;
def tail = xs;
- }
+ }
def foo = {
val intnil = Nil[Int];
diff --git a/test/files/pos/MailBox.scala b/test/files/pos/MailBox.scala
index 67b923ea3e..2a3f02df0b 100644
--- a/test/files/pos/MailBox.scala
+++ b/test/files/pos/MailBox.scala
@@ -1,8 +1,9 @@
package test;
-import scala.concurrent._;
+import scala.actors.TIMEOUT;
class MailBox {
+
private class LinkedList[a] {
var elem: a = _;
var next: LinkedList[a] = null;
@@ -23,7 +24,7 @@ class MailBox {
private val sent = new LinkedList[Any];
private var lastSent = sent;
private val receivers = new LinkedList[Receiver];
- private var lastReceiver = receivers;
+ private var lastReceiver = receivers;
def send(msg: Any): Unit = synchronized {
var r = receivers;
@@ -58,7 +59,7 @@ class MailBox {
}
f(msg)
}
-
+
def receiveWithin[a](msec: Long)(f: PartialFunction[Any, a]): a = {
val msg: Any = synchronized {
var s = sent;
diff --git a/test/files/pos/Transactions.scala b/test/files/pos/Transactions.scala
index ed989e178e..9b4388300b 100644
--- a/test/files/pos/Transactions.scala
+++ b/test/files/pos/Transactions.scala
@@ -28,7 +28,7 @@ class Transaction {
var next: Transaction = null
def this(hd: Transaction, tl: Transaction) = { this(); this.head = head; this.next = next }
-
+
def makeAbort() = synchronized {
while (status != Transaction.Aborted && status != Transaction.Committed) {
status = Transaction.Abortable
@@ -48,7 +48,7 @@ class Transaction {
case ex: AbortException => abort(); None
case ex: Throwable => abort(); throw ex
}
-
+
}
trait Transactional {
@@ -58,7 +58,7 @@ trait Transactional {
/** copy back snapshot */
def rollBack(): Unit
-
+
var readers: Transaction
var writer: Transaction
@@ -66,11 +66,11 @@ trait Transactional {
if (writer == null) null
else if (writer.status == Transaction.Running) writer
else {
- if (writer.status != Transaction.Committed) rollBack();
- writer = null;
- null
+ if (writer.status != Transaction.Committed) rollBack();
+ writer = null;
+ null
}
-
+
def getter(thisTrans: Transaction) {
if (writer == thisTrans) return
var r = readers
@@ -96,7 +96,7 @@ trait Transactional {
synchronized {
val w = currentWriter()
if (w != null)
- if (thisTrans.id < w.id) { w.makeAbort(); rollBack() }
+ if (thisTrans.id < w.id) { w.makeAbort(); rollBack() }
else throw new AbortException
var r = readers
while (r != null && r.head.status != Transaction.Running) { r = r.next; readers = r }
@@ -111,4 +111,4 @@ trait Transactional {
}
}
}
-
+
diff --git a/test/files/pos/annotDepMethType.flags b/test/files/pos/annotDepMethType.flags
new file mode 100644
index 0000000000..e1b37447c9
--- /dev/null
+++ b/test/files/pos/annotDepMethType.flags
@@ -0,0 +1 @@
+-Xexperimental \ No newline at end of file
diff --git a/test/files/pos/annotDepMethType.scala b/test/files/pos/annotDepMethType.scala
new file mode 100644
index 0000000000..b5e7cb9e8b
--- /dev/null
+++ b/test/files/pos/annotDepMethType.scala
@@ -0,0 +1,7 @@
+case class pc(calls: Any*) extends TypeConstraint
+
+object Main {
+ class C0 { def baz: String = "" }
+ class C1 { def bar(c0: C0): String @pc(c0.baz) = c0.baz }
+ def trans(c1: C1): String @pc(c1.bar(throw new Error())) = c1.bar(new C0)
+}
diff --git a/test/files/pos/annotations.scala b/test/files/pos/annotations.scala
index d1bd6ba264..4e5fddda39 100644
--- a/test/files/pos/annotations.scala
+++ b/test/files/pos/annotations.scala
@@ -1,4 +1,5 @@
class ann(i: Int) extends Annotation
+class cfann(x: String) extends ClassfileAnnotation
// annotations on abstract types
abstract class C1[@serializable @cloneable +T, U, V[_]]
@@ -24,7 +25,7 @@ object Test {
//bug #1214
val y = new (Integer @ann(0))(2)
- import scala.reflect.BeanProperty
+ import scala.beans.BeanProperty
// bug #637
trait S { def getField(): Int }
@@ -35,11 +36,15 @@ object Test {
// annotation on annotation constructor
@(ann @ann(100))(200) def foo() = 300
+
+ // #2984
+ private final val NAMESPACE = "/info"
+ @cfann(x = NAMESPACE + "/index") def index = "success"
}
// test forward references to getters / setters
class BeanPropertyTests {
- @scala.reflect.BeanProperty lazy val lv1 = 0
+ @scala.beans.BeanProperty lazy val lv1 = 0
def foo() {
val bp1 = new BeanPropertyTests1
@@ -53,13 +58,13 @@ class BeanPropertyTests {
bp1.setV2(100)
}
- @scala.reflect.BeanProperty var v1 = 0
+ @scala.beans.BeanProperty var v1 = 0
}
class BeanPropertyTests1 {
- @scala.reflect.BeanProperty lazy val lv2 = "0"
- @scala.reflect.BeanProperty var v2 = 0
+ @scala.beans.BeanProperty lazy val lv2 = "0"
+ @scala.beans.BeanProperty var v2 = 0
}
// test mixin of getters / setters, and implementing abstract
@@ -73,8 +78,8 @@ class C extends T with BeanF {
}
trait T {
- @scala.reflect.BeanProperty var f = "nei"
- @scala.reflect.BooleanBeanProperty var g = false
+ @scala.beans.BeanProperty var f = "nei"
+ @scala.beans.BooleanBeanProperty var g = false
}
trait BeanF {
@@ -84,3 +89,22 @@ trait BeanF {
def isG(): Boolean
def setG(nb: Boolean): Unit
}
+
+
+class Ann3(arr: Array[String]) extends ClassfileAnnotation
+class Ann4(i: Int) extends ClassfileAnnotation
+class Ann5(value: Class[_]) extends ClassfileAnnotation
+
+object Test3 {
+ final val i = 1083
+ final val cls = classOf[String]
+}
+
+class Test4 {
+ @Ann3(arr = Array("dlkfj", "DSF"))
+ @Ann4(i = 2908)
+ @Ann4(i = Test3.i)
+ @Ann5(value = classOf[Int])
+ @Ann5(Test3.cls)
+ def foo {}
+}
diff --git a/test/files/pos/array-interfaces.scala b/test/files/pos/array-interfaces.scala
new file mode 100644
index 0000000000..4955911078
--- /dev/null
+++ b/test/files/pos/array-interfaces.scala
@@ -0,0 +1,9 @@
+object s {
+ def f(x: Cloneable) = ()
+ def g(x: java.io.Serializable) = ()
+
+ def main(args: Array[String]): Unit = {
+ f(args)
+ g(args)
+ }
+} \ No newline at end of file
diff --git a/test/files/pos/arrays2.scala b/test/files/pos/arrays2.scala
index 795c486e37..2d5409cbb8 100644
--- a/test/files/pos/arrays2.scala
+++ b/test/files/pos/arrays2.scala
@@ -11,8 +11,8 @@ object arrays2 {
// #2422
object arrays4 {
- val args = Array[String]("World")
- "Hello %1$s".format(args: _*)
+ val args = Array[String]("World")
+ "Hello %1$s".format(args: _*)
}
// #2461
diff --git a/test/files/pos/bug0029.scala b/test/files/pos/bug0029.scala
deleted file mode 100644
index 0af45ab62d..0000000000
--- a/test/files/pos/bug0029.scala
+++ /dev/null
@@ -1,3 +0,0 @@
-object Main {
- def f[a]: List[List[a]] = for (val l1 <- Nil; val l2 <- Nil) yield l1
-}
diff --git a/test/files/pos/bug0031.scala b/test/files/pos/bug0031.scala
deleted file mode 100644
index aa787ca794..0000000000
--- a/test/files/pos/bug0031.scala
+++ /dev/null
@@ -1,29 +0,0 @@
-object Main {
-
- trait Ensure[a] {
- def ensure(postcondition: a => Boolean): a
- }
-
- def require[a](precondition: => Boolean)(command: => a): Ensure[a] =
- if (precondition)
- new Ensure[a] {
- def ensure(postcondition: a => Boolean): a = {
- val result = command;
- if (postcondition(result)) result
- else error("Assertion error")
- }
- }
- else
- error("Assertion error");
-
- def arb[a](s: List[a]) =
- require (! s.isEmpty) {
- s.head
- } ensure (result => s contains result);
-
- def main(args: Array[String]) = {
- val s = List(1, 2);
- Console.println(arb(s))
- }
-
-}
diff --git a/test/files/pos/bug0066.scala b/test/files/pos/bug0066.scala
deleted file mode 100644
index 2153264e7a..0000000000
--- a/test/files/pos/bug0066.scala
+++ /dev/null
@@ -1,7 +0,0 @@
-class GBTree[A, B] /*with Map[A, B, GBTree[A,B]]*/ {
- abstract class Tree[A,B];
- case class Node[A,B](key:A,value:B,smaller:Node[A,B],bigger:Node[A,B])
- extends Tree[A,B];
- case class Nil[A,B]() extends Tree[A,B];
-
-}
diff --git a/test/files/pos/bug0069.scala b/test/files/pos/bug0069.scala
deleted file mode 100644
index 113820613f..0000000000
--- a/test/files/pos/bug0069.scala
+++ /dev/null
@@ -1,11 +0,0 @@
-object testCQ {
- // why does this not work directly
- case class Thing( name:String, contains:List[ Thing ] );
-
- /* ... but this one does?
- abstract class T;
- case class Thing2( name:String, contains:List[ T ] ) extends T;
- */
-
-}
-
diff --git a/test/files/pos/bug0091.scala b/test/files/pos/bug0091.scala
deleted file mode 100644
index 54c821b41c..0000000000
--- a/test/files/pos/bug0091.scala
+++ /dev/null
@@ -1,6 +0,0 @@
-class Bug {
- def main(args: Array[String]) = {
- var msg: String = null; // no bug if "null" instead of "_"
- val f: PartialFunction[Any, unit] = { case 42 => msg = "coucou" };
- }
-}
diff --git a/test/files/pos/bug0325.scala b/test/files/pos/bug0325.scala
deleted file mode 100644
index 4b13c431b7..0000000000
--- a/test/files/pos/bug0325.scala
+++ /dev/null
@@ -1,4 +0,0 @@
-class Foobar {
- val foo = "foo";
- def foo(bar: String): String = foo + bar; // crashes the compiler
-}
diff --git a/test/files/pos/bug0599.scala b/test/files/pos/bug0599.scala
deleted file mode 100644
index 885159af66..0000000000
--- a/test/files/pos/bug0599.scala
+++ /dev/null
@@ -1,18 +0,0 @@
-abstract class FooA {
- type A <: Ax;
- abstract class Ax;
- abstract class InnerA {
- type B <: A;
- def doB : B;
- }
- }
- trait FooB extends FooA {
- type A <: Ax;
- trait Ax extends super.Ax { def xxx : Int; }
- abstract class InnerB extends InnerA {
- // type B <: A;
- val a : A = doB;
- a.xxx;
- doB.xxx;
- }
- }
diff --git a/test/files/pos/bug0646.scala b/test/files/pos/bug0646.scala
deleted file mode 100644
index 64214f65b1..0000000000
--- a/test/files/pos/bug0646.scala
+++ /dev/null
@@ -1,21 +0,0 @@
-object xfor {
-
- import scala.xml.NodeSeq
-
- val books =
- <bks>
- <title>Blabla</title>
- <title>Blubabla</title>
- <title>Baaaaaaalabla</title>
- </bks>;
-
- new NodeSeq { val theSeq = books.child } match {
- case t @ <title>Blabla</title> => t
- }
-
- //val n: NodeSeq = new NodeSeq { val theSeq = books.child }
- //n match {
- // case t @ <title>Blabla</title> => t
- //}
-
-}
diff --git a/test/files/pos/bug1000.scala b/test/files/pos/bug1000.scala
deleted file mode 100644
index c6426401ae..0000000000
--- a/test/files/pos/bug1000.scala
+++ /dev/null
@@ -1,4 +0,0 @@
-object Test extends Application {
- val xs = Array(1, 2, 3)
- Console.println(xs.filter(_ >= 0).length)
-}
diff --git a/test/files/pos/bug1001.scala b/test/files/pos/bug1001.scala
deleted file mode 100644
index 776a334dad..0000000000
--- a/test/files/pos/bug1001.scala
+++ /dev/null
@@ -1,105 +0,0 @@
-// I suspect the stack overflow is occurring when the compiler is determining the types for the following line at the end of the file:-
-// val data = List(N26,N25)
-
-abstract class A
-{
- // commenting out the following line (only) leads to successful compilation
- protected val data: List[A]
-}
-
-trait B[T <: B[T]] extends A { self: T => }
-
-abstract class C extends A
-{
- // commenting out the following line (only) leads to successful compilation
- protected val data: List[C]
-}
-
-abstract class D extends C with B[D] {}
-
-abstract class Ee extends C with B[Ee]
-{
-}
-
-
-object N1 extends D
-{
- val data = Nil
-}
-
-object N2 extends D
-{
- val data = Nil
-}
-
-object N5 extends D
-{
- val data = List(N1)
-}
-
-object N6 extends D
-{
- val data = List(N1)
-}
-
-object N8 extends D
-{
- val data = List(N1)
-}
-
-object N10 extends D
-{
- val data = Nil
-}
-
-object N13 extends D
-{
- val data = List(N2)
-}
-
-object N14 extends D
-{
- val data = List(N5,N10,N8)
-}
-
-object N15 extends D
-{
- val data = List(N14)
-}
-
-object N16 extends D
-{
- val data = List(N13,N6,N15)
-}
-
-object N17 extends D
-{
- val data = List(N16)
-}
-
-object N21 extends D
-{
- val data = List(N16)
-}
-
-object N22 extends D
-{
- val data = List(N17)
-}
-
-object N25 extends D
-{
- val data = List(N22)
-}
-
-object N26 extends Ee
-{
- val data = List(N21,N17)
-}
-
-// Commenting out the following object (only) leads to successful compilation
-object N31 extends Ee
-{
- // If we use List[C](N26,N25), we achieve successful compilation
- val data = List[C](N26,N25)
-}
diff --git a/test/files/pos/bug1006.scala b/test/files/pos/bug1006.scala
deleted file mode 100644
index 34080b68c1..0000000000
--- a/test/files/pos/bug1006.scala
+++ /dev/null
@@ -1,15 +0,0 @@
-object Test extends Application {
-
-def test() {
-
- abstract class A[T] {
- def myVal: T
- }
-
- class B[T1](value: T1) extends A[T1] {
- def myVal: T1 = value
- }
-
- Console.println(new B[Int](23).myVal)
-}
-}
diff --git a/test/files/pos/bug1014.scala b/test/files/pos/bug1014.scala
deleted file mode 100644
index fdabc8b67c..0000000000
--- a/test/files/pos/bug1014.scala
+++ /dev/null
@@ -1,13 +0,0 @@
-import scala.xml.{NodeSeq, Elem}
-
-class EO extends Application with Moo{
- def cat = <cat>dog</cat>
-
- implicit def nodeSeqToFlog(in: Elem): Flog = new Flog(in)
-}
-
-trait Moo {
- def cat: Flog
-}
-
-class Flog(val in: NodeSeq)
diff --git a/test/files/pos/bug1049.scala b/test/files/pos/bug1049.scala
deleted file mode 100644
index 3cc9d0cc58..0000000000
--- a/test/files/pos/bug1049.scala
+++ /dev/null
@@ -1,7 +0,0 @@
-package bug1049
-
-abstract class Test {
- type T <: A
- class A { self: T => }
- class B extends A { self: T => }
-}
diff --git a/test/files/pos/bug1050.scala b/test/files/pos/bug1050.scala
deleted file mode 100644
index 1dfa20c988..0000000000
--- a/test/files/pos/bug1050.scala
+++ /dev/null
@@ -1,10 +0,0 @@
-package bug1050
-
-abstract class A {
- type T <: scala.ScalaObject
- class A { this: T =>
- def b = 3
- def c = b
- b
- }
-}
diff --git a/test/files/pos/bug1070.scala b/test/files/pos/bug1070.scala
deleted file mode 100644
index 95b77184d7..0000000000
--- a/test/files/pos/bug1070.scala
+++ /dev/null
@@ -1,4 +0,0 @@
-import scala.reflect.BeanProperty;
-trait beanpropertytrait {
- @BeanProperty var myVariable: Long = -1l;
-}
diff --git a/test/files/pos/bug1075.scala b/test/files/pos/bug1075.scala
deleted file mode 100644
index 936ef72272..0000000000
--- a/test/files/pos/bug1075.scala
+++ /dev/null
@@ -1,17 +0,0 @@
-class Directory(var dir_ : String)
-{
- if (!dir_.startsWith("/")) {
- throw new RuntimeException("Invalid directory")
- }
- dir_ = dir_.replaceAll("/{2,}", "/")
-
- def this(serialized : Array[byte]) = {
- this(new String(serialized, "UTF-8"))
- }
-
- def dir = dir_
-}
-
-object Test extends Directory("/bab/dkkd//dkkdkd//kdkdk") with Application {
- println(dir)
-}
diff --git a/test/files/pos/bug1090.scala b/test/files/pos/bug1090.scala
deleted file mode 100644
index a9bce90b00..0000000000
--- a/test/files/pos/bug1090.scala
+++ /dev/null
@@ -1,16 +0,0 @@
-object Test {
- trait Manager {
- type Node;
- def iterator : Iterator[Node]
- }
- trait Core {
- type Node;
- trait NodeImpl
- trait Manager extends Test.Manager {
- type Node = Core.this.Node
- }
- def f(manager : Manager) = manager.iterator.foreach{
- case node : NodeImpl =>
- }
- }
-}
diff --git a/test/files/pos/bug1123.scala b/test/files/pos/bug1123.scala
deleted file mode 100644
index 3812fa3eb3..0000000000
--- a/test/files/pos/bug1123.scala
+++ /dev/null
@@ -1,11 +0,0 @@
-
-package test;
-object Test {
- class Editor {
- private object extraListener {
- def h : AnyRef = extraListener
- }
- def f = extraListener.h
- }
- def main(args : Array[String]) : Unit = (new Editor).f
-}
diff --git a/test/files/pos/bug115.scala b/test/files/pos/bug115.scala
deleted file mode 100644
index e361f06370..0000000000
--- a/test/files/pos/bug115.scala
+++ /dev/null
@@ -1,9 +0,0 @@
-class S[A](f: A => A, x: A) {
- Console.println(f(x));
-}
-class T[B](f: B => B, y: B) extends S((x: B) => f(x), y) {
-}
-object Test extends Application {
- new T[Int](x => x * 2, 1);
- val f = new S((x: Int) => x, 1);
-}
diff --git a/test/files/pos/bug1168.scala b/test/files/pos/bug1168.scala
deleted file mode 100644
index 58407e328e..0000000000
--- a/test/files/pos/bug1168.scala
+++ /dev/null
@@ -1,16 +0,0 @@
-object Test extends Application {
-
- trait SpecialException {}
-
- try {
- throw new Exception
- } catch {
- case e : SpecialException => {
- println("matched SpecialException: "+e)
- assume(e.isInstanceOf[SpecialException])
- }
- case e : Exception => {
- assume(e.isInstanceOf[Exception])
- }
- }
-}
diff --git a/test/files/pos/bug1210a.scala b/test/files/pos/bug1210a.scala
deleted file mode 100644
index b3492f96e4..0000000000
--- a/test/files/pos/bug1210a.scala
+++ /dev/null
@@ -1,15 +0,0 @@
-// both styles of abstraction should behave the same
-// related to 1210 because that bug broke the OO version below
-trait OO {
- abstract class Test { self =>
- type T
-
- val v: Test {type T = self.T} = self.v.v
- }
-}
-
-trait FP {
- abstract class Test[T] {
- val v: Test[T] = v.v
- }
-}
diff --git a/test/files/pos/bug122.scala b/test/files/pos/bug122.scala
deleted file mode 100644
index 630e24ce4a..0000000000
--- a/test/files/pos/bug122.scala
+++ /dev/null
@@ -1,4 +0,0 @@
-class L {
- val List(v:Int, 2) = List(2, v:Int)
- val (a:Int, b:Int) = (1, a)
-}
diff --git a/test/files/pos/bug1237.scala b/test/files/pos/bug1237.scala
deleted file mode 100644
index 7777372138..0000000000
--- a/test/files/pos/bug1237.scala
+++ /dev/null
@@ -1,14 +0,0 @@
-class HelloWorld {
- def main(args: Array[String]) {
-
- object TypeBool;
-
- trait Fct {
- def g(x : Int) = TypeBool // breaks.
-
- // def g(x : Int) = 3 // fine.
- }
-
- ()
- }
-}
diff --git a/test/files/pos/bug1241.scala b/test/files/pos/bug1241.scala
deleted file mode 100644
index 333e6c5490..0000000000
--- a/test/files/pos/bug1241.scala
+++ /dev/null
@@ -1,8 +0,0 @@
-object test extends Application {
- // more..
- type T = { def hello() }
- //val x4 = new AnyRef { def hello() { println("4") } } // ok!
- val x4: T = new { def hello() { println("4") } } // error!
- x4.hello()
- // more..
-}
diff --git a/test/files/pos/bug1272.scala b/test/files/pos/bug1272.scala
deleted file mode 100644
index d86a909ae5..0000000000
--- a/test/files/pos/bug1272.scala
+++ /dev/null
@@ -1,9 +0,0 @@
-object ImplicitTest {
- implicit val i : Int = 10
- implicit def a(implicit i : Int) : Array[Byte] = null
- implicit def b[T](implicit i : Int) : Array[T] = null
-
- def fn[T](implicit x : T) = 0
-
- val x = fn[Array[Byte]]
-} \ No newline at end of file
diff --git a/test/files/pos/bug1279a.scala b/test/files/pos/bug1279a.scala
deleted file mode 100644
index 7568d3afcd..0000000000
--- a/test/files/pos/bug1279a.scala
+++ /dev/null
@@ -1,38 +0,0 @@
-// providing the type parameter in the recursive call to all4Impl
-// avoids the problem
-
-
-// covariant linked list
-abstract class M
-{ self =>
-
- type T
- final type selfType = M {type T <: self.T}
- type actualSelfType >: self.type <: selfType
-
- def next: selfType
-
-
- // I don't understand why this doesn't compile, but that's a separate matter
- // error: method all2 cannot be accessed in M.this.selfType
- // because its instance type => Stream[M{type T <: M.this.selfType#T}]
- // contains a malformed type: M.this.selfType#T
- // def all2: Stream[M {type T <: self.T}] = Stream.cons(self: actualSelfType, next.all2)
-
-
- // compiles successfully
- // def all3: Stream[M {type T <: self.T}] = all3Impl(self: actualSelfType)
- // private def all3Impl(first: M {type T <: self.T}): Stream[M {type T <: self.T}] = Stream.cons(first, all3Impl(first.next))
-
-
-
- def all4: Stream[M {type T <: self.T}] = Unrelated.all4Impl[T](self: actualSelfType)
-}
-
-object Unrelated
-{
- def all4Impl[U](first: M {type T <: U}): Stream[M {type T <: U}] = Stream.cons(first, all4Impl(first.next))
-
-// compiles successfully
-// def all4Impl[U](first: M {type T <: U}): Stream[M {type T <: U}] = Stream.cons(first, all4Impl[U](first.next))
-}
diff --git a/test/files/pos/bug1292.scala b/test/files/pos/bug1292.scala
deleted file mode 100644
index 83a996d530..0000000000
--- a/test/files/pos/bug1292.scala
+++ /dev/null
@@ -1,33 +0,0 @@
-trait Foo[T <: Foo[T, Enum], Enum <: Enumeration] {
- type StV = Enum#Value
- type Meta = MegaFoo[T, Enum]
-
- type Slog <: Enumeration
-
- def getSingleton: Meta
-}
-
-trait MegaFoo[T <: Foo[T, Enum], Enum <: Enumeration] extends Foo[T, Enum] {
- def doSomething(what: T, misc: StV, dog: Meta#Event) = None
- abstract class Event
- object Event
-
- def stateEnumeration: Slog
- def se2: Enum
-}
-
-object E extends Enumeration {
- val A = Value
- val B = Value
-}
-
-class RFoo extends Foo[RFoo, E.type] {
- def getSingleton = MegaRFoo
-
- type Slog = E.type
-}
-
-object MegaRFoo extends RFoo with MegaFoo[RFoo, E.type] {
- def stateEnumeration = E
- def se2 = E
-}
diff --git a/test/files/pos/bug1357.scala b/test/files/pos/bug1357.scala
deleted file mode 100644
index fcdecb3ad3..0000000000
--- a/test/files/pos/bug1357.scala
+++ /dev/null
@@ -1,21 +0,0 @@
-object NonEmptyCons {
- def unapply[H, T](c: (H, T)): Option[(H, T)] = Some(c)
-}
-
-
-object Main {
-
- type BT[+H, +T <: Tuple2[Tuple2[H, T], Tuple2[H, T]]] = Tuple2[H, T]
-
- // type T = Tuple2[String,String]
- type BinaryTree[+E] = BT[E, T forSome { type T <: Tuple2[BT[E, T], BT[E, T]] }]
-
- def foo[E](tree: BinaryTree[E]): Unit = tree match {
- case NonEmptyCons(_, tail) => {
- tail match {
- case NonEmptyCons(_, _) => {
- }
- }
- }
- }
-} \ No newline at end of file
diff --git a/test/files/pos/bug1385.scala b/test/files/pos/bug1385.scala
deleted file mode 100644
index 55356c1f25..0000000000
--- a/test/files/pos/bug1385.scala
+++ /dev/null
@@ -1,3 +0,0 @@
-@serializable object Test {
- private def readResolve:AnyRef = this
-}
diff --git a/test/files/pos/bug1560.scala b/test/files/pos/bug1560.scala
deleted file mode 100644
index 384e808e4b..0000000000
--- a/test/files/pos/bug1560.scala
+++ /dev/null
@@ -1,11 +0,0 @@
-object Test extends Application {
- trait C[T] {
- def t: T
- }
-
- def b: Option[C[_]] = null
-
- def c = b match {
- case Some(b) => b.t
- }
-}
diff --git a/test/files/pos/bug1565.scala b/test/files/pos/bug1565.scala
deleted file mode 100644
index df333151d5..0000000000
--- a/test/files/pos/bug1565.scala
+++ /dev/null
@@ -1,18 +0,0 @@
-object Bug1565 {
- object X0 { 0; (a : Int, b : Int, c : Int) => println(List(a, b)) }
- def x() = { 0; (a : Int, b : Int) => println(List(a, b)) ; 0 }
-
- (a : Int, b : Int) => println(List(a, b))
-
- // various function syntaxes to exercise the parser
- val xs = List(1,2,3)
- xs.filter(x => x < 2)
- xs.filter((x) => x < 2)
- xs.filter { x => x < 2 }
- xs.filter { _ < 2 }
- xs.filter (_ < 2)
- xs.foreach { e =>
- val buf0 = e + 1
- buf0
- }
-}
diff --git a/test/files/pos/bug2023.scala b/test/files/pos/bug2023.scala
deleted file mode 100644
index 21c6fc96a6..0000000000
--- a/test/files/pos/bug2023.scala
+++ /dev/null
@@ -1,16 +0,0 @@
-trait C[A]
-
-object C {
- implicit def ipl[A](implicit from: A => Ordered[A]): C[A] = null
-}
-
-object P {
- def foo[A](i: A, j: A)(implicit c: C[A]): Unit = ()
-}
-
-class ImplicitChainTest {
- def testTrivial: Unit = {
- P.foo('0', '9')
- P.foo('0', '9')
- }
-}
diff --git a/test/files/pos/bug2081.scala b/test/files/pos/bug2081.scala
deleted file mode 100644
index 52388464a5..0000000000
--- a/test/files/pos/bug2081.scala
+++ /dev/null
@@ -1,11 +0,0 @@
-object ScalaForRubyists {
- class RichInt(n: Int) {
- def days = 1000*60*60*24*n
- }
-
- implicit def RichInt(n: Int): RichInt = new RichInt(n)
-
- val x = 10.days
- // a couple parser corner cases I wanted not to break
- val y = 5.e0 + 5e7
-}
diff --git a/test/files/pos/bug210.scala b/test/files/pos/bug210.scala
deleted file mode 100644
index 0049d1f34c..0000000000
--- a/test/files/pos/bug210.scala
+++ /dev/null
@@ -1,17 +0,0 @@
-trait Lang1 {
- trait Exp;
- trait Visitor { def f(left: Exp): Unit }
- class Eval1 extends Visitor { self: Visitor =>
- def f(left: Exp) = ()
- }
-}
-
-trait Lang2 extends Lang1 {
- class Eval2 extends Eval1 { self: Visitor => }
-}
-/*
-object Main with Application {
- val lang2 = new Lang2 {}
- val eval = new lang2.Eval2
-}
-*/
diff --git a/test/files/pos/bug211.scala b/test/files/pos/bug211.scala
deleted file mode 100644
index 1c2c54934d..0000000000
--- a/test/files/pos/bug211.scala
+++ /dev/null
@@ -1,8 +0,0 @@
-trait A;
-trait B;
-class Foo extends A with B { self: A with B => }
-object Test extends Application {
- new Foo();
- Console.println("bug211 completed");
-}
-
diff --git a/test/files/pos/bug2168.scala b/test/files/pos/bug2168.scala
deleted file mode 100644
index 1cf73446a8..0000000000
--- a/test/files/pos/bug2168.scala
+++ /dev/null
@@ -1,6 +0,0 @@
-object Test extends Application {
- def foo1(x: AnyRef) = x match { case x: Function0[_] => x() }
- def foo2(x: AnyRef) = x match { case x: Function0[Any] => x() }
-}
-
-
diff --git a/test/files/pos/bug2187.scala b/test/files/pos/bug2187.scala
deleted file mode 100644
index 003b8c1436..0000000000
--- a/test/files/pos/bug2187.scala
+++ /dev/null
@@ -1,7 +0,0 @@
-// bug #2187
-object Test extends Application {
- def foo(xs:List[String]) = xs match {
- case Seq(x) => x
- case Seq(x,y) => ""
- }
-}
diff --git a/test/files/pos/bug2261.scala b/test/files/pos/bug2261.scala
deleted file mode 100644
index a499af838a..0000000000
--- a/test/files/pos/bug2261.scala
+++ /dev/null
@@ -1,6 +0,0 @@
-object Test extends Application {
- class Bob[T]
- implicit def foo2bar[T](xs: List[T]): Bob[T] = new Bob[T]
- var x: Bob[Int] = null
- x = List(1,2,3)
-}
diff --git a/test/files/pos/bug247.scala b/test/files/pos/bug247.scala
deleted file mode 100644
index e976404e61..0000000000
--- a/test/files/pos/bug247.scala
+++ /dev/null
@@ -1,26 +0,0 @@
-class Order[t](less:(t,t) => Boolean,equal:(t,t) => Boolean) {}
-
-trait Map[A, B] extends scala.collection.Map[A, B] {
- val factory:MapFactory[A]
-}
-abstract class MapFactory[A] {
- def Empty[B]:Map[A,B];
-}
-
-class TreeMapFactory[KEY](newOrder:Order[KEY]) extends MapFactory[KEY] {
- val order = newOrder;
- def Empty[V] = new TreeMap[KEY,V](new TreeMapFactory[KEY](order));
-}
-
-class Tree[KEY,Entry](order:Order[KEY]) {
- def size =0;
-}
-
-class TreeMap[KEY,VALUE](_factory:TreeMapFactory[KEY]) extends Tree[KEY,Pair[KEY,VALUE]](_factory.order) with scala.collection.DefaultMap[KEY, VALUE] with Map[KEY, VALUE] {
- val factory = _factory
- val order = _factory.order;
- def this(newOrder:Order[KEY]) = this(new TreeMapFactory[KEY](newOrder));
- def get(key:KEY) = null;
- def iterator:Iterator[Pair[KEY,VALUE]] = null;
- override def size = super[Tree].size
-}
diff --git a/test/files/pos/bug252.scala b/test/files/pos/bug252.scala
deleted file mode 100644
index b10811fb1f..0000000000
--- a/test/files/pos/bug252.scala
+++ /dev/null
@@ -1,17 +0,0 @@
-abstract class Module {}
-
-abstract class T {
- type moduleType <: Module
- val module: moduleType
-}
-
-abstract class Base {
- type mType = Module
- type tType = T { type moduleType <: mType }
-}
-
-abstract class Derived extends Base {
- def f(inputs: List[tType]): Unit = {
- for (t <- inputs; val m = t.module) { }
- }
-}
diff --git a/test/files/pos/bug262.scala b/test/files/pos/bug262.scala
deleted file mode 100644
index ec6187b36b..0000000000
--- a/test/files/pos/bug262.scala
+++ /dev/null
@@ -1,14 +0,0 @@
-object O {
- abstract class A {
- def f:A;
- }
- class B extends A {
- def f = if(1 == 2) new C else new D;
- }
- class C extends A {
- def f = this;
- }
- class D extends A {
- def f = this;
- }
-}
diff --git a/test/files/pos/bug267.scala b/test/files/pos/bug267.scala
deleted file mode 100644
index d7eae9b8d6..0000000000
--- a/test/files/pos/bug267.scala
+++ /dev/null
@@ -1,55 +0,0 @@
-package expAbstractData
-
-/** A base class consisting of
- * - a root trait (i.e. abstract class) `Exp' with an `eval' function
- * - an abstract type `exp' bounded by `Exp'
- * - a concrete instance class `Num' of `Exp' for numeric literals
- */
-trait Base {
- type exp <: Exp
-
- trait Exp {
- def eval: Int
- }
- class Num(v: Int) extends Exp { self: exp =>
- val value = v
- def eval = value
- }
-}
-
-object testBase extends Application with Base {
- type exp = Exp
- val term = new Num(2);
- Console.println(term.eval)
-}
-
-/** Data extension: An extension of `Base' with `Plus' expressions
- */
-trait BasePlus extends Base {
- class Plus(l: exp, r: exp) extends Exp { self: exp =>
- val left = l
- val right = r
- def eval = left.eval + right.eval
- }
-}
-
-/** Operation extension: An extension of `Base' with 'show' methods.
- */
-trait Show extends Base {
- type exp <: Exp1
-
- trait Exp1 extends Exp {
- def show: String
- }
- class Num1(v: Int) extends Num(v) with Exp1 { self: exp with Num1 =>
- def show = value.toString()
- }
-}
-
-/** Operation extension: An extension of `BasePlus' with 'show' methods.
- */
-trait ShowPlus extends BasePlus with Show {
- class Plus1(l: exp, r: exp) extends Plus(l, r) with Exp1 { self: exp with Plus1 =>
- def show = left.show + " + " + right.show
- }
-}
diff --git a/test/files/pos/bug287.scala b/test/files/pos/bug287.scala
deleted file mode 100644
index 81a01951b2..0000000000
--- a/test/files/pos/bug287.scala
+++ /dev/null
@@ -1,12 +0,0 @@
-object testBuf {
- class mystream extends java.io.BufferedOutputStream(new java.io.FileOutputStream("/dev/null")) {
- def w( x:String ):Unit = {
- val foo = new Array[byte](2);
-
- // write( byte[] ) is defined in FilterOutputStream, the superclass of BufferedOutputStream
- super.write( foo ); // error
-
- super.write( foo, 0, foo.length ); // this works however
- }
- }
-}
diff --git a/test/files/pos/bug342.scala b/test/files/pos/bug342.scala
deleted file mode 100644
index 29e36415f9..0000000000
--- a/test/files/pos/bug342.scala
+++ /dev/null
@@ -1,8 +0,0 @@
-object Main extends Application {
-
- object Foo extends Enumeration(0, "Bar") { // 2
- val Bar = Value
- }
- import Foo._;
- Console.println(Bar)
-}
diff --git a/test/files/pos/bug348plus.scala b/test/files/pos/bug348plus.scala
deleted file mode 100644
index 30fa1576af..0000000000
--- a/test/files/pos/bug348plus.scala
+++ /dev/null
@@ -1,24 +0,0 @@
-// bug #348
-
-trait Foo {
- type bar <: Bar;
- abstract class Bar;
- case class Baz(r:bar) extends Bar;
- case object NoBar extends Bar;
-}
-object Test extends Application {
- object ConcreteFooBar extends Foo { // if moved to toplevel, it works
- type bar = Bar;
- }
- def foo = {
- import ConcreteFooBar._ ;
- Baz( NoBar )
- }
-}
-
-// bug #367
-
-object Bla {
- def foo(): Unit = (return null).equals(null);
-}
-
diff --git a/test/files/pos/bug374.scala b/test/files/pos/bug374.scala
deleted file mode 100644
index 31a98871a8..0000000000
--- a/test/files/pos/bug374.scala
+++ /dev/null
@@ -1,21 +0,0 @@
-object tokens extends Enumeration {
- type Token = Value;
- val BAD = Value("<bad>");
- val IDENT = Value("ident");
- val NAME = Value("name");
-}
-
-object test extends AnyRef with Application {
- import tokens._;
-
- val reserved = new scala.collection.mutable.HashMap[String, Token]();
-
- if (true) {
- reserved.get("a") match {
- case None => IDENT
- case Some(tk) => tk
- }
- }
- else
- BAD
-}
diff --git a/test/files/pos/bug430-feb09.scala b/test/files/pos/bug430-feb09.scala
deleted file mode 100644
index 1499f32b7a..0000000000
--- a/test/files/pos/bug430-feb09.scala
+++ /dev/null
@@ -1,34 +0,0 @@
-// Compiles
-package a {
- case class A[T]()
-}
-
-// Compiles
-package b.scala {
- class B[T]
-}
-
-// Doesn't compile: type Nothing is not a member of c.scala
-package c.scala {
- case class C[T]()
-}
-
-// Doesn't compile: type Nothing is not a member of d.scala
-package d.scala.d {
- case class D[T]()
-}
-
-// Doesn't compile: type Any is not a member of e.scala
-package e.scala {
- case class E[T >: Nothing]()
-}
-
-// Compiles
-package f.scala {
- case class F[T >: Nothing <: Any]()
-}
-
-// Doesn't compile: type <byname> is not a member of package h.scala
-package h.scala {
- case class H(s: String)(t: =>String)
-}
diff --git a/test/files/pos/bug430.scala b/test/files/pos/bug430.scala
deleted file mode 100644
index 1f7d86b1c8..0000000000
--- a/test/files/pos/bug430.scala
+++ /dev/null
@@ -1,20 +0,0 @@
-object Test extends Application {
- def foo[T <% Ordered[T]](x: T){ Console.println(""+(x < x)+" "+(x <= x)) }
- def bar(x: Unit ): Unit = foo(x);
- def bar(x: Boolean): Unit = foo(x);
- def bar(x: Byte ): Unit = foo(x);
- def bar(x: Short ): Unit = foo(x);
- def bar(x: Int ): Unit = foo(x);
- def bar(x: Long ): Unit = foo(x);
- def bar(x: Float ): Unit = foo(x);
- def bar(x: Double ): Unit = foo(x);
- bar(())
- bar(true)
- bar(1: Byte)
- bar(1: Short)
- bar('a')
- bar(1)
- bar(1l)
- bar(1.0f)
- bar(1.0)
-}
diff --git a/test/files/pos/bug432.scala b/test/files/pos/bug432.scala
deleted file mode 100644
index 8e3097ac9d..0000000000
--- a/test/files/pos/bug432.scala
+++ /dev/null
@@ -1,2 +0,0 @@
-case class Tata
-object Tata
diff --git a/test/files/pos/bug460.scala b/test/files/pos/bug460.scala
deleted file mode 100644
index 3fc13e4dd0..0000000000
--- a/test/files/pos/bug460.scala
+++ /dev/null
@@ -1,9 +0,0 @@
-object Bug460 {
- def testFun(x : Int, y : Int) = x + y
- val fn = testFun _
-
- fn(1, 2) // Ok
- (testFun(_, _))(1, 2) // Ok
- (testFun _).apply(1, 2)
- (testFun _)(1, 2) // Error! (but no longer)
-}
diff --git a/test/files/pos/bug514.scala b/test/files/pos/bug514.scala
deleted file mode 100644
index 0b7b9ac009..0000000000
--- a/test/files/pos/bug514.scala
+++ /dev/null
@@ -1,7 +0,0 @@
-object Test extends Application {
- object Truc {
- override def toString() = "oui"
- def toString(bool: Boolean) = "chaispas"
- }
- val tata: String = Truc.toString
-}
diff --git a/test/files/pos/bug516.scala b/test/files/pos/bug516.scala
deleted file mode 100644
index ce4e0e3dd6..0000000000
--- a/test/files/pos/bug516.scala
+++ /dev/null
@@ -1,15 +0,0 @@
-import scala.collection.mutable._;
-import scala.collection.script._;
-
-class Members;
-
-object subscriber extends Subscriber[Message[String] with Undoable, Members] {
- def notify(pub: Members, event: Message[String] with Undoable): Unit =
- (event: Message[String]) match {
- case Include(l, elem) => Console.println("ADD: " + elem);
- case Remove(l, elem) => Console.println("REM: " + elem);
- //case i : Include[HasTree] with Undoable =>
- //case r : Remove [HasTree] with Undoable =>
- }
- }
-
diff --git a/test/files/pos/bug531.scala b/test/files/pos/bug531.scala
deleted file mode 100644
index 26e4df988c..0000000000
--- a/test/files/pos/bug531.scala
+++ /dev/null
@@ -1,10 +0,0 @@
-object Test extends Application {
- import scala.reflect._;
- def titi = {
- var truc = 0
- val tata: Code[()=>Unit] = () => {
- truc = 6
- }
- ()
- }
-}
diff --git a/test/files/pos/bug532.scala b/test/files/pos/bug532.scala
deleted file mode 100644
index 2c1adfd5b4..0000000000
--- a/test/files/pos/bug532.scala
+++ /dev/null
@@ -1,10 +0,0 @@
-object Test extends Application {
- import scala.reflect._;
- def titi: Unit = {
- var truc = 0
- val tata: Code[()=>Unit] = () => {
- truc = truc + 6
- }
- ()
- }
-}
diff --git a/test/files/pos/bug577.scala b/test/files/pos/bug577.scala
deleted file mode 100644
index ede45399a0..0000000000
--- a/test/files/pos/bug577.scala
+++ /dev/null
@@ -1,21 +0,0 @@
-trait PriorityTree {
- type Node <: BasicTreeNode;
-
- val top = initTree;
- top.next = (initTree);
- top.next.prev = (top);
-
- def initTree : Node;
-
-
-
-
- trait BasicTreeNode {
- private[PriorityTree] var next : Node = _;
- private[PriorityTree] var prev : Node = _;
- private[PriorityTree] var chld : Node = _;
- //var next : Node = _;
- //var prev : Node = _;
- //var chld : Node = _;
- }
-}
diff --git a/test/files/pos/bug599.scala b/test/files/pos/bug599.scala
deleted file mode 100644
index 968e2deaee..0000000000
--- a/test/files/pos/bug599.scala
+++ /dev/null
@@ -1,19 +0,0 @@
-abstract class FooA {
- type A <: AxA;
- abstract class AxA;
- abstract class InnerA {
- type B <: A;
- def doB : B;
- }
- }
- trait FooB extends FooA {
- type A <: AxB;
- trait AxB extends AxA { def xxx : Int; }
- abstract class InnerB extends InnerA {
- // type B <: A;
- val a : A = doB;
- a.xxx;
- val aaa: InnerB.this.B = doB
- aaa.xxx;
- }
- }
diff --git a/test/files/pos/bug602.scala b/test/files/pos/bug602.scala
deleted file mode 100644
index 18dd405645..0000000000
--- a/test/files/pos/bug602.scala
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.mosol.sl
-
-case class Span[K <: Ordered[K]](low: Option[K], high: Option[K]) extends Function1[K, Boolean] {
- override def equals(x$1: Any): Boolean = x$1 match {
- case Span((low$0 @ _), (high$0 @ _)) if low$0.equals(low).$amp$amp(high$0.equals(high)) => true
- case _ => false
- }
- def apply(k: K): Boolean = this match {
- case Span(Some(low), Some(high)) => (k >= low && k <= high)
- case Span(Some(low), None) => (k >= low)
- case Span(None, Some(high)) => (k <= high)
- case _ => false
- }
-}
diff --git a/test/files/pos/bug613.scala b/test/files/pos/bug613.scala
deleted file mode 100644
index cf179420f4..0000000000
--- a/test/files/pos/bug613.scala
+++ /dev/null
@@ -1,17 +0,0 @@
-class Outer extends Application {
- val y: Int = 1
- abstract class C {
- val x: Int
- }
- val foo = new C {
- class I {
- val z = y
- }
- val x = (new I).z
- }
-}
-
-object Test extends Application {
- val o = new Outer
- println(o.foo.x)
-}
diff --git a/test/files/pos/bug616.scala b/test/files/pos/bug616.scala
deleted file mode 100644
index bb91c732a6..0000000000
--- a/test/files/pos/bug616.scala
+++ /dev/null
@@ -1,11 +0,0 @@
-object testImplicit {
- implicit def foo2bar(foo: Foo): Bar = foo.bar
- class Foo(val bar: Bar) {
- def testCoercion = {val a = this; a.baz} // here, foo2bar is inferred by the compiler, as expected
- //def testCoercionThisImplicit = baz // --> error: not found: value baz
- def testCoercionThisExplicit: Any = this.baz // --> error: value baz is not a member of Foo
- }
- trait Bar { def baz: Unit }
-}
-// mentioned before: http://thread.gmane.org/gmane.comp.lang.scala/2038,
-// but couldn't find a bug report
diff --git a/test/files/pos/bug651.scala b/test/files/pos/bug651.scala
deleted file mode 100644
index c146446af9..0000000000
--- a/test/files/pos/bug651.scala
+++ /dev/null
@@ -1,15 +0,0 @@
-package test;
-
-trait Test3 {
- trait MatchableImpl {
- trait MatchImpl;
- }
-
- trait BracePairImpl {
- trait BraceImpl extends MatchableImpl {
- private object MyMatch1 extends MatchImpl;
- protected def match0 : MatchImpl = MyMatch1;
-
- }
- }
-}
diff --git a/test/files/pos/bug675.scala b/test/files/pos/bug675.scala
deleted file mode 100644
index 51f56920b5..0000000000
--- a/test/files/pos/bug675.scala
+++ /dev/null
@@ -1,19 +0,0 @@
-package test;
-
-trait T {
- abstract class Foo;
- private object FOO_0 extends Foo {
- Console.println("FOO_0 initialized")
- }
- trait X {
- def foo : Foo = FOO_0;
- }
-}
-
-object Test extends Application {
- val t = new T{}
- val x = new t.X{}
- Console.println(x.foo)
-}
-
-
diff --git a/test/files/pos/bug690.scala b/test/files/pos/bug690.scala
deleted file mode 100644
index a93c54f007..0000000000
--- a/test/files/pos/bug690.scala
+++ /dev/null
@@ -1,14 +0,0 @@
-package test;
-trait test {
- type T;
- trait Manager {
- type T <: test.this.T;
- def foo(t : T) = {};
- }
- object M0 extends Manager {
- override type T = test.this.T;
- override def foo(t : T) = super.foo(t);
- }
- def t : T;
- M0.foo(t);
-}
diff --git a/test/files/pos/bug698.scala b/test/files/pos/bug698.scala
deleted file mode 100644
index a70acae213..0000000000
--- a/test/files/pos/bug698.scala
+++ /dev/null
@@ -1,12 +0,0 @@
-abstract class Foo
-{
- val x : Bar
-}
-
-abstract class Bar
-
-object Test
- extends Foo with Application
-{
- object x extends Bar
-}
diff --git a/test/files/pos/bug711.scala b/test/files/pos/bug711.scala
deleted file mode 100644
index 70fcc7f0d0..0000000000
--- a/test/files/pos/bug711.scala
+++ /dev/null
@@ -1,14 +0,0 @@
-abstract class Component
-
-class Button extends Component {
- def sayHey: Unit = Console.println("Hey, I'm a button") }
-
-abstract class Origin {
- val delegate: Component }
-
-object main extends Origin with Application {
- val delegate: Component {
- def sayHey: Unit
- } = new Button
- delegate.sayHey
-}
diff --git a/test/files/pos/bug720.scala b/test/files/pos/bug720.scala
deleted file mode 100644
index beeae371bd..0000000000
--- a/test/files/pos/bug720.scala
+++ /dev/null
@@ -1,9 +0,0 @@
-trait Conv
-object Conv {
- implicit def one2two (one: One): Two = new Two }
-class One extends Conv
-class Two
-object Test2 extends Application {
- def fun (two: Two) = ()
- fun(new One)
-}
diff --git a/test/files/pos/bug757.scala b/test/files/pos/bug757.scala
deleted file mode 100644
index cc6527f3f2..0000000000
--- a/test/files/pos/bug757.scala
+++ /dev/null
@@ -1,13 +0,0 @@
-package foo {
- object C {
- def foo {
- Console.println("foo")
- }
- }
-}
-
-package bar {
- object Main extends Application {
- foo.C.foo
- }
-}
diff --git a/test/files/pos/bug758.scala b/test/files/pos/bug758.scala
deleted file mode 100644
index 160bf37172..0000000000
--- a/test/files/pos/bug758.scala
+++ /dev/null
@@ -1,7 +0,0 @@
-trait A { type T; type M >: T }
-trait B extends A {
- val x : String;
- val u : A { type T = B.this.T } ;
- type T = x.type;
- type M = u.M
-}
diff --git a/test/files/pos/bug759.scala b/test/files/pos/bug759.scala
deleted file mode 100644
index 2eac89cd60..0000000000
--- a/test/files/pos/bug759.scala
+++ /dev/null
@@ -1,6 +0,0 @@
-object Test extends Application {
-
- def f[A](x : => A) = x
-
- Console.println(f(Array(42))(0))
-}
diff --git a/test/files/pos/bug767.scala b/test/files/pos/bug767.scala
deleted file mode 100644
index 0c4067f022..0000000000
--- a/test/files/pos/bug767.scala
+++ /dev/null
@@ -1,18 +0,0 @@
-abstract class AbsCell {
- type T = Node
- val init: T
- private var value: T = init
- def get: T = value
- def set (x: T) { value = x }
-
- class Node {
- val foo = 1
- }
-}
-
-object inner {
- def main(args: Array[String]) {
- val cell = new AbsCell { val init = new Node() }
- cell.set(new cell.type#T()) // nullpointer exception
- }
-}
diff --git a/test/files/pos/bug788.scala b/test/files/pos/bug788.scala
deleted file mode 100644
index 19638dd170..0000000000
--- a/test/files/pos/bug788.scala
+++ /dev/null
@@ -1,19 +0,0 @@
-package test;
-
-trait Test {
- type Node <: NodeImpl;
- trait NodeImpl;
- type Expression <: Node with ExpressionImpl;
- trait ExpressionImpl extends NodeImpl {
- def self : Expression;
- }
- type Named <: Node with NamedImpl;
- trait NamedImpl extends NodeImpl {
- def self : Named;
- }
- def asExpression(e : ExpressionImpl) : Named = {
- e match {
- case f : NamedImpl => f.self;
- }
- }
-}
diff --git a/test/files/pos/bug796.scala b/test/files/pos/bug796.scala
deleted file mode 100644
index 2e57f60502..0000000000
--- a/test/files/pos/bug796.scala
+++ /dev/null
@@ -1,26 +0,0 @@
-/** I know what I am doing is wrong -- since I am about to look into
- * this bug, I add a test in pending/pos... however, I am afraid that
- * once this bug is fixed, this test case might go into test/pos
- * there it adds to the huge number of tiny little test cases.
- *
- * Ideally, an option in the bugtracking system would automatically
- * handle "pos" bugs.
- */
-object Test extends Application {
-
- object Twice {
- def apply(x: Int) = x * 2
- def unapply(x: Int): Option[Tuple1[Int]] =
- if (x % 2 == 0) Some(Tuple1(x / 2))
- else None
- }
-
- def test(x: Int) = x match {
- case Twice(y) => "x is two times "+y
- case _ => "x is odd"
- }
-
- Console.println(test(3))
- Console.println(test(4))
-
-}
diff --git a/test/files/pos/bug802.scala b/test/files/pos/bug802.scala
deleted file mode 100644
index 2dea7036d6..0000000000
--- a/test/files/pos/bug802.scala
+++ /dev/null
@@ -1,27 +0,0 @@
-package test;
-trait Test {
- abstract class BracesImpl {
- type Singleton;
- type Brace <: Singleton with BraceImpl;
- trait BraceImpl;
- trait ForFile;
- }
- abstract class ParensImpl extends BracesImpl {
- type Brace <: Singleton with BraceImpl;
- trait BraceImpl extends super.BraceImpl;
- }
- val parens : ParensImpl;
- abstract class BracksImpl extends BracesImpl {
- type Brace <: Singleton with BraceImpl;
- trait BraceImpl extends super.BraceImpl;
- }
- val bracks : BracksImpl;
- trait File {
- def parens0 : parens.BraceImpl;
- def bracks0 : bracks.BraceImpl;
- def braces(b : BracesImpl) = b match {
- case b if b == parens => parens0;
- case b if b == bracks => bracks0;
- }
- }
-}
diff --git a/test/files/pos/bug807.scala b/test/files/pos/bug807.scala
deleted file mode 100644
index 0eeb92ea24..0000000000
--- a/test/files/pos/bug807.scala
+++ /dev/null
@@ -1,45 +0,0 @@
-trait Matcher {
- trait Link {
- type Self <: Link;
- type Match <: Link { type Match = Link.this.Self; }
- }
- trait HasLinks {
- def link(b : Boolean) : Link = null;
- }
-
-}
-trait BraceMatcher extends Matcher {
- trait BracePair {
- trait BraceLink extends Link;
- trait OpenLink extends BraceLink {
- type Self = OpenLink;
- type Match = CloseLink;
- }
- trait CloseLink extends BraceLink {
- type Self = CloseLink;
- type Match = OpenLink;
- }
- }
-}
-trait IfElseMatcher extends BraceMatcher {
- trait IfElseLink extends Link;
- trait IfLink extends IfElseLink {
- type Self = IfLink;
- type Match = ElseImpl;
- }
- trait ElseImpl extends IfElseLink with HasLinks {
- type Self = ElseImpl;
- type Match = IfLink;
- override def link(b : Boolean) = this;
- }
- val parenPair : BracePair;
- trait IfWithParenImpl extends HasLinks {
- object ifLink extends IfLink;
- object openParen extends parenPair.OpenLink;
- override def link(b : Boolean): Link = b match {
- case true => ifLink;
- case false => openParen;
- }
- }
-}
-
diff --git a/test/files/pos/bug812.scala b/test/files/pos/bug812.scala
deleted file mode 100644
index 1c9c923b6c..0000000000
--- a/test/files/pos/bug812.scala
+++ /dev/null
@@ -1,7 +0,0 @@
-package test;
-import scala.{Application => Main};
-class Test extends Main {
- import test.{Test => Hello}
- super[Application].main(Array("test"));
- private[Test] def xxx = 10;
-}
diff --git a/test/files/pos/bug839.scala b/test/files/pos/bug839.scala
deleted file mode 100644
index d845ed3aae..0000000000
--- a/test/files/pos/bug839.scala
+++ /dev/null
@@ -1,26 +0,0 @@
-// see pending/pos/bug112606A.scala
-package test;
-trait Test {
- trait Global {
- type Tree;
- def get : Tree;
- }
- trait TreeBuilder {
- val global : Global;
- def set(tree : global.Tree) = {}
- }
- val nsc : Global;
- trait FileImpl {
- object treeBuilder extends TreeBuilder {
- val global : nsc.type = nsc;
- }
- // OK
- treeBuilder.set(nsc.get);
- }
- val file0 : FileImpl;
- // OK
- file0.treeBuilder.set(nsc.get);
- def file : FileImpl;
- // type mismatch
- file.treeBuilder.set(nsc.get);
-}
diff --git a/test/files/pos/bug927.scala b/test/files/pos/bug927.scala
deleted file mode 100644
index 7d4c59d94c..0000000000
--- a/test/files/pos/bug927.scala
+++ /dev/null
@@ -1,11 +0,0 @@
-object Test {
-
- def sum(stream: Stream[Int]): Int =
- stream match {
- case Stream.Empty => 0
- case Stream.cons(hd, tl) => hd + sum(tl)
- }
- val str: Stream[Int] = Stream.fromIterator(List(1,2,3).iterator)
- assert(sum(str) == 6)
-
-}
diff --git a/test/files/pos/bug946.scala b/test/files/pos/bug946.scala
deleted file mode 100644
index c4bd6e9ba4..0000000000
--- a/test/files/pos/bug946.scala
+++ /dev/null
@@ -1,8 +0,0 @@
-object pmbugbounds {
- trait Bar
- class Foo[t <: Bar] {}
-
- (new Foo[Bar]) match {
- case _ : Foo[x] => null
- }
-}
diff --git a/test/files/pos/builders.scala b/test/files/pos/builders.scala
index 0b620769c0..51d8af88f8 100644
--- a/test/files/pos/builders.scala
+++ b/test/files/pos/builders.scala
@@ -18,16 +18,16 @@ object builders {
def += (elem: B) { buf += elem }
def result: List[B] = buf.toList
}
-/*
+/*
def fill[A, Dim1, Dim2, Coll](n1: Int, n2: Int, elem: A)(implicit b1: Builder[Coll, Dim1, A], b2: Builder[Coll, Dim2, Dim1]) = {
for (i <- 0 until n1) {
for (j <- 0 until n2) {
b1 += elem
- }
+ }
b2 += b1.result
}
b2.result
- }
+ }
*/
/*
implicit def arrayBuilder[A, B] = new Builder[Array[A], Array[B], B] {
@@ -35,7 +35,7 @@ object builders {
private val buf = new scala.collection.mutable.ListBuffer[B]
def += (elem: B) { buf += elem }
def result: Array[B] = buf.toArray
- }
+ }
*/
class Iter[A, C](elems: List[A]) {
def ++ [B >: A, D](xs: Iterable[B])(implicit b: Builder[C, D, B]): D = {
@@ -48,7 +48,7 @@ object builders {
b.result
}
}
-
+
def main(args : Array[String]) : Unit = {
val x1 = new Iter[Int, List[Int]](List(1, 2, 3))
// val x2 = new Iter[Int, Array[Int]](List(1, 2, 3))
diff --git a/test/files/pos/caseClassInMethod.scala b/test/files/pos/caseClassInMethod.scala
new file mode 100644
index 0000000000..958e5dd473
--- /dev/null
+++ b/test/files/pos/caseClassInMethod.scala
@@ -0,0 +1,5 @@
+object t {
+ def f = { object C; case class C(); 1 }
+ // pending: def g = { case class D(x: Int); object D; 2 }
+ def h = { case class E(y: Int = 10); 3 }
+}
diff --git a/test/files/pos/channels.scala b/test/files/pos/channels.scala
index 4c7be2cc82..0a2274c47a 100644
--- a/test/files/pos/channels.scala
+++ b/test/files/pos/channels.scala
@@ -6,25 +6,25 @@ case class ![a](chan: Channel[a], data: a)
/*
object Bang {
- def unapply[a](x: ![a]): Option[{Channel[a], a}] =
+ def unapply[a](x: ![a]): Option[{Channel[a], a}] =
Some(x.chan, x.data)
}
*/
-object Test extends Application {
+object Test extends App {
object IC extends Channel[Int]
def f[b](x: ![b]): Int = x match {
- case send: ![c] =>
+ case send: ![c] =>
send.chan match {
case IC => send.data
}
}
}
-object Test2 extends Application {
+object Test2 extends App {
object IC extends Channel[Set[Int]]
def f[b](s: ![b]): Set[Int] = s match {
case IC ! x => x
}
}
-
+
diff --git a/test/files/pos/clsrefine.scala b/test/files/pos/clsrefine.scala
index 0a016dec07..b29c01db8b 100644
--- a/test/files/pos/clsrefine.scala
+++ b/test/files/pos/clsrefine.scala
@@ -25,9 +25,9 @@ object test {
val y1, y2 = 1;
}
val a: A { type X1 = Int; type X2 = Int } = b;
- val a1 = new A {
+ val a1 = new A {
type X1 = Int;
- type X2 = String;
+ type X2 = String;
val x1 = 1;
val x2 = "hello"
}
diff --git a/test/files/pos/code.scala b/test/files/pos/code.scala
deleted file mode 100644
index 110e01c619..0000000000
--- a/test/files/pos/code.scala
+++ /dev/null
@@ -1,3 +0,0 @@
-class Test {
- val fun: reflect.Code[Int => Int] = x => x + 1;
-}
diff --git a/test/files/pos/collectGenericCC.scala b/test/files/pos/collectGenericCC.scala
index 099a53d3f5..8201c6a271 100644
--- a/test/files/pos/collectGenericCC.scala
+++ b/test/files/pos/collectGenericCC.scala
@@ -1,14 +1,14 @@
-import scala.collection.generic._
+import scala.collection.generic.CanBuildFrom
import scala.collection._
object Test {
- def collect[A, Res](r: Traversable[A])(implicit bf: CanBuild[A, Res]) = {
- val b = bf()
- for (a <- r) b += a
+ def collect[A, Res](r: Traversable[A])(implicit bf: generic.CanBuild[A, Res]) = {
+ val b: collection.mutable.Builder[A, Res] = bf()
+ r foreach ((a: A) => b += a)
b.result
}
-
- collect[Int, Vector[Int]](List(1,2,3,4))
+
+ collect[Int, Vector[Int]](List(1,2,3,4))
collect[Char, String](List('1','2','3','4'))
- collect[Char, Array[Char]](List('1','2','3','4'))
+ collect[Char, Array[Char]](List('1','2','3','4'))
} \ No newline at end of file
diff --git a/test/files/pos/collections.scala b/test/files/pos/collections.scala
index 61a25528c7..23b23d016e 100644
--- a/test/files/pos/collections.scala
+++ b/test/files/pos/collections.scala
@@ -2,7 +2,7 @@ package mixins;
import scala.collection.mutable._;
-class Collections extends HashSet[Int] with ObservableSet[Int,Collections] {
+class Collections extends HashSet[Int] with ObservableSet[Int] {
override def +=(elem: Int): this.type = super.+=(elem);
override def -=(elem: Int): this.type = super.-=(elem);
override def clear: Unit = super.clear;
diff --git a/test/files/pos/comp-rec-test.scala b/test/files/pos/comp-rec-test.scala
index eaf12942c7..c3e6f8c196 100644
--- a/test/files/pos/comp-rec-test.scala
+++ b/test/files/pos/comp-rec-test.scala
@@ -1,4 +1,4 @@
-object Comp extends Application {
+object Comp extends App {
trait Family {
type T
diff --git a/test/files/pos/constfold.scala b/test/files/pos/constfold.scala
index d42ada76d3..8d431efbac 100644
--- a/test/files/pos/constfold.scala
+++ b/test/files/pos/constfold.scala
@@ -5,7 +5,7 @@ object A {
val s = "z is " + z;
}
-object Test extends Application {
+object Test extends App {
Console.println(A.x);
Console.println(A.y);
diff --git a/test/files/pos/context.scala b/test/files/pos/context.scala
index 4e11d07eb4..13f6bb43c5 100644
--- a/test/files/pos/context.scala
+++ b/test/files/pos/context.scala
@@ -12,10 +12,10 @@ class Context {
abstract class SymbolWrapper {
val context: Context;
import context._;
-
+
class Symbols {
self: context.symbols.type =>
-
+
abstract class Symbol {
def typ: types.Type;
def sym: Symbol = typ.sym;
@@ -29,7 +29,7 @@ abstract class TypeWrapper {
class Types {
self: context.types.type =>
-
+
abstract class Type {
def sym: symbols.Symbol;
def typ: Type = sym.typ;
diff --git a/test/files/pos/contextbounds-implicits.scala b/test/files/pos/contextbounds-implicits.scala
new file mode 100644
index 0000000000..f9113ee320
--- /dev/null
+++ b/test/files/pos/contextbounds-implicits.scala
@@ -0,0 +1,8 @@
+/* Tests implicit parameters in the presence of context bounds.
+ * See Section 7.4 of the Scala Language Specification.
+ */
+class C {
+
+ def f[T: Manifest, S: Manifest](x: T, y: S)(implicit p: C) { }
+
+}
diff --git a/test/files/pos/cyclics-pos.scala b/test/files/pos/cyclics-pos.scala
new file mode 100644
index 0000000000..051bdd6ed8
--- /dev/null
+++ b/test/files/pos/cyclics-pos.scala
@@ -0,0 +1,26 @@
+trait Param[T]
+trait Abs { type T }
+trait Cyclic1[A <: Param[A]] // works
+trait Cyclic2[A <: Abs { type T <: A }]
+trait Cyclic3 { type A <: Abs { type T = A } }
+trait Cyclic4 { type A <: Param[A] } // works
+trait Cyclic5 { type AA <: Abs; type A <: AA { type T = A } }
+
+
+trait IterableTemplate {
+ type Elem
+ type Constr <: IterableTemplate
+ type ConstrOf[A] = Constr { type Elem = A }
+
+ def iterator: Iterator[Elem]
+
+ def map [B] (f: Elem => B): ConstrOf[B]
+
+ def foreach(f: Elem => Unit) = iterator.foreach(f)
+}
+
+
+trait Iterable[A] extends IterableTemplate { self =>
+ type Elem
+ type Constr <: Iterable[A] { type Constr <: Iterable.this.Constr }
+}
diff --git a/test/files/pos/cyclics.scala b/test/files/pos/cyclics.scala
deleted file mode 100644
index 395e88815a..0000000000
--- a/test/files/pos/cyclics.scala
+++ /dev/null
@@ -1,26 +0,0 @@
-trait Param[T]
-trait Abs { type T }
-trait Cyclic1[A <: Param[A]] // works
-trait Cyclic2[A <: Abs { type T <: A }]
-trait Cyclic3 { type A <: Abs { type T = A } }
-trait Cyclic4 { type A <: Param[A] } // works
-trait Cyclic5 { type AA <: Abs; type A <: AA { type T = A } }
-
-
-trait IterableTemplate {
- type Elem
- type Constr <: IterableTemplate
- type ConstrOf[A] = Constr { type Elem = A }
-
- def iterator: Iterator[Elem]
-
- def map [B] (f: Elem => B): ConstrOf[B]
-
- def foreach(f: Elem => Unit) = iterator.foreach(f)
-}
-
-
-trait Iterable[A] extends IterableTemplate { self =>
- type Elem
- type Constr <: Iterable[A] { type Constr <: Iterable.this.Constr }
-}
diff --git a/test/files/pos/depexists.scala b/test/files/pos/depexists.scala
new file mode 100644
index 0000000000..dff1917a47
--- /dev/null
+++ b/test/files/pos/depexists.scala
@@ -0,0 +1,5 @@
+object depexists {
+
+ val c: Option[(a, b)] forSome { type a <: Number; type b <: (a, a) } = null
+ val d = c
+}
diff --git a/test/files/pos/depmet_1_pos.scala b/test/files/pos/depmet_1_pos.scala
new file mode 100644
index 0000000000..166e991817
--- /dev/null
+++ b/test/files/pos/depmet_1_pos.scala
@@ -0,0 +1,6 @@
+object Test {
+ def precise(x: String)(y: x.type): x.type = y
+ val foo = "foo"
+ val fun : foo.type => foo.type = precise(foo)
+ val bar : foo.type = precise(foo)(foo)
+} \ No newline at end of file
diff --git a/test/files/pos/depmet_implicit_chaining_zw.scala b/test/files/pos/depmet_implicit_chaining_zw.scala
new file mode 100644
index 0000000000..93da3b0f8e
--- /dev/null
+++ b/test/files/pos/depmet_implicit_chaining_zw.scala
@@ -0,0 +1,28 @@
+trait Zero
+trait Succ[N]
+
+trait ZipWith[N, S] {
+ type T
+ val x: T = error("")
+}
+
+object ZipWith {
+ implicit def ZeroZipWith[S] = new ZipWith[Zero, S] {
+ type T = Stream[S]
+ }
+
+ implicit def SuccZipWith[N, S, R](implicit zWith : ZipWith[N, R]) = new ZipWith[Succ[N], S => R] {
+ type T = Stream[S] => zWith.T // dependent types replace the associated types functionality
+ }
+
+ // can't use implicitly[ZipWith[Succ[Succ[Zero]], Int => String => Boolean]],
+ // since that will chop of the {type T = ... } refinement in adapt (pt = ZipWith[Succ[Succ[Zero]], Int => String => Boolean])
+ // this works
+ // def zipWith(implicit zw: ZipWith[Succ[Succ[Zero]], Int => String => Boolean]): zw.T = zw.x
+ // thus, I present ?: implicitly on steroids!
+ def ?[T <: AnyRef](implicit w: T): w.type = w
+
+ type _2 = Succ[Succ[Zero]]
+ val zw = ?[ZipWith[_2, Int => String => Boolean]].x // : Stream[Int] => Stream[String] => Stream[Boolean]
+ // val zw = implicitly[ZipWith[Succ[Succ[Zero]], Int => String => Boolean]{type T = Stream[Int] => Stream[String] => Stream[Boolean]}].x
+} \ No newline at end of file
diff --git a/test/files/pos/depmet_implicit_norm_ret.scala b/test/files/pos/depmet_implicit_norm_ret.scala
new file mode 100644
index 0000000000..bafd2f7c51
--- /dev/null
+++ b/test/files/pos/depmet_implicit_norm_ret.scala
@@ -0,0 +1,29 @@
+object Test{
+ def ?[S <: AnyRef](implicit w : S) : w.type = w
+
+ // fallback, lower priority (overloading rules apply: pick alternative in subclass lowest in subtyping lattice)
+ class ZipWithDefault {
+ implicit def ZeroZipWith[S] = new ZipWith[S] {
+ type T = Stream[S]
+ }
+ }
+
+ object ZipWith extends ZipWithDefault {
+ // def apply[S: ZipWith](s : S) = ?[ZipWith[S]].zipWith(s) // TODO: bug return type should be inferred
+ def apply[S](s : S)(implicit zw: ZipWith[S]): zw.T = zw.zipWith(s)
+
+ implicit def SuccZipWith[S,R](implicit zWith : ZipWith[R]) = new ZipWith[S => R] {
+ type T = Stream[S] => zWith.T // dependent types replace the associated types functionality
+ }
+ }
+
+ trait ZipWith[S] {
+ type T
+ def zipWith : S => T = error("")
+ }
+
+ // bug: inferred return type = (Stream[A]) => java.lang.Object with Test.ZipWith[B]{type T = Stream[B]}#T
+ // this seems incompatible with vvvvvvvvvvvvvvvvvvvvvv -- #3731
+ def map[A,B](f : A => B) /* : Stream[A] => Stream[B]*/ = ZipWith(f)
+ val tst: Stream[Int] = map{x: String => x.length}(Stream("a"))
+} \ No newline at end of file
diff --git a/test/files/pos/depmet_implicit_oopsla_session.scala b/test/files/pos/depmet_implicit_oopsla_session.scala
new file mode 100644
index 0000000000..e2c67d7c32
--- /dev/null
+++ b/test/files/pos/depmet_implicit_oopsla_session.scala
@@ -0,0 +1,63 @@
+object Sessions {
+ trait Session[This] {
+ type Dual
+ type HasDual[D] = Session[This]{type Dual=D}
+ def run(p: This, dp: Dual): Unit
+ }
+
+ implicit object StopSession extends Session[Stop] {
+ type Dual = Stop
+
+ def run(p: Stop, dp: Stop): Unit = {}
+ }
+
+ implicit def InDual[A, B](implicit sessionDIn: Session[B]) =
+ new Session[In[A, B]] {
+ type Dual = Out[A, sessionDIn.Dual]
+
+ def run(p: In[A, B], dp: Dual): Unit =
+ sessionDIn.run(p.func(dp.x), dp.y)
+ }
+
+ implicit def OutDual[A, B](implicit sessionDOut: Session[B]) =
+ new Session[Out[A, B]] {
+ type Dual = In[A, sessionDOut.Dual]
+
+ def run(p: Out[A, B], dp: Dual): Unit =
+ sessionDOut.run(p.y, dp.func(p.x))
+ }
+
+ sealed case class Stop()
+ sealed case class In[-A, +B](func: A => B)
+ sealed case class Out[+A, +B](x: A, y: B)
+
+ def addServer =
+ In{x: Int =>
+ In{y: Int => System.out.println("Thinking")
+ Out(x+y,
+ Stop())}}
+
+ def addClient =
+ Out(3,
+ Out(4, { System.out.println("Waiting")
+ In{z: Int => System.out.println(z)
+ Stop()}}))
+
+ def runSession[S, D: Session[S]#HasDual](p: S, dp: D) =
+ implicitly[Session[S]#HasDual[D]].run(p, dp)
+
+ // def runSession[S, D](p: S, dp: D)(implicit s: Session[S]#HasDual[D]) =
+ // s.run(p, dp)
+ //
+ // def runSession[S, D](p: S, dp: D)(implicit s: Session[S]{type Dual=D}) =
+ // s.run(p, dp)
+
+ // TODO: can we relax the ordering restrictions on dependencies so that we can use
+ // def runSession[S](p: S, dp: s.Dual)(implicit s: Session[S]) =
+ // s.run(p, dp)
+ // to emphasise similarity of type parameters and implicit arguments:
+ // def runSession[S][val s: Session[S]](p: S, dp: s.Dual) =
+ // s.run(p, dp)
+
+ def myRun = runSession(addServer, addClient)
+} \ No newline at end of file
diff --git a/test/files/pos/depmet_implicit_oopsla_session_2.scala b/test/files/pos/depmet_implicit_oopsla_session_2.scala
new file mode 100644
index 0000000000..8d7daa6dc6
--- /dev/null
+++ b/test/files/pos/depmet_implicit_oopsla_session_2.scala
@@ -0,0 +1,87 @@
+object Sessions {
+ def ?[T <: AnyRef](implicit w: T): w.type = w
+
+ // session states
+ sealed case class Stop()
+ sealed case class In[-Data, +Cont](recv: Data => Cont)
+ sealed case class Out[+Data, +Cont](data: Data, cont: Cont)
+
+ // the type theory of communicating sessions:
+
+ // an instance of type Session[S]{type Dual=D} is evidence that S and D are duals
+ // such a value witnesses this fact by describing how to compose an instance of S with an instance of D (through the run method)
+ trait Session[S] { type Self = S
+ type Dual
+ type HasDual[D] = Session[Self]{type Dual=D}
+ def run(self: Self, dual: Dual): Unit
+ }
+
+ // friendly interface to the theory
+ def runSession[S, D: Session[S]#HasDual](session: S, dual: D) =
+ ?[Session[S]#HasDual[D]].run(session, dual)
+
+ // facts in the theory:
+
+ // ------------------------[StopDual]
+ // Stop is the dual of Stop
+ implicit object StopDual extends Session[Stop] {
+ type Dual = Stop
+
+ def run(self: Self, dual: Dual): Unit = {}
+ }
+
+ // CD is the dual of Cont
+ // -------------------------------------------[InDual]
+ // Out[Data, CD] is the dual of In[Data, Cont]
+ implicit def InDual[Data, Cont](implicit cont: Session[Cont]) = new Session[In[Data, Cont]] {
+ type Dual = Out[Data, cont.Dual]
+
+ def run(self: Self, dual: Dual): Unit =
+ cont.run(self.recv(dual.data), dual.cont)
+ }
+
+ // CD is the dual of Cont
+ // -------------------------------------------[OutDual]
+ // In[Data, CD] is the dual of Out[Data, Cont]
+ implicit def OutDual[Data, Cont](implicit cont: Session[Cont]) = new Session[Out[Data, Cont]] {
+ type Dual = In[Data, cont.Dual]
+
+ def run(self: Self, dual: Dual): Unit =
+ cont.run(self.cont, dual.recv(self.data))
+ }
+
+ // a concrete session
+ def addServer =
+ In{x: Int =>
+ In{y: Int => System.out.println("Thinking")
+ Out(x+y,
+ Stop())}}
+
+ def addClient =
+ Out(3,
+ Out(4, { System.out.println("Waiting")
+ In{z: Int => System.out.println(z)
+ Stop()}}))
+
+ def myRun = runSession(addServer, addClient)
+}
+
+/* future improvements:
+
+
+ // def runSession[S, D](p: S, dp: D)(implicit s: Session[S]#HasDual[D]) =
+ // s.run(p, dp)
+ //
+ // def runSession[S, D](p: S, dp: D)(implicit s: Session[S]{type Dual=D}) =
+ // s.run(p, dp)
+
+ // TODO: can we relax the ordering restrictions on dependencies so that we can write
+ // one possibility: graph of dependencies between arguments must be acyclic
+ // def runSession[S](p: S, dp: s.Dual)(implicit s: Session[S]) =
+ // s.run(p, dp)
+ // to emphasise similarity of type parameters and implicit arguments:
+ // def runSession[S][val s: Session[S]](p: S, dp: s.Dual) =
+ // s.run(p, dp)
+
+
+*/ \ No newline at end of file
diff --git a/test/files/pos/depmet_implicit_oopsla_session_simpler.scala b/test/files/pos/depmet_implicit_oopsla_session_simpler.scala
new file mode 100644
index 0000000000..d2986ef56f
--- /dev/null
+++ b/test/files/pos/depmet_implicit_oopsla_session_simpler.scala
@@ -0,0 +1,44 @@
+object Sessions {
+ trait Session {
+ type Dual <: Session
+
+ def run(dp: Dual): Unit
+ }
+
+ sealed case class Stop extends Session {
+ type Dual = Stop
+
+ def run(dp: Dual): Unit = {}
+ }
+
+ // can't write B <: Session{type Dual = BDual} due to limitations in type inference algorithm
+ // (type variables cannot occur on both sides of <:)
+ // using B#Dual instead of BDual is too imprecise, since it is disconnected from the actual argument that is passed for B
+ // would be nice if we could introduce a universal quantification over BDual that is not part of the
+ // type parameter list
+ sealed case class In[A, B <: Session, BDual <: Session](recv: A => B)(implicit dual: B <:< Session{type Dual=BDual}) extends Session {
+ type Dual = Out[A, BDual]
+
+ def run(dp: Dual): Unit = recv(dp.data) run dp.cont
+ }
+
+ sealed case class Out[A, B <: Session](data: A, cont: B) extends Session {
+ type Dual = In[A, cont.Dual, cont.Dual#Dual]
+
+ def run(dp: Dual): Unit = cont run dp.recv(data)
+ }
+
+ def addServer =
+ In{x: Int =>
+ In{y: Int => System.out.println("Thinking")
+ Out(x+y,
+ Stop())}}
+
+ def addClient =
+ Out(3,
+ Out(4, { System.out.println("Waiting")
+ In{z: Int => System.out.println(z)
+ Stop()}}))
+
+ def myRun = addServer run addClient
+}
diff --git a/test/files/pos/depmet_implicit_oopsla_zipwith.scala b/test/files/pos/depmet_implicit_oopsla_zipwith.scala
new file mode 100644
index 0000000000..fe69802d26
--- /dev/null
+++ b/test/files/pos/depmet_implicit_oopsla_zipwith.scala
@@ -0,0 +1,44 @@
+case class Zero()
+case class Succ[N](x: N)
+import Stream.{cons, continually}
+
+trait ZipWith[N, S] {
+ type T
+
+ def manyApp: N => Stream[S] => T
+ def zipWith: N => S => T = n => f => manyApp(n)(continually(f))
+}
+object ZipWith {
+ implicit def ZeroZipWith[S] = new ZipWith[Zero, S] {
+ type T = Stream[S]
+
+ def manyApp = n => xs => xs
+ }
+
+ implicit def SuccZipWith[N, S, R](implicit zw: ZipWith[N, R]) =
+ new ZipWith[Succ[N],S => R] {
+ type T = Stream[S] => zw.T
+
+ def zapp[A, B](xs: Stream[A => B], ys: Stream[A]): Stream[B] = (xs, ys) match {
+ case (cons(f, fs), cons(s, ss)) => cons(f(s),zapp(fs, ss))
+ case (_, _) => Stream.empty
+ }
+
+ def manyApp = n => xs => ss => n match {
+ case Succ(i) => zw.manyApp(i)(zapp(xs, ss))
+ }
+ }
+}
+
+object Test {
+ def zWith[N, S](n: N, s: S)(implicit zw: ZipWith[N, S]): zw.T = zw.zipWith(n)(s)
+
+ def zipWith0: Stream[Int] = zWith(Zero(),0)
+
+// (Stream[A]) => java.lang.Object with ZipWith[Zero,B]{type T = Stream[B]}#T
+// should normalise to: Stream[A] => Stream[B]
+ def map[A, B](f: A => B) = zWith(Succ(Zero()),f)
+
+ def zipWith3[A, B, C, D](f: A => B => C => D) = //: Stream[A] => Stream[B] => Stream[C] => Stream[D] = // BUG why do we need a return type?
+ zWith(Succ(Succ(Succ(Zero()))),f)
+} \ No newline at end of file
diff --git a/test/files/pos/depmet_implicit_tpbetareduce.scala b/test/files/pos/depmet_implicit_tpbetareduce.scala
new file mode 100644
index 0000000000..c0b9b4e8e4
--- /dev/null
+++ b/test/files/pos/depmet_implicit_tpbetareduce.scala
@@ -0,0 +1,12 @@
+trait HOSeq {
+ trait Accumulator[+coll[x], elT]
+ trait Iterable[+t] {
+ type m[+x]
+ def accumulator[t]: Accumulator[m, t]
+ }
+ implicit def listAccumulator[elT]: Accumulator[List, elT] = new Accumulator[List, elT] {}
+ trait List[+t] extends Iterable[t] {
+ type m[+x] = List[x]
+ def accumulator[t]: Accumulator[List, t] = listAccumulator[t]
+ }
+} \ No newline at end of file
diff --git a/test/files/pos/elidable-tparams.scala b/test/files/pos/elidable-tparams.scala
new file mode 100644
index 0000000000..e47951f61d
--- /dev/null
+++ b/test/files/pos/elidable-tparams.scala
@@ -0,0 +1,10 @@
+import annotation._
+import elidable._
+
+class ElidableCrashTest {
+ trait My
+
+ @elidable(MINIMUM) def foo[a >: My <: My]: scala.Unit = ()
+
+ foo[My] // crash
+} \ No newline at end of file
diff --git a/test/files/pos/exceptions.scala b/test/files/pos/exceptions.scala
deleted file mode 100644
index 52c33fb43a..0000000000
--- a/test/files/pos/exceptions.scala
+++ /dev/null
@@ -1,20 +0,0 @@
-import java.io.IOException;
-
-object Test {
-
- //def error[a](x: String):a = new java.lang.RuntimeException(x) throw;
-
- def main(args: Array[String]): Unit = {
- try {
- try {
- Console.println("hi!");
- error("xx");
- } finally {
- Console.println("ho!")
- }
- } catch {
- case ex: IOException => Console.println("io exception!");
- case ex => Console.println(ex);
- }
- }
-}
diff --git a/test/files/pos/five-dot-f.flags b/test/files/pos/five-dot-f.flags
new file mode 100644
index 0000000000..112fc720a0
--- /dev/null
+++ b/test/files/pos/five-dot-f.flags
@@ -0,0 +1 @@
+-Xfuture \ No newline at end of file
diff --git a/test/files/pos/five-dot-f.scala b/test/files/pos/five-dot-f.scala
new file mode 100644
index 0000000000..8a7f86e214
--- /dev/null
+++ b/test/files/pos/five-dot-f.scala
@@ -0,0 +1,5 @@
+class C {
+ implicit def ffer(x: Int) = new { def f : Long = 123L }
+
+ val x1: Long = 5.f
+}
diff --git a/test/files/pos/gadt-gilles.scala b/test/files/pos/gadt-gilles.scala
index 662be9017d..309168c1e0 100644
--- a/test/files/pos/gadt-gilles.scala
+++ b/test/files/pos/gadt-gilles.scala
@@ -6,7 +6,7 @@ object Test {
val x: A[C with D] = new B[C, D] {}
val y: A[C with D] = x match { case b: B[u, v] => (new B[u, v] {}): A[u with v] } // OK
-
+
def f[T, U](p: A[T with U]): A[T with U] = p match { case b: B[u, v] => new A[u with v] {} } // Not OK
}
diff --git a/test/files/pos/gadts2.scala b/test/files/pos/gadts2.scala
index fc2a7e4333..2263cf13a6 100644
--- a/test/files/pos/gadts2.scala
+++ b/test/files/pos/gadts2.scala
@@ -9,8 +9,8 @@ object Test {
final case class NumTerm(val n: Number) extends Term[Number]
def f[a](t: Term[a], c: Cell[a]) {
- t match {
- case NumTerm(n) => c.x = MyDouble(1.0)
+ t match {
+ case NumTerm(n) => c.x = MyDouble(1.0)
}
}
diff --git a/test/files/pos/generic-sigs.flags b/test/files/pos/generic-sigs.flags
new file mode 100644
index 0000000000..e8fb65d50c
--- /dev/null
+++ b/test/files/pos/generic-sigs.flags
@@ -0,0 +1 @@
+-Xfatal-warnings \ No newline at end of file
diff --git a/test/files/pos/generic-sigs.scala b/test/files/pos/generic-sigs.scala
new file mode 100644
index 0000000000..40ec044656
--- /dev/null
+++ b/test/files/pos/generic-sigs.scala
@@ -0,0 +1,18 @@
+object A {
+ def f1 = List(classOf[Int], classOf[String])
+ def f2 = List(classOf[String], classOf[Int])
+ def f3(x: Class[_ <: Int]) = x
+ def f4(x: Class[_ <: String with Int]) = x
+ def f5(x: Class[_ <: Int with String]) = x
+
+ class Bippy[T]
+ def f6(x: Int) = new Bippy[t forSome { type t <: Int }]
+ def f7(x: T forSome { type T <: Float }) = x
+ def f8(x: T forSome { type T <: Unit }) = x
+ def f9(x: T forSome { type T <: runtime.BoxedUnit }) = x
+ def f10(x: Int) = new Bippy[t forSome { type t <: Unit }]
+ def f11(x: Int) = new Bippy[t forSome { type t >: Null }]
+
+ class Boppy[+T1,-T2]
+ def g1 = new Boppy[t forSome { type t <: Int }, u forSome { type u <: String }]
+} \ No newline at end of file
diff --git a/test/files/pos/getClassType.scala b/test/files/pos/getClassType.scala
new file mode 100644
index 0000000000..7482788a41
--- /dev/null
+++ b/test/files/pos/getClassType.scala
@@ -0,0 +1,16 @@
+trait IdlBase
+
+class IdlConcrete extends IdlBase
+
+class A {
+ // In general, this method should not need an instance to reflect on it, so
+ // take a Class[]
+ def reflect(clazz : Class[_ <: IdlBase]) = {
+ // Get a list of all its methods and build a hash keyed by method name
+ // for statistics recording.
+ }
+
+ // But I also really have an IdlConcrete generated by Spring here...
+ val idl = new IdlConcrete
+ reflect(idl.getClass)
+}
diff --git a/test/files/pos/gosh.scala b/test/files/pos/gosh.scala
index 183ce9df1d..427df4d33c 100644
--- a/test/files/pos/gosh.scala
+++ b/test/files/pos/gosh.scala
@@ -1,4 +1,4 @@
-object ShapeTest extends Application {
+object ShapeTest extends App {
class Point(x: Int, y: Int) {
override def toString() = "[" + x + "," + y + "]"
@@ -7,35 +7,35 @@ object ShapeTest extends Application {
abstract class Shape {
def draw(): Unit
}
-
+
class Line(s: Point, e: Point) extends Shape {
def draw() { Console.println("draw line " + s + "," + e) }
}
-
+
abstract class Foo {
type T <: Object
-
+
def show(o: T): Unit
def print() { Console.println("in Foo") }
}
-
+
abstract class ShapeFoo extends Foo {
type T <: Shape
def show(o: T) { o.draw() }
override def print() { Console.println("in ShapeFoo") }
}
-
+
class LineFoo extends ShapeFoo {
type T = Line
override def print() { Console.println("in LineFoo") }
}
-
+
val p1 = new Point(1,4)
val p2 = new Point(12, 28)
-
+
val l1 = new Line(p1, p2)
-
+
val l = new ShapeFoo { // ** //
type T = Line // ** //
override def print() { Console.println("in LineFoo") } // ** //
diff --git a/test/files/pos/gui.scala b/test/files/pos/gui.scala
index 9d87d1b869..322e0a6e22 100644
--- a/test/files/pos/gui.scala
+++ b/test/files/pos/gui.scala
@@ -2,7 +2,7 @@ object Geom {
trait Shape
case class Point(x: Int, y: Int) extends Shape
case class Rectangle(ll: Point, ur: Point) extends Shape {
- def inset(delta: Int) =
+ def inset(delta: Int) =
Rectangle(Point(ll.x - delta, ll.y - delta), Point(ur.x + delta, ur.y + delta));
}
}
@@ -20,7 +20,7 @@ trait Screen {
}
object DummyScreen extends Screen {
- def drawRect(r: Geom.Rectangle, c: Color) {
+ def drawRect(r: Geom.Rectangle, c: Color) {
Console.println("draw " + r + " with " + c)
}
def fillRect(r: Geom.Rectangle, c: Color) {
@@ -55,7 +55,7 @@ object GUI {
def mouseDown(p: Geom.Point): Unit
}
- abstract class Button(scr: Screen, p: Geom.Point, name: String)
+ abstract class Button(scr: Screen, p: Geom.Point, name: String)
extends Glyph with MouseCtl {
var enabled: Boolean = false
val label = new Label(scr, p, name)
@@ -82,18 +82,18 @@ object GUI {
object GUIClient {
- class Application {
+ class App {
def quit() { Console.println("application exited") }
}
- class QuitButton (scr: Screen, p: Geom.Point, name: String, a: Application)
+ class QuitButton (scr: Screen, p: Geom.Point, name: String, a: App)
extends GUI.Button(scr, p, name) {
def doit() { a.quit() }
}
def main(args: Array[String]) {
val b = new QuitButton(
- DummyScreen, Geom.Point(1, 1), "quit", new Application);
+ DummyScreen, Geom.Point(1, 1), "quit", new App);
b.draw();
b.enable(true).mouseDown(Geom.Point(1, 2));
}
diff --git a/test/files/pos/hashhash-overloads.scala b/test/files/pos/hashhash-overloads.scala
new file mode 100644
index 0000000000..40519bae06
--- /dev/null
+++ b/test/files/pos/hashhash-overloads.scala
@@ -0,0 +1,6 @@
+object Test {
+ def f = ().##
+ def g = 5f.##
+ def h = ({ 5 ; println("abc") }).##
+ def f2 = null.##
+}
diff --git a/test/files/pos/hk-infer.scala b/test/files/pos/hk-infer.scala
new file mode 100644
index 0000000000..7834282bf2
--- /dev/null
+++ b/test/files/pos/hk-infer.scala
@@ -0,0 +1,37 @@
+object Basis {
+ final case class X[T](t: T)
+ val x = Seq(X(32))
+ val y = Seq(X(true))
+ val x1 = Seq(X("asdf"))
+ val x2 = Seq(X('d'))
+}
+import Basis._
+
+object DoesWork {
+ // Doesn'tWork
+ // def f1 = x ++ y ++ x1 ++ x2
+
+ def f2 = List(x, y, x1, x2).flatten
+}
+
+// Testing the not giving of explicit Booper[M] arguments.
+object ShouldWorkHK {
+ class Booper[M[_]](xs: Seq[M[_]]) extends collection.generic.SeqForwarder[M[_]] {
+ def underlying = xs
+ def BOOP(ys: Seq[M[_]]) = new Booper(xs ++ ys)
+ }
+ implicit def mkBoop[M[_]](xs: Seq[M[_]]) = new Booper(xs)
+
+ def f1 = x BOOP y BOOP x1 BOOP x2
+}
+
+object DoesWorkHK {
+ class Booper[M[_]](xs: Seq[M[_]]) extends collection.generic.SeqForwarder[M[_]] {
+ def underlying = xs
+ def BOOP(ys: Seq[M[_]]) = new Booper[M](xs ++ ys)
+ }
+ implicit def mkBoop[M[_]](xs: Seq[M[_]]) = new Booper[M](xs)
+
+ def f1 = x BOOP y BOOP x1 BOOP x2
+}
+
diff --git a/test/files/pos/hkarray.flags b/test/files/pos/hkarray.flags
new file mode 100644
index 0000000000..e8fb65d50c
--- /dev/null
+++ b/test/files/pos/hkarray.flags
@@ -0,0 +1 @@
+-Xfatal-warnings \ No newline at end of file
diff --git a/test/files/pos/hkarray.scala b/test/files/pos/hkarray.scala
new file mode 100644
index 0000000000..3faae180f4
--- /dev/null
+++ b/test/files/pos/hkarray.scala
@@ -0,0 +1,5 @@
+trait Foo[CC[_]] { }
+
+class Bip {
+ val x = new Foo[Array] { }
+} \ No newline at end of file
diff --git a/test/files/pos/hklub0.scala b/test/files/pos/hklub0.scala
new file mode 100644
index 0000000000..8f68aab4ea
--- /dev/null
+++ b/test/files/pos/hklub0.scala
@@ -0,0 +1,5 @@
+object Test {
+ val a : scala.collection.generic.GenericCompanion[scala.collection.immutable.Seq] = null
+ val b : scala.collection.generic.GenericCompanion[scala.collection.mutable.Seq] = null
+ List(a, b) // immutable.this.List.apply[scala.collection.generic.GenericCompanion[Seq]](Test.this.a, Test.this.b)
+} \ No newline at end of file
diff --git a/test/files/pos/hkrange.scala b/test/files/pos/hkrange.scala
new file mode 100644
index 0000000000..8d61167ad8
--- /dev/null
+++ b/test/files/pos/hkrange.scala
@@ -0,0 +1,5 @@
+class A {
+ def f[CC[X] <: Traversable[X]](x: CC[Int]) = ()
+
+ f(1 to 5)
+}
diff --git a/test/files/pos/imp2-pos.scala b/test/files/pos/imp2-pos.scala
new file mode 100644
index 0000000000..407b07f3fd
--- /dev/null
+++ b/test/files/pos/imp2-pos.scala
@@ -0,0 +1,5 @@
+object Test {
+ import collection.mutable._
+ import collection.mutable._
+ val x = new HashMap
+}
diff --git a/test/files/pos/imp2.scala b/test/files/pos/imp2.scala
deleted file mode 100644
index 5460c60015..0000000000
--- a/test/files/pos/imp2.scala
+++ /dev/null
@@ -1,5 +0,0 @@
-object Test {
- import collection.mutable._
- import collection.mutable._
- val x = new HashMap
-}
diff --git a/test/files/pos/implicit-infix-ops.scala b/test/files/pos/implicit-infix-ops.scala
new file mode 100644
index 0000000000..d7519e6340
--- /dev/null
+++ b/test/files/pos/implicit-infix-ops.scala
@@ -0,0 +1,23 @@
+object Test {
+ import Ordering.Implicits._
+ import Numeric.Implicits._
+
+ def f1[T: Numeric](x: T, y: T, z: T) = x + y + z
+ def f2[T: Ordering](x: T, y: T, z: T) = if (x < y) (z > y) else (x < z)
+}
+
+object Int {
+ import Ordering.Implicits._
+ import math.Integral.Implicits._
+
+ def f1[T: Integral](x: T, y: T, z: T) = (x + y + z) / z
+ def f2[T: Ordering](x: T, y: T, z: T) = if (x < y) (z > y) else (x < z)
+}
+
+object Frac {
+ import Ordering.Implicits._
+ import math.Fractional.Implicits._
+
+ def f1[T: Fractional](x: T, y: T, z: T) = (x + y + z) / z
+ def f2[T: Ordering](x: T, y: T, z: T) = if (x < y) (z > y) else (x < z)
+} \ No newline at end of file
diff --git a/test/files/pos/implicit-unwrap-tc.scala b/test/files/pos/implicit-unwrap-tc.scala
new file mode 100644
index 0000000000..1afde26613
--- /dev/null
+++ b/test/files/pos/implicit-unwrap-tc.scala
@@ -0,0 +1,10 @@
+trait NewType[X]
+
+object Test {
+ // change return type to Foo and it compiles.
+ implicit def Unwrap[X](n: NewType[X]): X = sys.error("")
+ class Foo(val a: Int)
+ def test(f: NewType[Foo]) = f.a
+}
+
+
diff --git a/test/files/pos/implicits.scala b/test/files/pos/implicits.scala
index aeb6591507..2c01dd0ba8 100644
--- a/test/files/pos/implicits.scala
+++ b/test/files/pos/implicits.scala
@@ -1,3 +1,28 @@
+// #1435
+object t1435 {
+ implicit def a(s:String):String = error("")
+ implicit def a(i:Int):String = error("")
+ implicit def b(i:Int):String = error("")
+}
+
+class C1435 {
+ val v:String = {
+ import t1435.a
+ 2
+ }
+}
+
+// #1492
+class C1492 {
+
+ class X
+
+ def foo(x: X => X) {}
+
+ foo ( implicit x => implicitly[X] )
+ foo { implicit x => implicitly[X] }
+}
+
// #1579
object Test1579 {
class Column
@@ -20,7 +45,7 @@ object Test1625 {
implicit def byName[A](x: =>A) = new Wrapped(x)
implicit def byVal[A](x: A) = x
-
+
def main(args: Array[String]) = {
// val res:Wrapped = 7 // works
@@ -32,7 +57,33 @@ object Test1625 {
}
object Test2188 {
- implicit def toJavaList[A: ClassManifest](t:collection.Seq[A]):java.util.List[A] = java.util.Arrays.asList(t.toArray:_*)
+ implicit def toJavaList[A: ClassManifest](t:collection.Seq[A]):java.util.List[A] = java.util.Arrays.asList(t.toArray:_*)
val x: java.util.List[String] = List("foo")
}
+
+object TestNumericWidening {
+ val y = 1
+ val x: java.lang.Long = y
+}
+
+// #2709
+package foo2709 {
+ class A
+ class B
+
+ package object bar {
+ implicit def a2b(a: A): B = new B
+ }
+
+ package bar {
+ object test {
+ new A: B
+ }
+ }
+}
+
+// Problem with specs
+object specsProblem {
+ println(implicitly[Manifest[Class[_]]])
+}
diff --git a/test/files/pos/imports-pos.scala b/test/files/pos/imports-pos.scala
new file mode 100644
index 0000000000..5f70a5d2da
--- /dev/null
+++ b/test/files/pos/imports-pos.scala
@@ -0,0 +1,16 @@
+package test;
+
+import java.lang.{System => S}
+
+object test {
+ import S.out.{print => p, println => print}
+
+ val foo = 1;
+
+ p("hello"); print("world"); S.out.println("!");
+ S.out.flush();
+}
+object test1 {
+ import test._;
+ foo
+}
diff --git a/test/files/pos/imports.scala b/test/files/pos/imports.scala
deleted file mode 100644
index f6a55e5e07..0000000000
--- a/test/files/pos/imports.scala
+++ /dev/null
@@ -1,16 +0,0 @@
-package test;
-
-import java.lang.{System => S}
-
-object test {
- import S.out.{print => p, println => print}
-
- val foo = 1;
-
- p("hello"); print("world"); S.out.println("!");
- S.out.flush();
-}
-object test1 {
- import test._;
- foo
-}
diff --git a/test/files/pos/infer2-pos.scala b/test/files/pos/infer2-pos.scala
new file mode 100644
index 0000000000..06d0f5814f
--- /dev/null
+++ b/test/files/pos/infer2-pos.scala
@@ -0,0 +1,8 @@
+package test
+class Lst[T]
+case class cons[T](x: T, xs: Lst[T]) extends Lst[T]
+case class nil[T] extends Lst[T]
+object test {
+ Console.println(cons(1, nil()))
+}
+
diff --git a/test/files/pos/infer2.scala b/test/files/pos/infer2.scala
deleted file mode 100644
index e065219a80..0000000000
--- a/test/files/pos/infer2.scala
+++ /dev/null
@@ -1,8 +0,0 @@
-package test
-class Lst[T]
-case class cons[T](x: T, xs: Lst[T]) extends Lst[T]
-case class nil[T] extends Lst[T]
-object test {
- Console.println(cons(1, nil()))
-}
-
diff --git a/test/files/pos/inferbroadtype.scala b/test/files/pos/inferbroadtype.scala
index de8f7aa184..467bd0f186 100644
--- a/test/files/pos/inferbroadtype.scala
+++ b/test/files/pos/inferbroadtype.scala
@@ -2,7 +2,7 @@ object Test {
abstract class Base { val changesBaseClasses: Boolean }
class Concrete extends Base { val changesBaseClasses = true }
def getBase : Base = new Concrete
-
+
var c = new Base { val changesBaseClasses = true }
c = getBase
}
diff --git a/test/files/pos/infersingle.flags b/test/files/pos/infersingle.flags
new file mode 100644
index 0000000000..e1b37447c9
--- /dev/null
+++ b/test/files/pos/infersingle.flags
@@ -0,0 +1 @@
+-Xexperimental \ No newline at end of file
diff --git a/test/files/pos/infersingle.scala b/test/files/pos/infersingle.scala
new file mode 100644
index 0000000000..6830fcd799
--- /dev/null
+++ b/test/files/pos/infersingle.scala
@@ -0,0 +1,5 @@
+object Test {
+ def one[T](x: T): Option[T] = Some(x)
+ val x = "one"
+ val y: Option[x.type] = one(x)
+} \ No newline at end of file
diff --git a/test/files/pos/init.scala b/test/files/pos/init.scala
index c51446c804..fdea0e06f0 100644
--- a/test/files/pos/init.scala
+++ b/test/files/pos/init.scala
@@ -8,7 +8,7 @@ class Foo {
}
}
-object Test extends Application {
+object Test extends App {
val foo = new Foo
Console.println((new foo.Bar).id)
}
diff --git a/test/files/pos/inliner2.flags b/test/files/pos/inliner2.flags
new file mode 100644
index 0000000000..ea03113c66
--- /dev/null
+++ b/test/files/pos/inliner2.flags
@@ -0,0 +1 @@
+-optimise -Xfatal-warnings \ No newline at end of file
diff --git a/test/files/pos/inliner2.scala b/test/files/pos/inliner2.scala
new file mode 100644
index 0000000000..fe231ec3c4
--- /dev/null
+++ b/test/files/pos/inliner2.scala
@@ -0,0 +1,57 @@
+// This isn't actually testing much, because no warning is emitted in versions
+// before the fix which comes with this because the method isn't even considered
+// for inlining due to the bug.
+class A {
+ private var debug = false
+ @inline private def ifelse[T](cond: => Boolean, ifPart: => T, elsePart: => T): T =
+ if (cond) ifPart else elsePart
+
+ final def bob1() = ifelse(debug, 1, 2)
+ final def bob2() = if (debug) 1 else 2
+}
+// Cool:
+//
+// % ls -1 /tmp/2901/
+// A$$anonfun$bob1$1.class
+// A$$anonfun$bob1$2.class
+// A$$anonfun$bob1$3.class
+// A.class
+// % ls -1 /tmp/trunk
+// A.class
+//
+// Observations:
+//
+// (1) The inlined version accesses the field: the explicit one calls the accessor.
+// (2) The inlined version fails to eliminate boxing. With reference types it emits
+// an unneeded checkcast.
+// (3) The private var debug is mangled to A$$debug, but after inlining it is never accessed
+// from outside of the class and doesn't need mangling.
+// (4) We could forego emitting bytecode for ifelse entirely if it has been
+// inlined at all sites.
+//
+// Generated bytecode for the above:
+//
+// public final int bob1();
+// Code:
+// Stack=1, Locals=1, Args_size=1
+// 0: aload_0
+// 1: getfield #11; //Field A$$debug:Z
+// 4: ifeq 14
+// 7: iconst_1
+// 8: invokestatic #41; //Method scala/runtime/BoxesRunTime.boxToInteger:(I)Ljava/lang/Integer;
+// 11: goto 18
+// 14: iconst_2
+// 15: invokestatic #41; //Method scala/runtime/BoxesRunTime.boxToInteger:(I)Ljava/lang/Integer;
+// 18: invokestatic #45; //Method scala/runtime/BoxesRunTime.unboxToInt:(Ljava/lang/Object;)I
+// 21: ireturn
+//
+// public final int bob2();
+// Code:
+// Stack=1, Locals=1, Args_size=1
+// 0: aload_0
+// 1: invokevirtual #48; //Method A$$debug:()Z
+// 4: ifeq 11
+// 7: iconst_1
+// 8: goto 12
+// 11: iconst_2
+// 12: ireturn
diff --git a/test/files/pos/isApplicableSafe.scala b/test/files/pos/isApplicableSafe.scala
new file mode 100644
index 0000000000..591beb2b36
--- /dev/null
+++ b/test/files/pos/isApplicableSafe.scala
@@ -0,0 +1,8 @@
+class A {
+ // Any of Array[List[Symbol]], List[Array[Symbol]], or List[List[Symbol]] compile.
+ var xs: Array[Array[Symbol]] = _
+ var ys: Array[Map[Symbol, Set[Symbol]]] = _
+
+ xs = Array(Array())
+ ys = Array(Map(), Map())
+} \ No newline at end of file
diff --git a/test/files/pos/iterator-traversable-mix.scala b/test/files/pos/iterator-traversable-mix.scala
new file mode 100644
index 0000000000..2d6bf44c70
--- /dev/null
+++ b/test/files/pos/iterator-traversable-mix.scala
@@ -0,0 +1,8 @@
+object Test {
+ for {
+ x1 <- List(1, 2)
+ x2 <- Iterator(3, 4)
+ x3 <- Seq(5, 6).iterator
+ x4 <- Stream(7, 8)
+ } yield x1+x2+x3+x4
+}
diff --git a/test/files/pos/java-access-pos/J.java b/test/files/pos/java-access-pos/J.java
new file mode 100644
index 0000000000..4f2024673c
--- /dev/null
+++ b/test/files/pos/java-access-pos/J.java
@@ -0,0 +1,15 @@
+package a.b;
+
+public abstract class J {
+ public J() { }
+ J(int x1) { }
+ protected J(int x1, int x2) { }
+
+ abstract void packageAbstract();
+ protected abstract void protectedAbstract();
+ public abstract void publicAbstract();
+
+ void packageConcrete() { return; }
+ protected void protectedConcrete() { return; }
+ public void publicConcrete() { return; }
+}
diff --git a/test/files/pos/java-access-pos/S1.scala b/test/files/pos/java-access-pos/S1.scala
new file mode 100644
index 0000000000..cc739d9555
--- /dev/null
+++ b/test/files/pos/java-access-pos/S1.scala
@@ -0,0 +1,67 @@
+package a.b
+
+/** Declaring "override" all the time.
+ */
+class S1 extends J {
+ override private[b] def packageAbstract() = ()
+ override protected[b] def protectedAbstract() = ()
+ override def publicAbstract() = ()
+
+ override private[b] def packageConcrete() = ()
+ override protected[b] def protectedConcrete() = ()
+ override def publicConcrete() = ()
+}
+
+/** Implementing abstracts.
+ */
+class S2 extends J {
+ private[b] def packageAbstract() = ()
+ protected[b] def protectedAbstract() = ()
+ def publicAbstract() = ()
+}
+
+/** Widening access.
+ */
+class S3 extends J {
+ protected[b] def packageAbstract() = ()
+ protected[b] def protectedAbstract() = ()
+ def publicAbstract() = ()
+
+ override protected[b] def packageConcrete() = ()
+ override protected[b] def protectedConcrete() = ()
+ override def publicConcrete() = ()
+}
+/** More widening.
+ */
+class S4 extends J {
+ private[a] def packageAbstract() = ()
+ protected[a] def protectedAbstract() = ()
+ def publicAbstract() = ()
+
+ override private[a] def packageConcrete() = ()
+ override protected[a] def protectedConcrete() = ()
+ override def publicConcrete() = ()
+}
+/** Yet more widening.
+ */
+class S5 extends J {
+ def packageAbstract() = ()
+ def protectedAbstract() = ()
+ def publicAbstract() = ()
+
+ override def packageConcrete() = ()
+ override def protectedConcrete() = ()
+ override def publicConcrete() = ()
+}
+/** Constructors.
+ */
+class S6 extends J(1) {
+ def packageAbstract() = ()
+ def protectedAbstract() = ()
+ def publicAbstract() = ()
+}
+class S7 extends J(1, 2) {
+ def packageAbstract() = ()
+ def protectedAbstract() = ()
+ def publicAbstract() = ()
+} \ No newline at end of file
diff --git a/test/files/pos/javaReadsSigs/fromjava.java b/test/files/pos/javaReadsSigs/fromjava.java
new file mode 100644
index 0000000000..eca63961d5
--- /dev/null
+++ b/test/files/pos/javaReadsSigs/fromjava.java
@@ -0,0 +1,75 @@
+import scala.*;
+import scala.math.Ordering;
+import scala.math.Numeric;
+import scala.collection.Seq;
+import scala.collection.Traversable;
+import scala.collection.Traversable$;
+import scala.collection.immutable.Set;
+import scala.collection.immutable.HashSet;
+import scala.collection.immutable.Map;
+import scala.collection.immutable.Map$;
+import scala.collection.immutable.HashMap;
+import scala.collection.immutable.Vector;
+import scala.collection.immutable.List;
+import scala.collection.generic.CanBuildFrom;
+
+class A { };
+class B { };
+
+// This one compiles but it would be better if it didn't.
+// Checking in under pos anyway in the interests of making sure
+// we are informed if the status changes.
+class Contra {
+ // Not an Ordering<Character>.
+ static Ordering<Object> charOrd = scala.math.Ordering.Char$.MODULE$;
+
+ public boolean useCharOrd() {
+ return charOrd.compare(new Object(), new Object()) == 0;
+ }
+
+ static Numeric<?> intNum = scala.math.Numeric.IntIsIntegral$.MODULE$;
+}
+
+public class fromjava {
+ public static Function1<A, B> f1 = new scala.runtime.AbstractFunction1<A, B>() {
+ public B apply(A a) {
+ return null;
+ }
+ };
+
+ public static Function1<Tuple2<? extends Object, B>, B> f2 = new scala.runtime.AbstractFunction1<Tuple2<? extends Object, B>, B>() {
+ public B apply(Tuple2<? extends Object, B> tup) {
+ return tup._2();
+ }
+ };
+
+ public static String vector(Vector<String> x) {
+ Vector<String> y = x.take(2);
+ return y.head();
+ }
+ public static String list(List<String> x) {
+ List<String> y = x.drop(2);
+ return y.head();
+ }
+ public static Tuple2<String, Integer> map(Map<String, Integer> x) {
+ Traversable<Tuple2<String, Integer>> y = x.drop(2);
+ return y.head();
+ }
+ public static <T> Object sum(Traversable<T> x) {
+ return x.sum(Contra.intNum);
+ }
+ // Looks like sum as given below fails under java5, so disabled.
+ //
+ // [partest] testing: [...]/files/pos/javaReadsSigs [FAILED]
+ // [partest] files/pos/javaReadsSigs/fromjava.java:62: name clash: sum(scala.collection.Traversable<A>) and <T>sum(scala.collection.Traversable<T>) have the same erasure
+ // [partest] public static B sum(Traversable<A> x) {
+ // [partest] ^
+ //
+ //
+ // can't make this work with an actual CanBuildFrom: see #4389.
+ // public static B sum(Traversable<A> x) {
+ // // have to cast it unfortunately: map in TraversableLike returns
+ // // "That" and such types seem to be signature poison.
+ // return ((Traversable<B>)x.map(f1, null)).head();
+ // }
+} \ No newline at end of file
diff --git a/test/files/pos/lambdalift.scala b/test/files/pos/lambdalift.scala
index bc997d6f81..10bbf3ac12 100644
--- a/test/files/pos/lambdalift.scala
+++ b/test/files/pos/lambdalift.scala
@@ -11,5 +11,5 @@ object test {
def h() = x;
}
g() + new inner().g();
- }
+ }
}
diff --git a/test/files/pos/lexical.scala b/test/files/pos/lexical.scala
index 034b84bf0f..8c29513bb5 100755
--- a/test/files/pos/lexical.scala
+++ b/test/files/pos/lexical.scala
@@ -3,7 +3,7 @@ class RichInt(n: Int) {
def days = 1000*60*60*24*n
}
-object Test extends Application {
+object Test extends App {
implicit def RichInt(n: Int): RichInt = new RichInt(n)
println(10.days)
}
diff --git a/test/files/pos/liftcode_polymorphic.scala b/test/files/pos/liftcode_polymorphic.scala
new file mode 100644
index 0000000000..3d4b159c83
--- /dev/null
+++ b/test/files/pos/liftcode_polymorphic.scala
@@ -0,0 +1,11 @@
+object Append extends Application {
+
+ def append[A](l1: List[A], l2: List[A]):List[A] =
+ l1 match {
+ case Nil => l2
+ case x::xs => x :: append(xs, l2)
+ }
+
+ println(scala.reflect.Code.lift(append _).tree)
+}
+
diff --git a/test/files/pos/list-extractor.scala b/test/files/pos/list-extractor.scala
new file mode 100644
index 0000000000..79c622bca0
--- /dev/null
+++ b/test/files/pos/list-extractor.scala
@@ -0,0 +1,8 @@
+// This was fixed in r25277 but is enough different
+// from the case I was knowingly fixing, I'm throwing it
+// in there.
+object HasArgs {
+ def boop(params: List[List[_]]) = params match {
+ case List(List()) => 2
+ }
+}
diff --git a/test/files/pos/listpattern.scala b/test/files/pos/listpattern.scala
index 47145bf037..b64068474c 100644
--- a/test/files/pos/listpattern.scala
+++ b/test/files/pos/listpattern.scala
@@ -1,7 +1,7 @@
trait Value {}
case class FloatValue(x: Double) extends Value
object Test {
- def applyNumeric(op: (Double, Double) => Double):
+ def applyNumeric(op: (Double, Double) => Double):
PartialFunction[List[Value], Value] = {
case List(FloatValue(x), FloatValue(y)) => FloatValue(op(x, y))
}
diff --git a/test/files/pos/looping-jsig.scala b/test/files/pos/looping-jsig.scala
index 6e3313c463..e2d9e76229 100644
--- a/test/files/pos/looping-jsig.scala
+++ b/test/files/pos/looping-jsig.scala
@@ -1,15 +1,15 @@
import scala.collection.mutable._
trait BugTrack {
- trait B[+T]
+ trait B[+T]
val cache : HashMap[A[_], B[_]] = HashMap.empty
- def A[T](f: Int => B[T]): A[T]
+ def A[T](f: Int => B[T]): A[T]
= new A[T]{def apply(in: Int) = f(in)}
-
+
abstract class A[+T] extends (Int => B[T]) {
def giveMeSame = this
- }
+ }
def amethod[T](p: =>A[T]): A[T] = A(in => cache.get(p) match {
case Some(res) => res
diff --git a/test/files/pos/macros.flags b/test/files/pos/macros.flags
new file mode 100644
index 0000000000..e1b37447c9
--- /dev/null
+++ b/test/files/pos/macros.flags
@@ -0,0 +1 @@
+-Xexperimental \ No newline at end of file
diff --git a/test/files/pos/macros.scala b/test/files/pos/macros.scala
new file mode 100644
index 0000000000..8a98195978
--- /dev/null
+++ b/test/files/pos/macros.scala
@@ -0,0 +1,10 @@
+object Test {
+
+ class C {
+ def macro foo[T](xs: List[T]): T = (T, xs) match {
+ case (t1: glob.Type, t2: glob.Tree) => t2
+ }
+ }
+}
+
+
diff --git a/test/files/pos/manifest1.scala b/test/files/pos/manifest1.scala
index 4d3b3bfa48..8901aa7437 100644
--- a/test/files/pos/manifest1.scala
+++ b/test/files/pos/manifest1.scala
@@ -13,8 +13,9 @@ object Test {
abstract class C { type T = String; val x: T }
val c = new C { val x = "abc" }
foo(c.x)
- abstract class D { type T; val x: T }
- val d: D = new D { type T = String; val x = "x" }
+ abstract class D { type T; implicit val m: Manifest[T]; val x: T }
+ val stringm = implicitly[Manifest[String]]
+ val d: D = new D { type T = String; val m = stringm; val x = "x" }
+ import d.m
foo(d.x)
-
}
diff --git a/test/files/pos/michel6.scala b/test/files/pos/michel6.scala
index b32e8bed75..f312bf1796 100644
--- a/test/files/pos/michel6.scala
+++ b/test/files/pos/michel6.scala
@@ -1,6 +1,6 @@
object M {
def f(x: Int): Unit = {}
-
+
def g(): Int => Unit =
if (0 == 0) f else g()
}
diff --git a/test/files/pos/unapply.scala b/test/files/pos/misc-unapply_pos.scala
index 6651e64362..6651e64362 100644
--- a/test/files/pos/unapply.scala
+++ b/test/files/pos/misc-unapply_pos.scala
diff --git a/test/files/pos/native-warning.flags b/test/files/pos/native-warning.flags
new file mode 100644
index 0000000000..65faf53579
--- /dev/null
+++ b/test/files/pos/native-warning.flags
@@ -0,0 +1 @@
+-Xfatal-warnings -deprecation \ No newline at end of file
diff --git a/test/files/pos/native-warning.scala b/test/files/pos/native-warning.scala
new file mode 100644
index 0000000000..f721a57e8f
--- /dev/null
+++ b/test/files/pos/native-warning.scala
@@ -0,0 +1,3 @@
+class A {
+ @native def setup(): Unit
+}
diff --git a/test/files/pos/needstypeearly.scala b/test/files/pos/needstypeearly.scala
index a90c2575f2..bd93b5c45d 100644
--- a/test/files/pos/needstypeearly.scala
+++ b/test/files/pos/needstypeearly.scala
@@ -1,4 +1,4 @@
-abstract class NeedsXEarly {
- val x: Int
+abstract class NeedsXEarly {
+ val x: Int
}
class Foo extends { val x = 1 } with NeedsXEarly
diff --git a/test/files/pos/nested2.scala b/test/files/pos/nested2.scala
index 302688a0ef..421ea6facf 100644
--- a/test/files/pos/nested2.scala
+++ b/test/files/pos/nested2.scala
@@ -5,5 +5,5 @@ class C[A] {
object Test {
val x = new C[String]
- val y: C[String]#D[int] = new x.D[int]
+ val y: C[String]#D[Int] = new x.D[Int]
}
diff --git a/test/files/pos/noproductN.flags b/test/files/pos/noproductN.flags
new file mode 100644
index 0000000000..14b05e7354
--- /dev/null
+++ b/test/files/pos/noproductN.flags
@@ -0,0 +1 @@
+-Yno-productN \ No newline at end of file
diff --git a/test/files/pos/noproductN.scala b/test/files/pos/noproductN.scala
new file mode 100644
index 0000000000..856d960b7d
--- /dev/null
+++ b/test/files/pos/noproductN.scala
@@ -0,0 +1,2 @@
+object Foo { type S = String }
+case class Foo(x: Foo.S) { }
diff --git a/test/files/pos/nothing_manifest_disambig.scala b/test/files/pos/nothing_manifest_disambig.scala
new file mode 100644
index 0000000000..076742033f
--- /dev/null
+++ b/test/files/pos/nothing_manifest_disambig.scala
@@ -0,0 +1,10 @@
+object Test {
+ def mani[T: Manifest](xs: T) = xs
+ mani(List())
+
+ def listElMani[T: Manifest](xs: List[T]) = xs
+ listElMani(List())
+
+ def foo[A, C](m : C)(implicit ev: C <:< Traversable[A], mani: Manifest[A]): (C, A, Manifest[A]) = (m, m.head, mani)
+ foo(List(1,2,3))
+} \ No newline at end of file
diff --git a/test/files/pos/nullary.scala b/test/files/pos/nullary.scala
index 614fcdf480..8e5a834012 100644
--- a/test/files/pos/nullary.scala
+++ b/test/files/pos/nullary.scala
@@ -2,7 +2,7 @@ abstract class NullaryTest[T, m[s]] {
def nullary: String = "a"
val x = nullary
- def nullary2: T
+ def nullary2: T
val x2 = nullary2
def nullary3: m[T]
@@ -16,5 +16,5 @@ class Concrete extends NullaryTest[Int, List] {
object test {
(new Concrete).nullary2
- (new Concrete).nullary3
+ (new Concrete).nullary3
}
diff --git a/test/files/pos/nullary_poly.scala b/test/files/pos/nullary_poly.scala
index d2e1e127a1..4de7235a1c 100644
--- a/test/files/pos/nullary_poly.scala
+++ b/test/files/pos/nullary_poly.scala
@@ -2,9 +2,9 @@
class A {
// built-in
synchronized {}
-
+
val x: String = "a".asInstanceOf[String]
-
+
// user-defined:
def polyNullary[T]: List[T] = Nil
}
diff --git a/test/files/pos/override-object-yes.flags b/test/files/pos/override-object-yes.flags
new file mode 100644
index 0000000000..22e9a95c4f
--- /dev/null
+++ b/test/files/pos/override-object-yes.flags
@@ -0,0 +1 @@
+-Yoverride-objects \ No newline at end of file
diff --git a/test/files/pos/override-object-yes.scala b/test/files/pos/override-object-yes.scala
new file mode 100644
index 0000000000..b0563df0a3
--- /dev/null
+++ b/test/files/pos/override-object-yes.scala
@@ -0,0 +1,40 @@
+package case1 {
+ class Bippy {
+ def f = 1
+ }
+
+ trait Foo {
+ object Bar extends Bippy {
+ override def f = 2
+ }
+ }
+
+ trait Foo2 extends Foo {
+ override object Bar extends Bippy {
+ override def f = 3
+ }
+ }
+
+ trait Foo3 {
+ object Bar {
+ def g: Traversable[Int] = Nil
+ }
+ }
+ trait Foo4 extends Foo3 {
+ override object Bar {
+ def g: List[Int] = Nil
+ }
+ }
+}
+
+package case2 {
+ class Bar[T]
+
+ class Foo[T] {
+ object A extends Bar[T]
+ }
+
+ class Baz[S] extends Foo[S] {
+ override object A extends Bar[S]
+ }
+}
diff --git a/test/files/pos/partialfun.scala b/test/files/pos/partialfun.scala
index 9f32a22023..d8971e56fb 100644
--- a/test/files/pos/partialfun.scala
+++ b/test/files/pos/partialfun.scala
@@ -1,6 +1,6 @@
object partialfun {
- def applyPartial[b](f: PartialFunction[Option[String], b])(x: Option[String]) =
+ def applyPartial[b](f: PartialFunction[Option[String], b])(x: Option[String]) =
if (f.isDefinedAt(x)) f(x) else "<undefined>";
applyPartial {
diff --git a/test/files/pos/pat_gilles.scala b/test/files/pos/pat_gilles.scala
index 704d5b9c00..567d700eba 100644
--- a/test/files/pos/pat_gilles.scala
+++ b/test/files/pos/pat_gilles.scala
@@ -1,7 +1,7 @@
abstract class Table2 {
- val x: Any => Unit = { zz:Any =>
+ val x: Any => Unit = { zz:Any =>
zz match {
case Table2.CellUpdated(row, column) =>
val foo = Table2.CellUpdated(2,2)
diff --git a/test/files/pos/patmat.scala b/test/files/pos/patmat.scala
new file mode 100644
index 0000000000..4e652b146e
--- /dev/null
+++ b/test/files/pos/patmat.scala
@@ -0,0 +1,163 @@
+// these used to be in test/files/run/patmatnew.scala
+// the ticket numbers are from the old tracker, not Trac
+
+object ZipFun {
+ //just compilation
+ def zipFun[a, b](xs: List[a], ys: List[b]): List[Pair[a, b]] = (Pair(xs, ys): @unchecked) match {
+ // !!! case Pair(List(), _), Pair(_, List()) => List()
+ case (x :: xs1, y :: ys1) => (x, y) :: zipFun(xs1, ys1)
+ }
+}
+
+object Test1253 { // compile-only
+ def foo(t: (Int, String)) = t match {
+ case (1, "") => throw new Exception
+ case (r, _) => throw new Exception(r.toString)
+ }
+}
+
+object Foo1258 {
+ case object baz
+ def foo(bar: AnyRef) = {
+ val Baz = baz
+ bar match {
+ case Baz => ()
+ }
+ }
+}
+
+object t1261 {
+ sealed trait Elem
+ case class Foo() extends Elem
+ case class Bar() extends Elem
+ trait Row extends Elem
+ object Row {
+ def unapply(r: Row) = true
+
+ def f(elem: Elem) {
+ elem match {
+ case Bar() => ;
+ case Row() => ;
+ case Foo() => ; // used to give ERROR (unreachable code)
+ }
+ }
+ }
+}
+
+sealed abstract class Tree
+case class Node(l: Tree, v: Int, r: Tree) extends Tree
+case object EmptyTree extends Tree
+
+object Ticket335 { // compile-only
+ def runTest() {
+ (EmptyTree: Tree @unchecked) match {
+ case Node(_, v, _) if (v == 0) => 0
+ case EmptyTree => 2
+ }
+ }
+}
+
+object TestIfOpt { //compile-only "test EqualsPatternClass in combination with MixTypes opt, bug #1278"
+ trait Token {
+ val offset: Int
+ def matching: Option[Token]
+ }
+ def go(tok: Token) = (tok.matching: @unchecked) match {
+ case Some(other) if true => Some(other)
+ case _ if true => tok.matching match {
+ case Some(other) => Some(other)
+ case _ => None
+ }
+ }
+}
+
+object Go { // bug #1277 compile-only
+ trait Core { def next: Position = null }
+ trait Dir
+ val NEXT = new Dir {}
+
+ trait Position extends Core
+
+ (null: Core, null: Dir) match {
+ case (_, NEXT) if true => false // no matter whether NEXT test succeed, cannot throw column because of guard
+ case (at2: Position, dir) => true
+ }
+}
+
+trait Outer { // bug #1282 compile-only
+ object No
+ trait File {
+ (null: AnyRef) match {
+ case No => false
+ }
+ }
+}
+
+class Test806_818 { // #806, #811 compile only -- type of bind
+ // t811
+ trait Core {
+ trait NodeImpl
+ trait OtherImpl extends NodeImpl
+ trait DoubleQuoteImpl extends NodeImpl
+ def asDQ(node: OtherImpl) = node match {
+ case dq: DoubleQuoteImpl => dq
+ }
+ }
+
+ trait IfElseMatcher {
+ type Node <: NodeImpl
+ trait NodeImpl
+ trait IfImpl
+ private def coerceIf(node: Node) = node match {
+ case node: IfImpl => node // var node is of type Node with IfImpl!
+ case _ => null
+ }
+ }
+}
+
+object Ticket495bis {
+ def signum(x: Int): Int =
+ x match {
+ case 0 => 0
+ case _ if x < 0 => -1
+ case _ if x > 0 => 1
+ }
+ def pair_m(x: Int, y: Int) =
+ (x, y) match {
+ case (_, 0) => 0
+ case (-1, _) => -1
+ case (_, _) => 1
+ }
+}
+
+object Ticket522 {
+ class Term[X]
+ object App {
+ // i'm hidden
+ case class InternalApply[Y, Z](fun: Y => Z, arg: Y) extends Term[Z]
+
+ def apply[Y, Z](fun: Y => Z, arg: Y): Term[Z] =
+ new InternalApply[Y, Z](fun, arg)
+
+ def unapply[X](arg: Term[X]): Option[(Y => Z, Y)] forSome { type Y; type Z } =
+ arg match {
+ case i: InternalApply[y, z] => Some(i.fun, i.arg)
+ case _ => None
+ }
+ }
+
+ App({ x: Int => x }, 5) match {
+ case App(arg, a) =>
+ }
+}
+
+object Ticket710 {
+ def method {
+ sealed class Parent()
+ case object Child extends Parent()
+ val x: Parent = Child
+ x match {
+ case Child => ()
+ }
+ }
+}
diff --git a/test/files/pos/polymorphic-case-class.flags b/test/files/pos/polymorphic-case-class.flags
new file mode 100644
index 0000000000..464cc20ea6
--- /dev/null
+++ b/test/files/pos/polymorphic-case-class.flags
@@ -0,0 +1 @@
+-Xfatal-warnings -unchecked \ No newline at end of file
diff --git a/test/files/pos/polymorphic-case-class.scala b/test/files/pos/polymorphic-case-class.scala
new file mode 100644
index 0000000000..5ed5eeddc9
--- /dev/null
+++ b/test/files/pos/polymorphic-case-class.scala
@@ -0,0 +1,2 @@
+// no unchecked warnings
+case class Bippy[T, -U, +V](x: T, z: V) { }
diff --git a/test/files/pos/bug1210.scala b/test/files/pos/pos-bug1210.scala
index eb163a956e..eb163a956e 100644
--- a/test/files/pos/bug1210.scala
+++ b/test/files/pos/pos-bug1210.scala
diff --git a/test/files/pos/pos-bug1241.scala b/test/files/pos/pos-bug1241.scala
new file mode 100644
index 0000000000..1752208f37
--- /dev/null
+++ b/test/files/pos/pos-bug1241.scala
@@ -0,0 +1,8 @@
+object test extends App {
+ // more..
+ type T = { def hello() }
+ //val x4 = new AnyRef { def hello() { println("4") } } // ok!
+ val x4: T = new { def hello() { println("4") } } // error!
+ x4.hello()
+ // more..
+}
diff --git a/test/files/pos/propagate.scala b/test/files/pos/propagate.scala
index 84f4f5d6d2..a7f9d6ce6d 100644
--- a/test/files/pos/propagate.scala
+++ b/test/files/pos/propagate.scala
@@ -14,4 +14,4 @@ class C {
-
+
diff --git a/test/files/pos/protected-static/J.java b/test/files/pos/protected-static/J.java
new file mode 100644
index 0000000000..502dc2c172
--- /dev/null
+++ b/test/files/pos/protected-static/J.java
@@ -0,0 +1,7 @@
+package bippy;
+
+public class J {
+ protected static String f() {
+ return "hi mom";
+ }
+} \ No newline at end of file
diff --git a/test/files/pos/protected-static/JavaClass.java b/test/files/pos/protected-static/JavaClass.java
new file mode 100644
index 0000000000..cd45a279c2
--- /dev/null
+++ b/test/files/pos/protected-static/JavaClass.java
@@ -0,0 +1,6 @@
+package bippy;
+
+public abstract class JavaClass {
+ protected static class Inner {}
+ protected abstract Inner getInner();
+}
diff --git a/test/files/pos/protected-static/S.scala b/test/files/pos/protected-static/S.scala
new file mode 100644
index 0000000000..644633546d
--- /dev/null
+++ b/test/files/pos/protected-static/S.scala
@@ -0,0 +1,7 @@
+package bippy
+
+object Test extends J {
+ def main(args: Array[String]): Unit = {
+ bippy.J.f()
+ }
+}
diff --git a/test/files/pos/protected-static/ScalaClass.scala b/test/files/pos/protected-static/ScalaClass.scala
new file mode 100644
index 0000000000..11108b890d
--- /dev/null
+++ b/test/files/pos/protected-static/ScalaClass.scala
@@ -0,0 +1,6 @@
+import bippy.JavaClass
+
+class Implementor extends JavaClass {
+ import JavaClass.Inner
+ def getInner: Inner = null
+}
diff --git a/test/files/pos/relax_implicit_divergence.scala b/test/files/pos/relax_implicit_divergence.scala
new file mode 100644
index 0000000000..8525c84bab
--- /dev/null
+++ b/test/files/pos/relax_implicit_divergence.scala
@@ -0,0 +1,7 @@
+class A(val options: Seq[String])
+
+object Test {
+ implicit def ss: Equiv[Seq[String]] = error("dummy")
+ implicit def equivA(implicit seqEq: Equiv[Seq[String]]): Equiv[A] = error("dummy")
+ implicitly[Equiv[A]]
+} \ No newline at end of file
diff --git a/test/files/pos/return_thistype.scala b/test/files/pos/return_thistype.scala
index c0736c0ad9..f164e06cc0 100644
--- a/test/files/pos/return_thistype.scala
+++ b/test/files/pos/return_thistype.scala
@@ -1,8 +1,8 @@
// tests transformation of return type in typedTypeApply (see also tcpoly_gm.scala)
-class As {
- class A {
+class As {
+ class A {
def foo: A.this.type = bar.asInstanceOf[A.this.type]
def foo2: this.type = bar.asInstanceOf[this.type]
- def bar: A = null
+ def bar: A = null
}
}
diff --git a/test/files/pos/scala-singleton.scala b/test/files/pos/scala-singleton.scala
new file mode 100644
index 0000000000..5e0baa0cb2
--- /dev/null
+++ b/test/files/pos/scala-singleton.scala
@@ -0,0 +1,55 @@
+// A bunch of ridiculous seeming tests until you realize much
+// of this didn't work until the commit which accompanies this.
+object Test {
+ def f1(x: AnyRef with Singleton): AnyRef with Singleton = x
+ def f2[T <: AnyRef with Singleton](x: T): T = x
+
+ val x1: AnyRef with Singleton = "abc"
+ val x2 = "def"
+ final val x3 = "ghi"
+ val x4: String = "jkl"
+
+ // compiles...
+ def narrow1(x: AnyRef): AnyRef with Singleton = x
+
+ // compiles, still doesn't help.
+ def narrow2(x: AnyRef): AnyRef with Singleton = x.asInstanceOf[x.type]
+
+ // fails, wait, what? This fails and narrow1 compiles?
+ def narrow3(x: AnyRef): AnyRef with Singleton = x.asInstanceOf[AnyRef with Singleton]
+
+ // ok
+ def narrow4[T <: AnyRef](x: T): AnyRef with Singleton = x
+
+ object imp {
+ implicit def narrow4[T <: AnyRef](x: T): AnyRef with Singleton = x
+ val x5: String = "mno"
+ def imp1 = f1(x5)
+
+ // f2(x5) // doesn't work but I think it should
+ def imp2 = f2(narrow4(x5))
+ }
+
+ def main(args: Array[String]): Unit = {
+ // compiles
+ f1(x1)
+ f1(x2)
+ f1(x3)
+ f1(x4)
+
+ f2(x1)
+ // f2(x2)
+ // f2(x3) // maybe this one should work
+ // f2(x4)
+
+ f1(narrow1(x4))
+ f1(narrow2(x4))
+ f1(narrow3(x4))
+ f1(narrow4(x4))
+ f2(narrow1(x4))
+ f2(narrow2(x4))
+ f2(narrow3(x4))
+ f2(narrow4(x4))
+ }
+}
+
diff --git a/test/files/pos/scoping1.scala b/test/files/pos/scoping1.scala
index c9c0489e69..548f154b6b 100644
--- a/test/files/pos/scoping1.scala
+++ b/test/files/pos/scoping1.scala
@@ -1,4 +1,4 @@
-object This extends Application {
+object This extends App {
trait A {
def foo(): Unit
}
@@ -9,4 +9,4 @@ object This extends Application {
def foo() = ()
}
val c: C = new D
-}
+}
diff --git a/test/files/pos/self-type-override.scala b/test/files/pos/self-type-override.scala
new file mode 100644
index 0000000000..7c40ef37e6
--- /dev/null
+++ b/test/files/pos/self-type-override.scala
@@ -0,0 +1,13 @@
+trait TCommon {
+ def f: String
+}
+
+class C1 extends TCommon {
+ def f = "in C1"
+}
+
+trait TOverrider { this: TCommon =>
+ override def f = "in TOverrider" // The overridden self-type member...
+}
+
+class C2 extends C1 with TOverrider // ... fails to override, here.
diff --git a/test/files/pos/selftails.scala b/test/files/pos/selftails.scala
new file mode 100644
index 0000000000..7c58543747
--- /dev/null
+++ b/test/files/pos/selftails.scala
@@ -0,0 +1,23 @@
+package net.liftweb.util
+
+/**
+* This trait adds functionality to Scala standard types
+*/
+trait BasicTypesHelpers { self: StringHelpers with ControlHelpers =>
+
+ /**
+ * Compare two arrays of Byte for byte equality.
+ * @return true if two Byte arrays contain the same bytes
+ */
+ def isEq(a: Array[Byte], b: Array[Byte]) = {
+ def eq(a: Array[Byte], b: Array[Byte], pos: Int, len: Int): Boolean = {
+ if (pos == len) true
+ else if (a(pos) != b(pos)) false
+ else eq(a , b, pos + 1, len)
+ }
+ a.length == b.length && eq(a, b, 0, a.length)
+ }
+}
+
+trait StringHelpers
+trait ControlHelpers
diff --git a/test/files/pos/seq-ordering.scala b/test/files/pos/seq-ordering.scala
new file mode 100644
index 0000000000..8f1d293c40
--- /dev/null
+++ b/test/files/pos/seq-ordering.scala
@@ -0,0 +1,9 @@
+import Ordering.Implicits._
+
+class A {
+ import Predef.{ implicitly => ? }
+
+ ?[Ordering[List[Int]]]
+ ?[Ordering[IndexedSeq[(Int, String)]]]
+ ?[Ordering[Seq[Seq[Int]]]]
+}
diff --git a/test/files/pos/signatures/Test.java b/test/files/pos/signatures/Test.java
index 3d1e3756a7..78c196526b 100644
--- a/test/files/pos/signatures/Test.java
+++ b/test/files/pos/signatures/Test.java
@@ -3,7 +3,7 @@ import test.Outer;
/* Test correct generation of java signatures. The Outer class should not
* have a Java signature attribute for the inner method definition. Trait
- * Mutable should have one, even though it is also a nested definition.
+ * Mutable should have one, even though it is also a nested definition.
* (but for classes there is a way to tell about nesting to the JVM).
*/
class Test {
diff --git a/test/files/pos/signatures/sig.scala b/test/files/pos/signatures/sig.scala
index 4236f27bed..3feb9c456a 100644
--- a/test/files/pos/signatures/sig.scala
+++ b/test/files/pos/signatures/sig.scala
@@ -1,7 +1,7 @@
package test
/* Tests correct generation of Java signatures. The local method 'bar' should
- * not get a generic signature, as it may refer to type parameters of the enclosing
+ * not get a generic signature, as it may refer to type parameters of the enclosing
* method, and the JVM does not know about nested methods.
*/
class Outer {
diff --git a/test/files/pos/simple-exceptions.scala b/test/files/pos/simple-exceptions.scala
new file mode 100644
index 0000000000..38f2fc8500
--- /dev/null
+++ b/test/files/pos/simple-exceptions.scala
@@ -0,0 +1,20 @@
+import java.io.IOException;
+
+object Test {
+
+ //def error[a](x: String):a = new java.lang.RuntimeException(x) throw;
+
+ def main(args: Array[String]): Unit = {
+ try {
+ try {
+ Console.println("hi!")
+ error("xx")
+ }
+ finally Console.println("ho!")
+ }
+ catch {
+ case ex: IOException => Console.println("io exception!");
+ case ex => Console.println(ex);
+ }
+ }
+}
diff --git a/test/files/pos/spec-Function1.flags b/test/files/pos/spec-Function1.flags
deleted file mode 100644
index 973517e1c9..0000000000
--- a/test/files/pos/spec-Function1.flags
+++ /dev/null
@@ -1 +0,0 @@
--Yspecialize
diff --git a/test/files/pos/spec-Function1.scala b/test/files/pos/spec-Function1.scala
index 2baa22f269..7bdcd072b2 100644
--- a/test/files/pos/spec-Function1.scala
+++ b/test/files/pos/spec-Function1.scala
@@ -1,7 +1,6 @@
-
/* __ *\
** ________ ___ / / ___ Scala API **
-** / __/ __// _ | / / / _ | (c) 2002-2009, LAMP/EPFL **
+** / __/ __// _ | / / / _ | (c) 2002-2011, LAMP/EPFL **
** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ **
** /____/\___/_/ |_/____/_/ | | **
** |/ **
@@ -21,7 +20,7 @@ package scala
* <code>anonfun1</code>:
* </p>
* <pre>
- * <b>object</b> Main <b>extends</b> Application {
+ * <b>object</b> Main <b>extends</b> App {
*
* <b>val</b> succ = (x: Int) => x + 1
*
@@ -36,11 +35,11 @@ package scala
trait Function1[@specialized -T1, @specialized +R] extends AnyRef { self =>
def apply(v1:T1): R
override def toString() = "<function>"
-
+
/** (f compose g)(x) == f(g(x))
*/
def compose[A](g: A => T1): A => R = { x => apply(g(x)) }
-
+
/** (f andThen g)(x) == g(f(x))
*/
def andThen[A](g: R => A): T1 => A = { x => g(apply(x)) }
diff --git a/test/files/pos/spec-List.flags b/test/files/pos/spec-List.flags
deleted file mode 100644
index 973517e1c9..0000000000
--- a/test/files/pos/spec-List.flags
+++ /dev/null
@@ -1 +0,0 @@
--Yspecialize
diff --git a/test/files/pos/spec-annotations.flags b/test/files/pos/spec-annotations.flags
deleted file mode 100644
index 973517e1c9..0000000000
--- a/test/files/pos/spec-annotations.flags
+++ /dev/null
@@ -1 +0,0 @@
--Yspecialize
diff --git a/test/files/pos/spec-annotations.scala b/test/files/pos/spec-annotations.scala
index 215f00da50..35cab6de09 100644
--- a/test/files/pos/spec-annotations.scala
+++ b/test/files/pos/spec-annotations.scala
@@ -23,7 +23,7 @@ object Test {
//bug #1214
val y = new (Integer @ann(0))(2)
- import scala.reflect.BeanProperty
+ import scala.beans.BeanProperty
// bug #637
trait S { def getField(): Int }
diff --git a/test/files/pos/spec-arrays.flags b/test/files/pos/spec-arrays.flags
deleted file mode 100644
index 973517e1c9..0000000000
--- a/test/files/pos/spec-arrays.flags
+++ /dev/null
@@ -1 +0,0 @@
--Yspecialize
diff --git a/test/files/pos/spec-arrays.scala b/test/files/pos/spec-arrays.scala
index c1f253a39d..84f6eef071 100644
--- a/test/files/pos/spec-arrays.scala
+++ b/test/files/pos/spec-arrays.scala
@@ -20,7 +20,7 @@ abstract class AbsArray[T] {
def updateBoolean(idx: Int, elem: Boolean) = update(idx, elem.asInstanceOf[T])
def applyObject(idx: Int): Object = apply(idx).asInstanceOf[Object]
def updateObject(idx: Int, elem: Object) = update(idx, elem.asInstanceOf[T])
-}
+}
final class IntArray(arr: Array[Int]) extends AbsArray[Int] {
def apply(idx: Int): Int = applyInt(idx)
@@ -30,7 +30,7 @@ final class IntArray(arr: Array[Int]) extends AbsArray[Int] {
def length: Int = arr.length
}
-final class GenericArray[T](arr: Array[T]) extends AbsArray[T] {
+final class ArraySeq[T](arr: Array[T]) extends AbsArray[T] {
def apply(idx: Int): T = arr(idx)
def update(idx: Int, elem: T) = arr(idx) = elem
def length: Int = arr.length
@@ -64,7 +64,7 @@ class ScalaSpecTest extends Test {
while (i < arr.length) { acc = acc + arr.applyInt(i); i += 1 }
acc
}
-
+
def modify(j: Int) = {
val base = j * 100 % 1000
var i = 0
@@ -74,7 +74,7 @@ class ScalaSpecTest extends Test {
}
}
}
-
+
class ScalaSpec2Test extends Test {
val arr: AbsArray[Int] = new IntArray(new Array[Int](1000))
@@ -84,7 +84,7 @@ class ScalaSpec2Test extends Test {
while (i < arr.length) { acc = acc + arr.applyInt(i); i += 1 }
acc
}
-
+
def modify(j: Int) = {
val base = j * 100 % 1000
var i = 0
@@ -94,9 +94,9 @@ class ScalaSpec2Test extends Test {
}
}
}
-
+
class ScalaWrapTest extends Test {
- val arr: AbsArray[Int] = new GenericArray(new Array[Int](1000))
+ val arr: AbsArray[Int] = new ArraySeq(new Array[Int](1000))
def sum(): Int = {
var acc = 0
@@ -104,7 +104,7 @@ class ScalaWrapTest extends Test {
while (i < arr.length) { acc = acc + arr.applyInt(i); i += 1 }
acc
}
-
+
def modify(j: Int) = {
val base = j * 100 % 1000
var i = 0
@@ -114,9 +114,9 @@ class ScalaWrapTest extends Test {
}
}
}
-
+
class ScalaGenTest extends Test {
- val arr: AbsArray[Integer] = new GenericArray(new Array[Integer](1000))
+ val arr: AbsArray[Integer] = new ArraySeq(new Array[Integer](1000))
for (i <- 0 until arr.length) arr(i) = new Integer(0)
def sum(): Int = {
@@ -125,7 +125,7 @@ class ScalaGenTest extends Test {
while (i < arr.length) { acc = acc + arr.apply(i).intValue; i += 1 }
acc
}
-
+
def modify(j: Int) = {
val base = j * 100 % 1000
var i = 0
@@ -135,7 +135,7 @@ class ScalaGenTest extends Test {
}
}
}
-
+
class JavaTest extends Test {
val arr = new Array[Int](1000)
@@ -145,7 +145,7 @@ class JavaTest extends Test {
while (i < arr.length) { acc = acc + arr(i); i += 1 }
acc
}
-
+
def modify(j: Int) = {
val base = j * 100 % 1000
var i = 0
@@ -166,7 +166,7 @@ class ScalaSpec3Test extends Test {
while (i < arr.length) { acc = acc + arr(i); i += 1 }
acc
}
-
+
def modify(j: Int) = {
val base = j * 100 % 1000
var i = 0
@@ -188,25 +188,25 @@ object TestSpec extends scala.testing.Benchmark {
(new ScalaSpecTest).run()
}
}
-
+
object TestSpec2 extends scala.testing.Benchmark {
def run() {
(new ScalaSpec2Test).run()
}
}
-
+
object TestGen extends scala.testing.Benchmark {
def run() {
(new ScalaGenTest).run()
}
}
-
+
object TestWrap extends scala.testing.Benchmark {
def run() {
(new ScalaWrapTest).run()
}
}
-
+
object TestSpec3 extends scala.testing.Benchmark {
def run() {
(new ScalaSpec3Test).run()
diff --git a/test/files/pos/spec-asseenfrom.scala b/test/files/pos/spec-asseenfrom.scala
new file mode 100644
index 0000000000..cf20fc5ffa
--- /dev/null
+++ b/test/files/pos/spec-asseenfrom.scala
@@ -0,0 +1,29 @@
+class Automaton[@specialized(Double) W,State] {
+
+ def finalWeight(s: State): W = error("todo");
+
+ def allStates: Set[State] = error("toodo");
+
+ /**
+ * Returns a map from states to its final weight. may expand all nodes.
+ */
+ def finalStateWeights = Map.empty ++ allStates.map { s => (s,finalWeight(s)) }
+
+ // This works fine:
+ /*
+ def finalStateWeights() = {
+ val it = allStates.iterator;
+ while(it.hasNext) {
+ finalWeight(it.next);
+ }
+ }
+ */
+
+}
+
+abstract class Automaton2[@specialized T1, T2] {
+ def finalWeight(s: T2): T1
+ def allStates: Set[T2]
+
+ def f = allStates map finalWeight
+}
diff --git a/test/files/pos/spec-constr.scala b/test/files/pos/spec-constr.scala
new file mode 100644
index 0000000000..e908b65a41
--- /dev/null
+++ b/test/files/pos/spec-constr.scala
@@ -0,0 +1,7 @@
+class SparseArray2[@specialized(Int) T:ClassManifest](val maxSize: Int, initialLength:Int = 3) {
+ private var data = new Array[T](initialLength);
+ private var index = new Array[Int](initialLength);
+
+ // comment out to compile correctly
+ data.length + 3;
+}
diff --git a/test/files/pos/spec-cyclic.flags b/test/files/pos/spec-cyclic.flags
deleted file mode 100644
index 973517e1c9..0000000000
--- a/test/files/pos/spec-cyclic.flags
+++ /dev/null
@@ -1 +0,0 @@
--Yspecialize
diff --git a/test/files/pos/spec-cyclic.scala b/test/files/pos/spec-cyclic.scala
index 65da297989..b983caa6db 100644
--- a/test/files/pos/spec-cyclic.scala
+++ b/test/files/pos/spec-cyclic.scala
@@ -6,18 +6,18 @@ trait MyPartialFunction[-A, +B] extends AnyRef with AbsFun[A, B]
trait ColMap[A, +B] extends MyPartialFunction[A, B] /*with Collection[(A, B)] */
-trait ColSorted[K,+A] extends ColRanged[K,A]
+trait ColSorted[K,+A] extends ColRanged[K,A]
-trait ColSortedMap[K,+E] extends ColMap[K,E] with ColSorted[K,Tuple2[K,E]]
+trait ColSortedMap[K,+E] extends ColMap[K,E] with ColSorted[K,Tuple2[K,E]]
trait MutMap[A, B] extends AnyRef
with ColMap[A, B]
-trait ColRanged[K, +A] //extends Iterable[A]
+trait ColRanged[K, +A] //extends Iterable[A]
trait JclRanged[K,A] extends ColRanged[K,A] //with MutableIterable[A] {
-trait JclMap[K,E] extends /*collection.jcl.MutableIterable[Tuple2[K,E]] with*/ MutMap[K,E]
+trait JclMap[K,E] extends /*collection.jcl.MutableIterable[Tuple2[K,E]] with*/ MutMap[K,E]
trait JclSorted[K,A] extends ColSorted[K,A] with JclRanged[K,A]
diff --git a/test/files/pos/spec-doubledef.scala b/test/files/pos/spec-doubledef.scala
new file mode 100644
index 0000000000..86b0d857d3
--- /dev/null
+++ b/test/files/pos/spec-doubledef.scala
@@ -0,0 +1,28 @@
+object Test {
+ def fn[@specialized T, @specialized U](t : T => Int, u : U => Int) : T =
+ null.asInstanceOf[T]
+}
+
+trait A[@specialized(Int) T] {
+ var value: T
+ def getWith[@specialized(Int) Z](f: T => Z) = f(value)
+}
+
+class C extends A[Int] {
+ var value = 10
+ override def getWith[@specialized(Int) Z](f: Int => Z) = f(value)
+}
+
+abstract class B[T, @specialized(scala.Int) U : Manifest, @specialized(scala.Int) V <% Ordered[V]] {
+ val u: U
+ val v: V
+
+ def f(t: T, v2: V): Pair[U, V] = {
+ val m: Array[U] = null
+ if (m.isEmpty) {
+ Pair(u, v)
+ } else {
+ Pair(u, v2)
+ }
+ }
+}
diff --git a/test/files/pos/spec-example1.flags b/test/files/pos/spec-example1.flags
deleted file mode 100644
index 973517e1c9..0000000000
--- a/test/files/pos/spec-example1.flags
+++ /dev/null
@@ -1 +0,0 @@
--Yspecialize
diff --git a/test/files/pos/spec-fields.flags b/test/files/pos/spec-fields.flags
deleted file mode 100644
index 973517e1c9..0000000000
--- a/test/files/pos/spec-fields.flags
+++ /dev/null
@@ -1 +0,0 @@
--Yspecialize
diff --git a/test/files/pos/spec-foo.flags b/test/files/pos/spec-foo.flags
deleted file mode 100644
index 973517e1c9..0000000000
--- a/test/files/pos/spec-foo.flags
+++ /dev/null
@@ -1 +0,0 @@
--Yspecialize
diff --git a/test/files/pos/spec-funs.flags b/test/files/pos/spec-funs.flags
deleted file mode 100644
index 973517e1c9..0000000000
--- a/test/files/pos/spec-funs.flags
+++ /dev/null
@@ -1 +0,0 @@
--Yspecialize
diff --git a/test/files/pos/spec-funs.scala b/test/files/pos/spec-funs.scala
index 5fea5e9560..611ec0ef62 100644
--- a/test/files/pos/spec-funs.scala
+++ b/test/files/pos/spec-funs.scala
@@ -19,7 +19,7 @@ final class IntTest {
val xs = new Array[Int](10000)
val f = new AbsFunction1[Int, Int] {
def apply(x: Int): Int = x * x
- }
+ }
for (j <- 0 until niters) {
transF(xs, f)
}
@@ -54,10 +54,10 @@ final class ClosureTest {
}
}
-object TestInt extends testing.Benchmark {
+object TestInt extends scala.testing.Benchmark {
def run() = (new IntTest).run()
}
-object TestClosure extends testing.Benchmark {
+object TestClosure extends scala.testing.Benchmark {
def run() = (new ClosureTest).run()
}
diff --git a/test/files/pos/spec-lists.flags b/test/files/pos/spec-lists.flags
deleted file mode 100644
index 973517e1c9..0000000000
--- a/test/files/pos/spec-lists.flags
+++ /dev/null
@@ -1 +0,0 @@
--Yspecialize
diff --git a/test/files/pos/spec-lists.scala b/test/files/pos/spec-lists.scala
index 01416da95e..46e164e9cb 100644
--- a/test/files/pos/spec-lists.scala
+++ b/test/files/pos/spec-lists.scala
@@ -1,4 +1,4 @@
-object Main extends Application {
+object Main extends App {
val xs = 1 :: 2 :: 3 :: 4 :: 5 :: Nil
diff --git a/test/files/pos/spec-localdefs.flags b/test/files/pos/spec-localdefs.flags
deleted file mode 100644
index 973517e1c9..0000000000
--- a/test/files/pos/spec-localdefs.flags
+++ /dev/null
@@ -1 +0,0 @@
--Yspecialize
diff --git a/test/files/pos/spec-maps.flags b/test/files/pos/spec-maps.flags
deleted file mode 100644
index 973517e1c9..0000000000
--- a/test/files/pos/spec-maps.flags
+++ /dev/null
@@ -1 +0,0 @@
--Yspecialize
diff --git a/test/files/pos/spec-multiplectors.scala b/test/files/pos/spec-multiplectors.scala
new file mode 100644
index 0000000000..8434a13936
--- /dev/null
+++ b/test/files/pos/spec-multiplectors.scala
@@ -0,0 +1,3 @@
+class Spec[@specialized(Int) A]() {
+ def this(n: Int) = this()
+}
diff --git a/test/files/pos/spec-params.flags b/test/files/pos/spec-params.flags
deleted file mode 100644
index 973517e1c9..0000000000
--- a/test/files/pos/spec-params.flags
+++ /dev/null
@@ -1 +0,0 @@
--Yspecialize
diff --git a/test/files/pos/spec-params.scala b/test/files/pos/spec-params.scala
index 33a252120c..f522512846 100644
--- a/test/files/pos/spec-params.scala
+++ b/test/files/pos/spec-params.scala
@@ -10,7 +10,7 @@ class Foo[@specialized A: ClassManifest] {
def m2[@specialized B <: String](x: B) = x.concat("a")
// conflicting in bounds, no mention of other spec members
- // expect an overload here plus implementation in
+ // expect an overload here plus implementation in
// compatible specialized subclasses
def m3[@specialized B >: A](x: B) = ()
@@ -19,10 +19,10 @@ class Foo[@specialized A: ClassManifest] {
// non-conflicting, expect a normalized overload implementation here
def m5[@specialized B](x: B) = x
-
+
// non-conflicting, expect a normalized implementation here
// and specialized implementations for all expansions in specialized subclasses
- def m6[@specialized B](x: B, y: A) =
+ def m6[@specialized B](x: B, y: A) =
goal(y)
def goal(x: A) = {
diff --git a/test/files/pos/spec-partially.scala b/test/files/pos/spec-partially.scala
new file mode 100644
index 0000000000..90778e42a8
--- /dev/null
+++ b/test/files/pos/spec-partially.scala
@@ -0,0 +1,5 @@
+/** Test case for partially specialized classes. see #2880. */
+
+class Arc[State, @specialized T](label: T, to: State)
+
+
diff --git a/test/files/pos/spec-partialmap.scala b/test/files/pos/spec-partialmap.scala
new file mode 100644
index 0000000000..09684e0242
--- /dev/null
+++ b/test/files/pos/spec-partialmap.scala
@@ -0,0 +1,17 @@
+
+// ticket #3378, overloaded specialized variants
+import scala.collection.{Traversable,TraversableLike};
+import scala.collection.generic.CanBuildFrom;
+
+trait PartialMap[@specialized A,@specialized B]
+extends PartialFunction[A,B] with Iterable[(A,B)] {
+
+ // commenting out this declaration gives a different exception.
+ /** Getter for all values for which the given key function returns true. */
+ def apply(f : (A => Boolean)) : Iterator[B] =
+ for ((k,v) <- iterator; if f(k)) yield v;
+
+ // if this is commented, it compiles fine:
+ def apply[This <: Traversable[A], That](keys : TraversableLike[A,This])
+ (implicit bf: CanBuildFrom[This, B, That]) : That = keys.map(apply);
+}
diff --git a/test/files/pos/spec-polymeth.flags b/test/files/pos/spec-polymeth.flags
deleted file mode 100644
index 973517e1c9..0000000000
--- a/test/files/pos/spec-polymeth.flags
+++ /dev/null
@@ -1 +0,0 @@
--Yspecialize
diff --git a/test/files/pos/spec-private.scala b/test/files/pos/spec-private.scala
new file mode 100644
index 0000000000..7d53bad955
--- /dev/null
+++ b/test/files/pos/spec-private.scala
@@ -0,0 +1,10 @@
+class Foo {
+
+ def foo[@specialized(Int) T](x: T) = new Object {
+ private final val myEdges = List(1, 2 , 3)
+
+ def boo {
+ myEdges
+ }
+ }
+}
diff --git a/test/files/pos/spec-sealed.flags b/test/files/pos/spec-sealed.flags
deleted file mode 100644
index 973517e1c9..0000000000
--- a/test/files/pos/spec-sealed.flags
+++ /dev/null
@@ -1 +0,0 @@
--Yspecialize
diff --git a/test/files/pos/spec-sealed.scala b/test/files/pos/spec-sealed.scala
index 8c06148d3e..5782930899 100644
--- a/test/files/pos/spec-sealed.scala
+++ b/test/files/pos/spec-sealed.scala
@@ -2,7 +2,7 @@ sealed abstract class MyList[@specialized +A] {
def head: A
def tail: MyList[A]
- def ::[@specialized B >: A](x: B): MyList[B] =
+ def ::[@specialized B >: A](x: B): MyList[B] =
new Cons[B](x, this)
}
@@ -18,8 +18,8 @@ case class Cons[@specialized a](private val hd: a, tl: MyList[a]) extends MyList
abstract class IntList extends MyList[Int]
-object Main extends Application {
- val xs = 1 :: 2 :: 3 :: MyNil
+object Main extends App {
+ val xs = 1 :: 2 :: 3 :: MyNil
println(xs)
}
diff --git a/test/files/pos/spec-short.flags b/test/files/pos/spec-short.flags
deleted file mode 100644
index 973517e1c9..0000000000
--- a/test/files/pos/spec-short.flags
+++ /dev/null
@@ -1 +0,0 @@
--Yspecialize
diff --git a/test/files/pos/spec-short.scala b/test/files/pos/spec-short.scala
index 71e56a485a..94a8007c6e 100644
--- a/test/files/pos/spec-short.scala
+++ b/test/files/pos/spec-short.scala
@@ -5,7 +5,7 @@ abstract class AbsFun[@specialized T, @specialized U] {
// abstract function, specialized
def sum(xs: List[T]): Int
- def prod(xs: List[T], mul: (Int, T) => Int): Int =
+ def prod(xs: List[T], mul: (Int, T) => Int): Int =
(1 /: xs)(mul)
// concrete function, not specialized
@@ -18,9 +18,9 @@ abstract class AbsFun[@specialized T, @specialized U] {
class Square extends AbsFun[Int, Int] {
def apply(x: Int): Int = x * x
- def sum(xs: List[Int]): Int =
+ def sum(xs: List[Int]): Int =
(0 /: xs) (_ + _)
- def abs(m: Int): Int =
+ def abs(m: Int): Int =
sum(List(1, 2, 3))
}
diff --git a/test/files/pos/spec-simple.flags b/test/files/pos/spec-simple.flags
deleted file mode 100644
index 973517e1c9..0000000000
--- a/test/files/pos/spec-simple.flags
+++ /dev/null
@@ -1 +0,0 @@
--Yspecialize
diff --git a/test/files/pos/spec-sparsearray.scala b/test/files/pos/spec-sparsearray.scala
new file mode 100644
index 0000000000..ea7710a785
--- /dev/null
+++ b/test/files/pos/spec-sparsearray.scala
@@ -0,0 +1,24 @@
+import scala.collection.mutable.MapLike
+
+class SparseArray[@specialized(Int) T:ClassManifest] extends collection.mutable.Map[Int,T] with collection.mutable.MapLike[Int,T,SparseArray[T]] {
+ override def get(x: Int) = {
+ val ind = findOffset(x)
+ if(ind < 0) None else Some(error("ignore"))
+ }
+
+ /**
+ * Returns the offset into index and data for the requested vector
+ * index. If the requested index is not found, the return value is
+ * negative and can be converted into an insertion point with -(rv+1).
+ */
+ private def findOffset(i : Int) : Int = {
+ error("impl doesn't matter")
+ }
+
+ override def apply(i : Int) : T = { error("ignore") }
+ override def update(i : Int, value : T) = error("ignore")
+ override def empty = new SparseArray[T]
+ def -=(ind: Int) = error("ignore")
+ def +=(kv: (Int,T)) = error("ignore")
+ override final def iterator = error("ignore")
+}
diff --git a/test/files/pos/spec-super.flags b/test/files/pos/spec-super.flags
deleted file mode 100644
index 973517e1c9..0000000000
--- a/test/files/pos/spec-super.flags
+++ /dev/null
@@ -1 +0,0 @@
--Yspecialize
diff --git a/test/files/pos/spec-t3497.scala b/test/files/pos/spec-t3497.scala
new file mode 100644
index 0000000000..6cc0e24f89
--- /dev/null
+++ b/test/files/pos/spec-t3497.scala
@@ -0,0 +1,16 @@
+abstract class A[T, @specialized U] {
+ def score(state: T): U
+}
+
+object B extends A[ Array[Byte], Int ] {
+ def score(state: Array[Byte]): Int = {
+ var index = 0
+ while (index < state.length) { // (index < 2) leads to the #2755 NullPointerException
+ if (state(index) == 0) {
+ return -1
+ }
+ }
+
+ return 0
+ }
+}
diff --git a/test/files/pos/spec-tailcall.flags b/test/files/pos/spec-tailcall.flags
deleted file mode 100644
index 973517e1c9..0000000000
--- a/test/files/pos/spec-tailcall.flags
+++ /dev/null
@@ -1 +0,0 @@
--Yspecialize
diff --git a/test/files/pos/spec-tailcall.scala b/test/files/pos/spec-tailcall.scala
index 703ec011ad..d91e2f59ce 100644
--- a/test/files/pos/spec-tailcall.scala
+++ b/test/files/pos/spec-tailcall.scala
@@ -1,5 +1,5 @@
class TailCall[@specialized T] {
- final def dropLeft(n: Int, xs: List[T]): List[T] =
+ final def dropLeft(n: Int, xs: List[T]): List[T] =
if (n == 0) xs
else dropLeft(n - 1, xs.tail)
/*
@@ -7,7 +7,7 @@ class TailCall[@specialized T] {
def crash(o: Option[String]) = filter {
case None if {
- def dropLeft[T](n: Int, xs: List[T]): List[T] =
+ def dropLeft[T](n: Int, xs: List[T]): List[T] =
if (n == 0) xs
else dropLeft(n - 1, xs.tail)
dropLeft(2, List(1, 2, 3)).isEmpty
diff --git a/test/files/pos/spec-thistype.flags b/test/files/pos/spec-thistype.flags
deleted file mode 100644
index 973517e1c9..0000000000
--- a/test/files/pos/spec-thistype.flags
+++ /dev/null
@@ -1 +0,0 @@
--Yspecialize
diff --git a/test/files/pos/spec-traits.scala b/test/files/pos/spec-traits.scala
new file mode 100644
index 0000000000..c6cc2921b7
--- /dev/null
+++ b/test/files/pos/spec-traits.scala
@@ -0,0 +1,64 @@
+trait A[@specialized(Int) T] { def foo: T }
+class B extends A[Int] { val foo = 10 }
+class C extends B
+
+// issue 3309
+class Lazy {
+ def test[U](block: => U): Unit = { block }
+
+ test { lazy val x = 1 }
+}
+
+// issue 3307
+class Bug3307 {
+ def f[Z](block: String => Z) {
+ block("abc")
+ }
+
+ ({ () =>
+ f { implicit x => println(x) } })()
+}
+
+// issue 3301
+ trait T[X]
+
+class Bug3301 {
+ def t[A]: T[A] = error("stub")
+
+ () => {
+ type X = Int
+
+ def foo[X] = t[X]
+ ()
+ }
+}
+// issue 3299
+object Failure {
+ def thunk() {
+ for (i <- 1 to 2) {
+ val Array(a, b) = Array(1,2)
+ ()
+ }
+ }
+}
+
+// issue 3296
+
+object AA
+{
+ def f(block: => Unit) {}
+
+ object BB
+ {
+ f {
+ object CC
+
+ ()
+ }
+ }
+
+ def foo[T](x: T) = { object A; false }
+}
+
+// issue 3325
+object O { def f[@specialized T] { for(k <- Nil: List[T]) { } } }
diff --git a/test/files/pos/spec-vector.scala b/test/files/pos/spec-vector.scala
new file mode 100644
index 0000000000..06e49b521f
--- /dev/null
+++ b/test/files/pos/spec-vector.scala
@@ -0,0 +1,4 @@
+// ticket #3379, abstract overrides
+trait Vector extends (Int=>Double) {
+ override def apply(i: Int): Double
+}
diff --git a/test/files/pos/spec.scala b/test/files/pos/spec.scala
new file mode 100644
index 0000000000..093d3cded4
--- /dev/null
+++ b/test/files/pos/spec.scala
@@ -0,0 +1,64 @@
+
+
+
+
+class Bar[@specialized(Int, AnyRef) A](a: A) {
+ val memb = a
+}
+
+
+class WithInner[@specialized(Int, AnyRef) A](a: A) {
+ class Inner {
+ def meth = a
+ }
+}
+
+
+class Baz[@specialized(Int, AnyRef) A, @specialized(Int, AnyRef) B] {
+ def ab(a: A, b: B) = (a, b)
+}
+
+
+trait Base[@specialized(Int, AnyRef) A]
+class Concrete[@specialized(Int, AnyRef) A] extends Base[A]
+
+
+class WithAnon[@specialized(Int, AnyRef) A](a: A) {
+ new AnyRef {
+ def foo = a
+ }
+}
+
+
+class Norm {
+ def id[@specialized(Int, AnyRef) A](a: A) = a
+}
+
+
+class Qux[@specialized(AnyRef) A] {
+ def memb[@specialized(AnyRef) B](a: A, b: B) = (a, b)
+}
+
+
+class Foo[@specialized(Int, AnyRef) A](val a: Array[A]) {
+ a(0)
+
+ def id(elem: A) = a(0) = elem
+}
+
+
+// instantiation and selection
+object Test {
+ def main(arg: Array[String]) {
+ val f = new Foo(new Array[String](5))
+ f.id("")
+
+ val z = new Baz[Int, Double]
+ z.ab(1, 1.0)
+
+ testspec(new Array[String](5))
+ testspec(new Array[Int](5))
+ }
+
+ def testspec[@specialized(Int, AnyRef) T](arr: Array[T]) = arr(0)
+}
diff --git a/test/files/pos/strings.scala b/test/files/pos/strings.scala
index 9fe8cfd94b..83b8179706 100644
--- a/test/files/pos/strings.scala
+++ b/test/files/pos/strings.scala
@@ -6,5 +6,5 @@ object test {
}
// #1000
object A {
- println("""This a "raw" string ending with a "double quote"""")
+ println("""This a "raw" string ending with a "double quote"""")
}
diff --git a/test/files/pos/sudoku.scala b/test/files/pos/sudoku.scala
index 9875b22cfd..336dc756a9 100644
--- a/test/files/pos/sudoku.scala
+++ b/test/files/pos/sudoku.scala
@@ -1,24 +1,24 @@
-object SudokuSolver extends Application {
+object SudokuSolver extends App {
// The board is represented by an array of strings (arrays of chars),
// held in a global variable m. The program begins by reading 9 lines
// of input to fill the board
var m: Array[Array[Char]] = Array.tabulate(9)((x: Int) => readLine.toArray)
-
+
// For printing m, a method print is defined
def print = { println(""); m map (carr => println(new String(carr))) }
-
+
// The test for validity is performed by looping over i=0..8 and
// testing the row, column and 3x3 square containing the given
// coordinate
def invalid(i: Int, x: Int, y: Int, n: Char): Boolean =
i<9 && (m(y)(i) == n || m(i)(x) == n ||
m(y/3*3 + i/3)(x/3*3 + i % 3) == n || invalid(i+1, x, y, n))
-
+
// Looping over a half-closed range of consecutive integers [l..u)
// is factored out into a higher-order function
def fold(f: (Int, Int) => Int, accu: Int, l: Int, u: Int): Int =
if(l==u) accu else fold(f, f(accu, l), l+1, u)
-
+
// The search function examines each position on the board in turn,
// trying the numbers 1..9 in each unfilled position
// The function is itself a higher-order fold, accumulating the value
@@ -34,7 +34,7 @@ object SudokuSolver extends Application {
val newaccu = search(x+1, y, f, accu);
m(y)(x) = '0';
newaccu}, accu, 1, 10)}
-
+
// The main part of the program uses the search function to accumulate
// the total number of solutions
println("\n"+search(0,0,i => {print; i+1},0)+" solution(s)")
diff --git a/test/files/pos/super.cmds b/test/files/pos/super.cmds
new file mode 100644
index 0000000000..8f3f8a4172
--- /dev/null
+++ b/test/files/pos/super.cmds
@@ -0,0 +1,2 @@
+javac Super_1.java
+scalac Super_2.scala
diff --git a/test/files/pos/super/Super_1.java b/test/files/pos/super/Super_1.java
index 9acbba0ec4..418ae96bc0 100644
--- a/test/files/pos/super/Super_1.java
+++ b/test/files/pos/super/Super_1.java
@@ -1,6 +1,6 @@
// A.java
interface Inter<T> { }
-class Super implements Inter<Super.Inner> {
+class Super implements Inter<Super.Inner> {
public class Inner { };
}
diff --git a/test/files/pos/switch-small.scala b/test/files/pos/switch-small.scala
new file mode 100644
index 0000000000..9de9ca028e
--- /dev/null
+++ b/test/files/pos/switch-small.scala
@@ -0,0 +1,8 @@
+import annotation._
+
+object Test {
+ def f(x: Int) = (x: @switch) match {
+ case 1 => 1
+ case _ => 2
+ }
+}
diff --git a/test/files/pos/switchUnbox.flags b/test/files/pos/switchUnbox.flags
deleted file mode 100644
index ec1ad20e3a..0000000000
--- a/test/files/pos/switchUnbox.flags
+++ /dev/null
@@ -1 +0,0 @@
--Xsqueeze:on
diff --git a/test/files/pos/switchUnbox.scala b/test/files/pos/switchUnbox.scala
index a97bff5521..1d4b742ff9 100644
--- a/test/files/pos/switchUnbox.scala
+++ b/test/files/pos/switchUnbox.scala
@@ -1,8 +1,5 @@
-// this test has accompanying .flags file
-// that contains -Xsqueeze:on
-//
object Foo {
- var xyz: (int, String) = (1, "abc")
+ var xyz: (Int, String) = (1, "abc")
xyz._1 match {
case 1 => Console.println("OK")
case 2 => Console.println("OK")
diff --git a/test/files/pos/bug0002.scala b/test/files/pos/t0002.scala
index 4c58ed3f4f..4c58ed3f4f 100644
--- a/test/files/pos/bug0002.scala
+++ b/test/files/pos/t0002.scala
diff --git a/test/files/pos/bug0017.scala b/test/files/pos/t0017.scala
index d2bcda08d4..d2bcda08d4 100644
--- a/test/files/pos/bug0017.scala
+++ b/test/files/pos/t0017.scala
diff --git a/test/files/pos/bug0020.scala b/test/files/pos/t0020.scala
index 4f1e5b1732..4f1e5b1732 100644
--- a/test/files/pos/bug0020.scala
+++ b/test/files/pos/t0020.scala
diff --git a/test/files/pos/t0029.scala b/test/files/pos/t0029.scala
new file mode 100644
index 0000000000..937b6d70c0
--- /dev/null
+++ b/test/files/pos/t0029.scala
@@ -0,0 +1,3 @@
+object Main {
+ def f[a]: List[List[a]] = for (l1 <- Nil; l2 <- Nil) yield l1
+}
diff --git a/test/files/pos/bug0030.scala b/test/files/pos/t0030.scala
index 2f23be14d9..2f23be14d9 100644
--- a/test/files/pos/bug0030.scala
+++ b/test/files/pos/t0030.scala
diff --git a/test/files/pos/t0031.scala b/test/files/pos/t0031.scala
new file mode 100644
index 0000000000..ec6eae9282
--- /dev/null
+++ b/test/files/pos/t0031.scala
@@ -0,0 +1,29 @@
+object Main {
+
+ trait Ensure[a] {
+ def ensure(postcondition: a => Boolean): a
+ }
+
+ def require[a](precondition: => Boolean)(command: => a): Ensure[a] =
+ if (precondition)
+ new Ensure[a] {
+ def ensure(postcondition: a => Boolean): a = {
+ val result = command;
+ if (postcondition(result)) result
+ else error("Assertion error")
+ }
+ }
+ else
+ error("Assertion error");
+
+ def arb[a](s: List[a]) =
+ require (! s.isEmpty) {
+ s.head
+ } ensure (result => s contains result);
+
+ def main(args: Array[String]) = {
+ val s = List(1, 2);
+ Console.println(arb(s))
+ }
+
+}
diff --git a/test/files/pos/bug0032.scala b/test/files/pos/t0032.scala
index 727a7d4e99..727a7d4e99 100644
--- a/test/files/pos/bug0032.scala
+++ b/test/files/pos/t0032.scala
diff --git a/test/files/pos/bug0036.scala b/test/files/pos/t0036.scala
index 3c9a84f8ad..3c9a84f8ad 100644
--- a/test/files/pos/bug0036.scala
+++ b/test/files/pos/t0036.scala
diff --git a/test/files/pos/bug0039.scala b/test/files/pos/t0039.scala
index 652c606b0e..652c606b0e 100644
--- a/test/files/pos/bug0039.scala
+++ b/test/files/pos/t0039.scala
diff --git a/test/files/pos/bug0049.scala b/test/files/pos/t0049.scala
index dd86642263..dd86642263 100644
--- a/test/files/pos/bug0049.scala
+++ b/test/files/pos/t0049.scala
diff --git a/test/files/pos/bug0053.scala b/test/files/pos/t0053.scala
index 44763ef144..44763ef144 100644
--- a/test/files/pos/bug0053.scala
+++ b/test/files/pos/t0053.scala
diff --git a/test/files/pos/bug0054.scala b/test/files/pos/t0054.scala
index 670160f36e..670160f36e 100644
--- a/test/files/pos/bug0054.scala
+++ b/test/files/pos/t0054.scala
diff --git a/test/files/pos/bug0061.scala b/test/files/pos/t0061.scala
index dd3f94f30c..dd3f94f30c 100644
--- a/test/files/pos/bug0061.scala
+++ b/test/files/pos/t0061.scala
diff --git a/test/files/pos/bug0064.scala b/test/files/pos/t0064.scala
index c2ce4bf6d0..c2ce4bf6d0 100644
--- a/test/files/pos/bug0064.scala
+++ b/test/files/pos/t0064.scala
diff --git a/test/files/pos/t0066.scala b/test/files/pos/t0066.scala
new file mode 100644
index 0000000000..9317da7165
--- /dev/null
+++ b/test/files/pos/t0066.scala
@@ -0,0 +1,7 @@
+class GBTree[A, B] /*with Map[A, B, GBTree[A,B]]*/ {
+ abstract class Tree[A,B];
+ case class Node[A,B](key:A,value:B,smaller:Node[A,B],bigger:Node[A,B])
+ extends Tree[A,B];
+ case class Nil[A,B]() extends Tree[A,B];
+
+}
diff --git a/test/files/pos/bug0068.scala b/test/files/pos/t0068.scala
index beb2c7c0ab..beb2c7c0ab 100644
--- a/test/files/pos/bug0068.scala
+++ b/test/files/pos/t0068.scala
diff --git a/test/files/pos/t0069.scala b/test/files/pos/t0069.scala
new file mode 100644
index 0000000000..5a8c15cd5a
--- /dev/null
+++ b/test/files/pos/t0069.scala
@@ -0,0 +1,11 @@
+object testCQ {
+ // why does this not work directly
+ case class Thing( name:String, contains:List[ Thing ] );
+
+ /* ... but this one does?
+ abstract class T;
+ case class Thing2( name:String, contains:List[ T ] ) extends T;
+ */
+
+}
+
diff --git a/test/files/pos/bug0076.scala b/test/files/pos/t0076.scala
index 5419cf5154..5419cf5154 100644
--- a/test/files/pos/bug0076.scala
+++ b/test/files/pos/t0076.scala
diff --git a/test/files/pos/bug0081.scala b/test/files/pos/t0081.scala
index 20fd604974..20fd604974 100644
--- a/test/files/pos/bug0081.scala
+++ b/test/files/pos/t0081.scala
diff --git a/test/files/pos/bug0082.scala b/test/files/pos/t0082.scala
index 2b365ca333..2b365ca333 100644
--- a/test/files/pos/bug0082.scala
+++ b/test/files/pos/t0082.scala
diff --git a/test/files/pos/bug0085.scala b/test/files/pos/t0085.scala
index e018afb6ee..e018afb6ee 100644
--- a/test/files/pos/bug0085.scala
+++ b/test/files/pos/t0085.scala
diff --git a/test/files/pos/t0091.scala b/test/files/pos/t0091.scala
new file mode 100644
index 0000000000..d491b7cfb9
--- /dev/null
+++ b/test/files/pos/t0091.scala
@@ -0,0 +1,6 @@
+class Bug {
+ def main(args: Array[String]) = {
+ var msg: String = null; // no bug if "null" instead of "_"
+ val f: PartialFunction[Any, Unit] = { case 42 => msg = "coucou" };
+ }
+}
diff --git a/test/files/pos/bug0093.scala b/test/files/pos/t0093.scala
index d648d773b0..d648d773b0 100644
--- a/test/files/pos/bug0093.scala
+++ b/test/files/pos/t0093.scala
diff --git a/test/files/pos/t0095.scala b/test/files/pos/t0095.scala
new file mode 100644
index 0000000000..71386cf5c7
--- /dev/null
+++ b/test/files/pos/t0095.scala
@@ -0,0 +1,15 @@
+class ParseResult[+T]
+case class Success[+T](t: T) extends ParseResult[T]
+
+abstract class Nonterminal[Output] {
+
+ type SubNonterminal = Nonterminal[T] forSome { type T <: Output }
+
+ def parse: ParseResult[Output]
+
+ def parse1(nts: List[SubNonterminal]): ParseResult[Output] =
+ nts match {
+ case nt::nts => nt.parse match { case Success(so) => Success(so) }
+ case Nil => throw new Error
+ }
+}
diff --git a/test/files/pos/bug0123.scala b/test/files/pos/t0123.scala
index 79f0c907a3..79f0c907a3 100644
--- a/test/files/pos/bug0123.scala
+++ b/test/files/pos/t0123.scala
diff --git a/test/files/pos/bug0204.scala b/test/files/pos/t0204.scala
index 23d36523e9..23d36523e9 100644
--- a/test/files/pos/bug0204.scala
+++ b/test/files/pos/t0204.scala
diff --git a/test/files/pos/t0227.scala b/test/files/pos/t0227.scala
index a52a9798fc..8650350c4a 100644
--- a/test/files/pos/t0227.scala
+++ b/test/files/pos/t0227.scala
@@ -19,7 +19,7 @@ class SA(val settings: Settings) extends Base {
SD
) ::: settings.f(
SC
- )
+ )
}
object SC extends Factory {
diff --git a/test/files/pos/t0231.scala b/test/files/pos/t0231.scala
index 895e780421..17a2eb1c54 100644
--- a/test/files/pos/t0231.scala
+++ b/test/files/pos/t0231.scala
@@ -11,7 +11,7 @@ class Bar extends Foo {
}
}
-object bug extends Application {
+object bug extends App {
new Bar
()
}
diff --git a/test/files/pos/t0288/Foo.scala b/test/files/pos/t0288/Foo.scala
index 778ba65f58..1f7d81327d 100644
--- a/test/files/pos/t0288/Foo.scala
+++ b/test/files/pos/t0288/Foo.scala
@@ -6,4 +6,4 @@ class Foo extends Outer{
val bar = new Inner(); // Shouldn't this work?
-}
+}
diff --git a/test/files/pos/t0288/Outer.java b/test/files/pos/t0288/Outer.java
index bea3e3f8d0..7a3754fb5d 100644
--- a/test/files/pos/t0288/Outer.java
+++ b/test/files/pos/t0288/Outer.java
@@ -6,4 +6,4 @@ public class Outer{
}
-}
+}
diff --git a/test/files/pos/bug0304.scala b/test/files/pos/t0304.scala
index 607a115db2..607a115db2 100644
--- a/test/files/pos/bug0304.scala
+++ b/test/files/pos/t0304.scala
diff --git a/test/files/pos/t0305.scala b/test/files/pos/t0305.scala
new file mode 100644
index 0000000000..4d37a02eb3
--- /dev/null
+++ b/test/files/pos/t0305.scala
@@ -0,0 +1,7 @@
+object Test extends App {
+
+ def foo(is:Int*) = 1;
+ def foo(i:Int) = 2;
+
+ assert(foo( List(3):_* ) == 1)
+}
diff --git a/test/files/pos/bug0422.scala b/test/files/pos/t0422.scala
index cb3ba279d4..cb3ba279d4 100644
--- a/test/files/pos/bug0422.scala
+++ b/test/files/pos/t0422.scala
diff --git a/test/files/pos/t0438.scala b/test/files/pos/t0438.scala
index fa5b7711ff..33b7efeaac 100644
--- a/test/files/pos/t0438.scala
+++ b/test/files/pos/t0438.scala
@@ -1,9 +1,9 @@
class Foo {
- implicit def pair2fun2[A, B, C](f: (A, B) => C) =
+ implicit def pair2fun2[A, B, C](f: (A, B) => C) =
{p: (A, B) => f(p._1, p._2) }
def foo(f: ((Int, Int)) => Int) = f
- def bar(x: Int, y: Int) = x + y
+ def bar(x: Int, y: Int) = x + y
foo({ (x: Int, y: Int) => x + y }) // works
foo(pair2fun2(bar _)) // works
diff --git a/test/files/pos/t0453.scala b/test/files/pos/t0453.scala
index dfacc5eed7..d59a3d22f2 100644
--- a/test/files/pos/t0453.scala
+++ b/test/files/pos/t0453.scala
@@ -1,5 +1,5 @@
object Test {
- val foo = new {
+ val foo = new {
trait Bar
def l () : Bar = { new Bar {} }
}
diff --git a/test/files/pos/t0599.scala b/test/files/pos/t0599.scala
new file mode 100644
index 0000000000..6125b99ce2
--- /dev/null
+++ b/test/files/pos/t0599.scala
@@ -0,0 +1,18 @@
+abstract class FooA {
+ type A <: Ax;
+ abstract class Ax;
+ abstract class InnerA {
+ type B <: A;
+ def doB : B;
+ }
+ }
+ trait FooB extends FooA {
+ type A <: Ax;
+ trait Ax extends super.Ax { def xxx : Int; }
+ abstract class InnerB extends InnerA {
+ // type B <: A;
+ val a : A = doB;
+ a.xxx;
+ doB.xxx;
+ }
+ }
diff --git a/test/files/pos/t0625.scala b/test/files/pos/t0625.scala
new file mode 100644
index 0000000000..bda463d6a6
--- /dev/null
+++ b/test/files/pos/t0625.scala
@@ -0,0 +1,8 @@
+object Test {
+ def idMap[C[_],T](m: { def map[U](f: T => U): C[U] }): C[T] = m.map(t => t)
+
+ def main(args: Array[String]): Unit = {
+ idMap(Some(5))
+ idMap(Responder.constant(5))
+ }
+}
diff --git a/test/files/pos/t0644.scala b/test/files/pos/t0644.scala
new file mode 100644
index 0000000000..a92e2abb53
--- /dev/null
+++ b/test/files/pos/t0644.scala
@@ -0,0 +1,12 @@
+class A {
+ def apply(): Int = 0
+ def update(n: Int) {}
+}
+
+class B extends A {
+ this()
+ this()=1
+ // 644 is wontfix so this is what should work.
+ super.apply()
+ super.update(1)
+}
diff --git a/test/files/pos/t0646.scala b/test/files/pos/t0646.scala
new file mode 100644
index 0000000000..6146e60020
--- /dev/null
+++ b/test/files/pos/t0646.scala
@@ -0,0 +1,21 @@
+object xfor {
+
+ import scala.xml.NodeSeq
+
+ val books =
+ <bks>
+ <title>Blabla</title>
+ <title>Blubabla</title>
+ <title>Baaaaaaalabla</title>
+ </bks>;
+
+ new NodeSeq { val theSeq = books.child } match {
+ case t @ Seq(<title>Blabla</title>) => t
+ }
+
+ //val n: NodeSeq = new NodeSeq { val theSeq = books.child }
+ //n match {
+ // case t @ <title>Blabla</title> => t
+ //}
+
+}
diff --git a/test/files/pos/t0651.scala b/test/files/pos/t0651.scala
deleted file mode 100644
index 76d5df9f9d..0000000000
--- a/test/files/pos/t0651.scala
+++ /dev/null
@@ -1,4 +0,0 @@
-object Reflection1 extends Application {
- case class Element(name: String)
- println(reflect.Code.lift({val e = Element("someName"); e}).tree)
-}
diff --git a/test/files/pos/t0674.scala b/test/files/pos/t0674.scala
index 6884d84bed..589eeec9f3 100644
--- a/test/files/pos/t0674.scala
+++ b/test/files/pos/t0674.scala
@@ -1,4 +1,4 @@
-object Test extends Application {
+object Test extends App {
println(
for(a <- Some(1);
b <- Some(2);
diff --git a/test/files/pos/t0770.scala b/test/files/pos/t0770.scala
index 7a0a2bf9bb..bb438f1918 100644
--- a/test/files/pos/t0770.scala
+++ b/test/files/pos/t0770.scala
@@ -1,7 +1,7 @@
trait A
{
private[this] val p = 5
-
+
def f = (b: Byte) => p
}
diff --git a/test/files/pos/t0774/unrelated.scala b/test/files/pos/t0774/unrelated.scala
index 1efdb2505e..483f836d0c 100644
--- a/test/files/pos/t0774/unrelated.scala
+++ b/test/files/pos/t0774/unrelated.scala
@@ -1,8 +1,8 @@
object Outer {
import Inner._
-
+
deathname
-
+
object Inner {
def deathname: Int = 1
}
diff --git a/test/files/pos/t0786.scala b/test/files/pos/t0786.scala
index f40cf7d2e1..4d9f1d0dc9 100644
--- a/test/files/pos/t0786.scala
+++ b/test/files/pos/t0786.scala
@@ -2,15 +2,15 @@ object ImplicitProblem {
class M[T]
def nullval[T] = null.asInstanceOf[T];
-
+
trait Rep[T] {
def eval: Int
}
-
+
implicit def toRep0(n: Int) = new Rep[Int] {
def eval = 0
}
-
+
implicit def toRepN[T](n: M[T])(implicit f: T => Rep[T]) = new Rep[M[T]] {
def eval = f(nullval[T]).eval + 1
}
@@ -18,11 +18,11 @@ object ImplicitProblem {
def depth[T <% Rep[T]](n: T) = n.eval
def main(args: Array[String]) {
- println(depth(nullval[M[Int]])) // (1) this works
+ println(depth(nullval[M[Int]])) // (1) this works
println(nullval[M[Int]].eval) // (2) this works
-
+
type m = M[Int]
- println(depth(nullval[m])) // (3) this doesn't compile on 2.7.RC1
+ println(depth(nullval[m])) // (3) this doesn't compile on 2.7.RC1
println(nullval[m].eval) // (4) this works
}
diff --git a/test/files/pos/t0971.java b/test/files/pos/t0971.java
deleted file mode 100644
index 160dc2c5af..0000000000
--- a/test/files/pos/t0971.java
+++ /dev/null
@@ -1,4 +0,0 @@
-class A {
- int y = 1, z;
- static Object x = new java.util.HashMap<Object , Object > () ;
-}
diff --git a/test/files/pos/t0999.scala b/test/files/pos/t0999.scala
deleted file mode 100644
index c384820af1..0000000000
--- a/test/files/pos/t0999.scala
+++ /dev/null
@@ -1,5 +0,0 @@
-object A {
- val d: Double = Math.sqrt(5 match {
- case x: Double => x
- })
-}
diff --git a/test/files/pos/t1000.scala b/test/files/pos/t1000.scala
index 38f71863d8..fabef94fff 100644
--- a/test/files/pos/t1000.scala
+++ b/test/files/pos/t1000.scala
@@ -1,3 +1,8 @@
object A {
- println("""This a "raw" string ending with a "double quote"""")
+ println("""This a "raw" string ending with a "double quote"""")
+}
+
+object Test extends App {
+ val xs = Array(1, 2, 3)
+ Console.println(xs.filter(_ >= 0).length)
}
diff --git a/test/files/pos/t1001.scala b/test/files/pos/t1001.scala
index 88321e6e8e..7a06bfa0e2 100644
--- a/test/files/pos/t1001.scala
+++ b/test/files/pos/t1001.scala
@@ -1,6 +1,115 @@
+// was t1001.scala
class Foo;
object Overload{
val foo = classOf[Foo].getConstructors()(0)
foo.getDeclaringClass
}
+
+// was t1001.scala
+
+// I suspect the stack overflow is occurring when the compiler is determining the types for the following line at the end of the file:-
+// val data = List(N26,N25)
+
+abstract class A
+{
+ // commenting out the following line (only) leads to successful compilation
+ protected val data: List[A]
+}
+
+trait B[T <: B[T]] extends A { self: T => }
+
+abstract class C extends A
+{
+ // commenting out the following line (only) leads to successful compilation
+ protected val data: List[C]
+}
+
+abstract class D extends C with B[D] {}
+
+abstract class Ee extends C with B[Ee]
+{
+}
+
+
+object N1 extends D
+{
+ val data = Nil
+}
+
+object N2 extends D
+{
+ val data = Nil
+}
+
+object N5 extends D
+{
+ val data = List(N1)
+}
+
+object N6 extends D
+{
+ val data = List(N1)
+}
+
+object N8 extends D
+{
+ val data = List(N1)
+}
+
+object N10 extends D
+{
+ val data = Nil
+}
+
+object N13 extends D
+{
+ val data = List(N2)
+}
+
+object N14 extends D
+{
+ val data = List(N5,N10,N8)
+}
+
+object N15 extends D
+{
+ val data = List(N14)
+}
+
+object N16 extends D
+{
+ val data = List(N13,N6,N15)
+}
+
+object N17 extends D
+{
+ val data = List(N16)
+}
+
+object N21 extends D
+{
+ val data = List(N16)
+}
+
+object N22 extends D
+{
+ val data = List(N17)
+}
+
+object N25 extends D
+{
+ val data = List(N22)
+}
+
+object N26 extends Ee
+{
+ val data = List(N21,N17)
+}
+
+// Commenting out the following object (only) leads to successful compilation
+object N31 extends Ee
+{
+ // If we use List[C](N26,N25), we achieve successful compilation
+ val data = List[C](N26,N25)
+}
diff --git a/test/files/pos/t1006.scala b/test/files/pos/t1006.scala
new file mode 100644
index 0000000000..5ebf799d63
--- /dev/null
+++ b/test/files/pos/t1006.scala
@@ -0,0 +1,15 @@
+object Test extends App {
+
+def test() {
+
+ abstract class A[T] {
+ def myVal: T
+ }
+
+ class B[T1](value: T1) extends A[T1] {
+ def myVal: T1 = value
+ }
+
+ Console.println(new B[Int](23).myVal)
+}
+}
diff --git a/test/files/pos/t1014.scala b/test/files/pos/t1014.scala
new file mode 100644
index 0000000000..1ac87b225b
--- /dev/null
+++ b/test/files/pos/t1014.scala
@@ -0,0 +1,13 @@
+import scala.xml.{NodeSeq, Elem}
+
+class EO extends App with Moo{
+ def cat = <cat>dog</cat>
+
+ implicit def nodeSeqToFlog(in: Elem): Flog = new Flog(in)
+}
+
+trait Moo {
+ def cat: Flog
+}
+
+class Flog(val in: NodeSeq)
diff --git a/test/files/pos/t1027.scala b/test/files/pos/t1027.scala
index 7854041f10..02ba9a8a3e 100644
--- a/test/files/pos/t1027.scala
+++ b/test/files/pos/t1027.scala
@@ -1,4 +1,4 @@
-object T1027 extends Application {
+object T1027 extends App {
trait Comparable[T <: Comparable[T]] { this: T =>
def < (that: T): Boolean
def <=(that: T): Boolean = this < that || this == that
diff --git a/test/files/pos/t1029.cmds b/test/files/pos/t1029.cmds
new file mode 100644
index 0000000000..06b863dc03
--- /dev/null
+++ b/test/files/pos/t1029.cmds
@@ -0,0 +1,2 @@
+scalac Test_1.scala
+scalac Test_2.scala
diff --git a/test/files/pos/bug1034.scala b/test/files/pos/t1034.scala
index 9d966334a6..9d966334a6 100644
--- a/test/files/pos/bug1034.scala
+++ b/test/files/pos/t1034.scala
diff --git a/test/files/pos/t1035.scala b/test/files/pos/t1035.scala
new file mode 100644
index 0000000000..bd693d9e68
--- /dev/null
+++ b/test/files/pos/t1035.scala
@@ -0,0 +1,32 @@
+//A fatal error or Scala compiler
+// Scala compiler version 2.7.1-final -- (c) 2002-2011 LAMP/EPFL
+// Carlos Loria cloria@artinsoft.com
+// 7/10/2008
+
+class A {
+ var name:String = _
+ def getName() = name
+ def this(name:String, age:Int){this();this.name=name}
+
+}
+
+class B(name:String) extends A(name,0){
+}
+
+class D {
+
+ object A {
+ def unapply(p:A) = Some(p.getName)
+ }
+
+ object B {
+ def unapply(p:B) = Some(p.getName)
+ }
+ def foo(p:Any) = p match {
+ case B(n) => println("B")
+ case A(n) => println("A")
+
+
+ }
+
+}
diff --git a/test/files/pos/t1048.scala b/test/files/pos/t1048.scala
new file mode 100644
index 0000000000..ce57e72391
--- /dev/null
+++ b/test/files/pos/t1048.scala
@@ -0,0 +1,15 @@
+trait T[U] {
+ def x: T[V] forSome { type V <: U }
+}
+
+object T {
+ def unapply[U](t: T[U]): Option[T[V] forSome { type V <: U }] = Some(t.x)
+}
+
+object Test {
+ def f[W](t: T[W]) = t match {
+ case T(T(_)) => ()
+ }
+}
+
+
diff --git a/test/files/pos/t1049.scala b/test/files/pos/t1049.scala
new file mode 100644
index 0000000000..61d99f946c
--- /dev/null
+++ b/test/files/pos/t1049.scala
@@ -0,0 +1,7 @@
+package t1049
+
+abstract class Test {
+ type T <: A
+ class A { self: T => }
+ class B extends A { self: T => }
+}
diff --git a/test/files/pos/t1050.scala b/test/files/pos/t1050.scala
new file mode 100644
index 0000000000..e017e30713
--- /dev/null
+++ b/test/files/pos/t1050.scala
@@ -0,0 +1,10 @@
+package t1050
+
+abstract class A {
+ type T <: scala.ScalaObject
+ class A { this: T =>
+ def b = 3
+ def c = b
+ b
+ }
+}
diff --git a/test/pending/pos/t1053.scala b/test/files/pos/t1053.scala
index 1d4dfb637e..1d4dfb637e 100644
--- a/test/pending/pos/t1053.scala
+++ b/test/files/pos/t1053.scala
diff --git a/test/files/pos/bug1056.scala b/test/files/pos/t1056.scala
index 68f1ff2731..68f1ff2731 100644
--- a/test/files/pos/bug1056.scala
+++ b/test/files/pos/t1056.scala
diff --git a/test/files/pos/t1059.scala b/test/files/pos/t1059.scala
index 659bf375ca..bcd8f0374f 100644
--- a/test/files/pos/t1059.scala
+++ b/test/files/pos/t1059.scala
@@ -25,4 +25,4 @@ object SafeNodeSeq {
})) case _ => None }
-}
+}
diff --git a/test/files/pos/t1070.scala b/test/files/pos/t1070.scala
new file mode 100644
index 0000000000..1622043a85
--- /dev/null
+++ b/test/files/pos/t1070.scala
@@ -0,0 +1,4 @@
+import scala.beans.BeanProperty;
+trait beanpropertytrait {
+ @BeanProperty var myVariable: Long = -1l;
+}
diff --git a/test/files/pos/t1071.scala b/test/files/pos/t1071.scala
new file mode 100644
index 0000000000..7fb802f8b0
--- /dev/null
+++ b/test/files/pos/t1071.scala
@@ -0,0 +1,17 @@
+class C {
+ private val a = 0
+ def getA = a
+}
+
+class D(c: C) {
+ def a = c.getA
+}
+
+object Test {
+ implicit def c2d(c: C): D = new D(c)
+
+ val c = new C
+ (c: D).a // works
+ c.a // error
+}
+
diff --git a/test/files/pos/t1075.scala b/test/files/pos/t1075.scala
new file mode 100644
index 0000000000..5f72957da1
--- /dev/null
+++ b/test/files/pos/t1075.scala
@@ -0,0 +1,17 @@
+class Directory(var dir_ : String)
+{
+ if (!dir_.startsWith("/")) {
+ throw new RuntimeException("Invalid directory")
+ }
+ dir_ = dir_.replaceAll("/{2,}", "/")
+
+ def this(serialized : Array[Byte]) = {
+ this(new String(serialized, "UTF-8"))
+ }
+
+ def dir = dir_
+}
+
+object Test extends Directory("/bab/dkkd//dkkdkd//kdkdk") with App {
+ println(dir)
+}
diff --git a/test/files/pos/bug1085.scala b/test/files/pos/t1085.scala
index c59e657cb2..c59e657cb2 100644
--- a/test/files/pos/bug1085.scala
+++ b/test/files/pos/t1085.scala
diff --git a/test/files/pos/t1090.scala b/test/files/pos/t1090.scala
new file mode 100644
index 0000000000..dca762af4f
--- /dev/null
+++ b/test/files/pos/t1090.scala
@@ -0,0 +1,16 @@
+object Test {
+ trait Manager {
+ type Node;
+ def iterator : Iterator[Node]
+ }
+ trait Core {
+ type Node;
+ trait NodeImpl
+ trait Manager extends Test.Manager {
+ type Node = Core.this.Node
+ }
+ def f(manager : Manager) = manager.iterator.foreach{
+ case node : NodeImpl =>
+ }
+ }
+}
diff --git a/test/files/pos/bug1107.scala b/test/files/pos/t1107.scala
index 0bf40bb4cc..0bf40bb4cc 100644
--- a/test/files/pos/bug1107.scala
+++ b/test/files/pos/t1107.scala
diff --git a/test/files/pos/t1107/O.scala b/test/files/pos/t1107/O.scala
index 0198867704..aa605a6d09 100644
--- a/test/files/pos/t1107/O.scala
+++ b/test/files/pos/t1107/O.scala
@@ -4,10 +4,10 @@ object O
case s: Sub => true
case _ => false
}
-
+
def main(args: Array[String]): Unit = {
val c = new AnyRef with C
c.bob.toString + c.bob2.toString
- }
+ }
}
diff --git a/test/files/pos/t1107/T.scala b/test/files/pos/t1107/T.scala
index 0dff0b94fd..1f3712d529 100644
--- a/test/files/pos/t1107/T.scala
+++ b/test/files/pos/t1107/T.scala
@@ -1,6 +1,6 @@
sealed trait Top
sealed trait Sub extends Top
-trait C {
+trait C {
private object P extends Sub
def bob() = P.getClass
def bob2() = O.d(P)
diff --git a/test/files/pos/bug1119.scala b/test/files/pos/t1119.scala
index 8b36877c49..8b36877c49 100644
--- a/test/files/pos/bug1119.scala
+++ b/test/files/pos/t1119.scala
diff --git a/test/files/pos/t1123.scala b/test/files/pos/t1123.scala
new file mode 100644
index 0000000000..a7b009cbbe
--- /dev/null
+++ b/test/files/pos/t1123.scala
@@ -0,0 +1,11 @@
+
+package test;
+object Test {
+ class Editor {
+ private object extraListener {
+ def h : AnyRef = extraListener
+ }
+ def f = extraListener.h
+ }
+ def main(args : Array[String]) : Unit = (new Editor).f
+}
diff --git a/test/files/pos/bug112606A.scala b/test/files/pos/t112606A.scala
index 5bf532f8dd..5bf532f8dd 100644
--- a/test/files/pos/bug112606A.scala
+++ b/test/files/pos/t112606A.scala
diff --git a/test/files/pos/bug1136.scala b/test/files/pos/t1136.scala
index e505badc9c..e505badc9c 100644
--- a/test/files/pos/bug1136.scala
+++ b/test/files/pos/t1136.scala
diff --git a/test/files/pos/t115.scala b/test/files/pos/t115.scala
new file mode 100644
index 0000000000..0e6a63c168
--- /dev/null
+++ b/test/files/pos/t115.scala
@@ -0,0 +1,9 @@
+class S[A](f: A => A, x: A) {
+ Console.println(f(x));
+}
+class T[B](f: B => B, y: B) extends S((x: B) => f(x), y) {
+}
+object Test extends App {
+ new T[Int](x => x * 2, 1);
+ val f = new S((x: Int) => x, 1);
+}
diff --git a/test/files/pos/bug116.scala b/test/files/pos/t116.scala
index 1e31b71bf0..1e31b71bf0 100644
--- a/test/files/pos/bug116.scala
+++ b/test/files/pos/t116.scala
diff --git a/test/files/pos/t1164.scala b/test/files/pos/t1164.scala
index 3acda88ba9..307ca92c85 100644
--- a/test/files/pos/t1164.scala
+++ b/test/files/pos/t1164.scala
@@ -1,29 +1,29 @@
-object test {
+object test {
- class Foo[a](val arg : a)
-
- object Foo {
- def apply [a](arg : a, right :a) = new Foo[a](arg)
- def unapply [a](m : Foo[a]) = Some (m.arg)
- }
+ class Foo[a](val arg : a)
+ object Foo {
+ def apply [a](arg : a, right :a) = new Foo[a](arg)
+ def unapply [a](m : Foo[a]) = Some (m.arg)
+ }
+
def matchAndGetArgFromFoo[a]( e:Foo[a]):a = {e match { case Foo(x) => x }}
-
-
- // Try the same thing as above but use function as arguemnt to Bar
+
+
+ // Try the same thing as above but use function as argument to Bar
// constructor
-
- type FunIntToA [a] = (int) => a
- class Bar[a] (var f: FunIntToA[a])
-
+
+ type FunIntToA [a] = (Int) => a
+ class Bar[a] (var f: FunIntToA[a])
+
object Bar {
def apply[a](f: FunIntToA[a]) = new Bar[a](f)
def unapply[a](m: Bar[a]) = Some (m.f)
}
-
+
def matchAndGetFunFromBar[a](b:Bar[a]) : FunIntToA[a] = { b match { case Bar(x) => x}}
-
+
}
diff --git a/test/files/pos/t1168.scala b/test/files/pos/t1168.scala
new file mode 100644
index 0000000000..d9f38714b8
--- /dev/null
+++ b/test/files/pos/t1168.scala
@@ -0,0 +1,16 @@
+object Test extends App {
+
+ trait SpecialException {}
+
+ try {
+ throw new Exception
+ } catch {
+ case e : SpecialException => {
+ println("matched SpecialException: "+e)
+ assume(e.isInstanceOf[SpecialException])
+ }
+ case e : Exception => {
+ assume(e.isInstanceOf[Exception])
+ }
+ }
+}
diff --git a/test/files/pos/bug1185.scala b/test/files/pos/t1185.scala
index de453ec8dd..de453ec8dd 100644
--- a/test/files/pos/bug1185.scala
+++ b/test/files/pos/t1185.scala
diff --git a/test/files/pos/bug119.scala b/test/files/pos/t119.scala
index 44a1566756..44a1566756 100644
--- a/test/files/pos/bug119.scala
+++ b/test/files/pos/t119.scala
diff --git a/test/files/pos/bug1203.scala b/test/files/pos/t1203.scala
index 4938621aa9..4938621aa9 100644
--- a/test/files/pos/bug1203.scala
+++ b/test/files/pos/t1203.scala
diff --git a/test/files/pos/t1208.scala b/test/files/pos/t1208.scala
new file mode 100644
index 0000000000..9ac783d39a
--- /dev/null
+++ b/test/files/pos/t1208.scala
@@ -0,0 +1,4 @@
+object Test {
+ object Foo
+ val f: Option[Foo.type] = Some(Foo)
+}
diff --git a/test/files/pos/bug121.scala b/test/files/pos/t121.scala
index 78ddc41ee5..78ddc41ee5 100644
--- a/test/files/pos/bug121.scala
+++ b/test/files/pos/t121.scala
diff --git a/test/files/pos/t1210a.scala b/test/files/pos/t1210a.scala
new file mode 100644
index 0000000000..fbb0a611d6
--- /dev/null
+++ b/test/files/pos/t1210a.scala
@@ -0,0 +1,15 @@
+// both styles of abstraction should behave the same
+// related to 1210 because that bug broke the OO version below
+trait OO {
+ abstract class Test { self =>
+ type T
+
+ val v: Test {type T = self.T} = self.v.v
+ }
+}
+
+trait FP {
+ abstract class Test[T] {
+ val v: Test[T] = v.v
+ }
+}
diff --git a/test/files/pos/t122.scala b/test/files/pos/t122.scala
new file mode 100644
index 0000000000..e3daeef73e
--- /dev/null
+++ b/test/files/pos/t122.scala
@@ -0,0 +1,4 @@
+class L {
+ val List(v:Int, 2) = List(2, v:Int)
+ val (a:Int, b:Int) = (1, a)
+}
diff --git a/test/files/pos/t1226.scala b/test/files/pos/t1226.scala
new file mode 100644
index 0000000000..0af21cbb61
--- /dev/null
+++ b/test/files/pos/t1226.scala
@@ -0,0 +1,8 @@
+package graphs;
+
+abstract class Graph (private[graphs] val mappings : Any){
+}
+
+class Nodes (mappings : Any) extends Graph(mappings) {
+ mappings.toString;
+}
diff --git a/test/files/pos/t1236.scala b/test/files/pos/t1236.scala
new file mode 100644
index 0000000000..7028162ee0
--- /dev/null
+++ b/test/files/pos/t1236.scala
@@ -0,0 +1,14 @@
+trait Empty[E[_]] {
+ def e[A]: E[A]
+}
+
+object T {
+ val ListEmpty = new Empty[List] {
+ def e[A] = Nil
+ }
+
+ def foo[F[_]](q:(String,String)) = "hello"
+ def foo[F[_]](e: Empty[F]) = "world"
+
+ val x = foo[List](ListEmpty)
+} \ No newline at end of file
diff --git a/test/files/pos/t1237.scala b/test/files/pos/t1237.scala
new file mode 100644
index 0000000000..0d1dd05d50
--- /dev/null
+++ b/test/files/pos/t1237.scala
@@ -0,0 +1,14 @@
+class HelloWorld {
+ def main(args: Array[String]) {
+
+ object TypeBool;
+
+ trait Fct {
+ def g(x : Int) = TypeBool // breaks.
+
+ // def g(x : Int) = 3 // fine.
+ }
+
+ ()
+ }
+}
diff --git a/test/files/pos/bug124.scala b/test/files/pos/t124.scala
index 9aed6786f6..9aed6786f6 100644
--- a/test/files/pos/bug124.scala
+++ b/test/files/pos/t124.scala
diff --git a/test/files/pos/t1254/t1254.java b/test/files/pos/t1254/t1254.java
index 25b733cf28..17dc391672 100644
--- a/test/files/pos/t1254/t1254.java
+++ b/test/files/pos/t1254/t1254.java
@@ -11,7 +11,7 @@ class NothingBug3 {
scala.Option<?> o = scala.None$.MODULE$;
test(o);
- None.toLeft(new scala.Function0<Integer>() {
+ None.toLeft(new scala.runtime.AbstractFunction0<Integer>() {
public Integer apply() { return 0; }
});
}
diff --git a/test/files/pos/t1263/Test.java b/test/files/pos/t1263/Test.java
index 0eb43e881a..1718a99090 100644
--- a/test/files/pos/t1263/Test.java
+++ b/test/files/pos/t1263/Test.java
@@ -4,8 +4,9 @@ import java.rmi.RemoteException;
import test.Map;
+@SuppressWarnings("unchecked")
public class Test implements Map<String, String> {
- public Map<String, String>.MapTo plus(String o) {
+ public Map.MapTo plus(String o) {
return null;
}
diff --git a/test/files/pos/t1263/test.scala b/test/files/pos/t1263/test.scala
index 92d8c1cdfa..7ced59083a 100644
--- a/test/files/pos/t1263/test.scala
+++ b/test/files/pos/t1263/test.scala
@@ -2,7 +2,7 @@ package test
trait Map[A, +B] {
def plus(key: A): MapTo = new MapTo(key)
-
+
class MapTo(key: A) {
def arrow [B1 >: B](value: B1) = null
}
diff --git a/test/files/pos/t1272.scala b/test/files/pos/t1272.scala
new file mode 100644
index 0000000000..aab1a886c7
--- /dev/null
+++ b/test/files/pos/t1272.scala
@@ -0,0 +1,9 @@
+object ImplicitTest {
+ implicit val i : Int = 10
+ implicit def a(implicit i : Int) : Array[Byte] = null
+ implicit def b[T](implicit i : Int) : Array[T] = null
+
+ def fn[T](implicit x : T) = 0
+
+ val x = fn[Array[Byte]]
+} \ No newline at end of file
diff --git a/test/files/pos/t1279a.scala b/test/files/pos/t1279a.scala
new file mode 100644
index 0000000000..9212b583d4
--- /dev/null
+++ b/test/files/pos/t1279a.scala
@@ -0,0 +1,40 @@
+// see #13
+// providing the type parameter in the recursive call to all4Impl
+// avoids the problem
+
+
+// covariant linked list
+abstract class M
+{ self =>
+
+ type T
+ final type selfType = M {type T <: self.T}
+ type actualSelfType >: self.type <: selfType
+
+ def next: selfType
+
+
+ // I don't understand why this doesn't compile, but that's a separate matter
+ // error: method all2 cannot be accessed in M.this.selfType
+ // because its instance type => Stream[M{type T <: M.this.selfType#T}]
+ // contains a malformed type: M.this.selfType#T
+ // def all2: Stream[M {type T <: self.T}] = Stream.cons(self: actualSelfType, next.all2)
+
+
+ // compiles successfully
+ // def all3: Stream[M {type T <: self.T}] = all3Impl(self: actualSelfType)
+ // private def all3Impl(first: M {type T <: self.T}): Stream[M {type T <: self.T}] = Stream.cons(first, all3Impl(first.next))
+
+
+
+ def all4: Stream[M {type T <: self.T}] = Unrelated.all4Impl[T](self: actualSelfType)
+}
+
+object Unrelated
+{
+ // TODO!!! fix this bug for real, it compiles successfully, but weird types are inferred
+ // def all4Impl[U](first: M {type T <: U}): Stream[M {type T <: U}] = Stream.cons(first, all4Impl(first.next))
+
+// compiles successfully
+ def all4Impl[U](first: M {type T <: U}): Stream[M {type T <: U}] = Stream.cons(first, all4Impl[U](first.next))
+}
diff --git a/test/files/pos/t1292.scala b/test/files/pos/t1292.scala
new file mode 100644
index 0000000000..3ed153abf2
--- /dev/null
+++ b/test/files/pos/t1292.scala
@@ -0,0 +1,33 @@
+trait Foo[T <: Foo[T, Enum], Enum <: Enumeration] {
+ type StV = Enum#Value
+ type Meta = MegaFoo[T, Enum]
+
+ type Slog <: Enumeration
+
+ def getSingleton: Meta
+}
+
+trait MegaFoo[T <: Foo[T, Enum], Enum <: Enumeration] extends Foo[T, Enum] {
+ def doSomething(what: T, misc: StV, dog: Meta#Event) = None
+ abstract class Event
+ object Event
+
+ def stateEnumeration: Slog
+ def se2: Enum
+}
+
+object E extends Enumeration {
+ val A = Value
+ val B = Value
+}
+
+class RFoo extends Foo[RFoo, E.type] {
+ def getSingleton = MegaRFoo
+
+ type Slog = E.type
+}
+
+object MegaRFoo extends RFoo with MegaFoo[RFoo, E.type] {
+ def stateEnumeration = E
+ def se2 = E
+}
diff --git a/test/files/pos/t1318.scala b/test/files/pos/t1318.scala
new file mode 100644
index 0000000000..3fc6e3060f
--- /dev/null
+++ b/test/files/pos/t1318.scala
@@ -0,0 +1,31 @@
+abstract class F {
+ type mType <: M
+}
+
+abstract class M { self =>
+
+ type mType <: M
+
+ type fType = F {type mType >: self.mType }
+ def fs: List[fType]
+}
+
+abstract class A0 extends M {
+ type mType = A0
+ def fs: List[fType] = Nil
+}
+
+object A extends A0 {}
+
+abstract class B0 extends M {
+ type mType = B0
+ def fs: List[fType] = Nil
+}
+
+object B extends B0 {}
+
+object C {
+ def ab = List(A) ::: List(B)
+ // the following compiles successfully:
+ // def ab = List(A) ::: List[M](B)
+} \ No newline at end of file
diff --git a/test/files/pos/t1380.flags b/test/files/pos/t1380.flags
deleted file mode 100644
index f0b0ef7f51..0000000000
--- a/test/files/pos/t1380.flags
+++ /dev/null
@@ -1 +0,0 @@
--cp pending/pos/t1380/gnujaxp.jar
diff --git a/test/files/pos/t1380/hallo.scala b/test/files/pos/t1380/hallo.scala
deleted file mode 100644
index 27ecd9fb8b..0000000000
--- a/test/files/pos/t1380/hallo.scala
+++ /dev/null
@@ -1,3 +0,0 @@
-object hallo {
- def main(args:Array[String]) = println("hallo")
-}
diff --git a/test/files/pos/bug1381.scala b/test/files/pos/t1381.scala
index 0762891898..0762891898 100644
--- a/test/files/pos/bug1381.scala
+++ b/test/files/pos/t1381.scala
diff --git a/test/files/pos/t1385.scala b/test/files/pos/t1385.scala
new file mode 100644
index 0000000000..59953bcc39
--- /dev/null
+++ b/test/files/pos/t1385.scala
@@ -0,0 +1,3 @@
+@serializable object Test {
+ private def readResolve:AnyRef = this
+}
diff --git a/test/files/pos/t1422_pos.scala b/test/files/pos/t1422_pos.scala
new file mode 100644
index 0000000000..658f5c730d
--- /dev/null
+++ b/test/files/pos/t1422_pos.scala
@@ -0,0 +1,2 @@
+case class A(private val foo:String)
+case class B(protected[this] val foo:String)
diff --git a/test/files/pos/t1439.flags b/test/files/pos/t1439.flags
new file mode 100644
index 0000000000..779916d58f
--- /dev/null
+++ b/test/files/pos/t1439.flags
@@ -0,0 +1 @@
+-unchecked -Xfatal-warnings \ No newline at end of file
diff --git a/test/files/pos/t1439.scala b/test/files/pos/t1439.scala
index ae1fdd10b5..68a7332b2a 100644
--- a/test/files/pos/t1439.scala
+++ b/test/files/pos/t1439.scala
@@ -1,4 +1,5 @@
-class View[C[A]] {}
+// no unchecked warnings
+class View[C[A]] { }
object Test {
null match {
diff --git a/test/files/pos/t1459/AbstractBase.java b/test/files/pos/t1459/AbstractBase.java
new file mode 100755
index 0000000000..492419416c
--- /dev/null
+++ b/test/files/pos/t1459/AbstractBase.java
@@ -0,0 +1,5 @@
+package base;
+
+public abstract class AbstractBase {
+ public abstract void doStuff(String... params); // !!! was Object..
+} \ No newline at end of file
diff --git a/test/files/pos/t1459/App.scala b/test/files/pos/t1459/App.scala
new file mode 100755
index 0000000000..651b285b17
--- /dev/null
+++ b/test/files/pos/t1459/App.scala
@@ -0,0 +1,18 @@
+package foo
+import base._
+
+object App extends Application {
+ class Concrete extends AbstractBase {
+ override def doStuff(params:java.lang.String*): Unit = println("doStuff invoked")
+ }
+
+ val impl = new Concrete
+
+ //succeeds
+ impl.doStuff(null)
+
+ val caller = new Caller
+
+ // fails with AbstractMethodError
+ caller.callDoStuff(impl)
+}
diff --git a/test/files/pos/t1459/Caller.java b/test/files/pos/t1459/Caller.java
new file mode 100755
index 0000000000..4ae51d8c57
--- /dev/null
+++ b/test/files/pos/t1459/Caller.java
@@ -0,0 +1,7 @@
+package base;
+
+public class Caller {
+ public void callDoStuff(AbstractBase impl) {
+ impl.doStuff("abc"); // was new Object());
+ }
+} \ No newline at end of file
diff --git a/test/files/pos/t1480.scala b/test/files/pos/t1480.scala
index 1d9f94d2e9..3dc3062ca0 100644
--- a/test/files/pos/t1480.scala
+++ b/test/files/pos/t1480.scala
@@ -1,6 +1,6 @@
class Foo{
def compare(newP : Any, oldP : Any) : Boolean = (newP,oldP) match {
- case (newP : AnyRef, oldP : AnyRef) if newP == oldP => newP == oldP
- case (newS : Symbol, oldS: Symbol) if newS == oldS => newS == oldS
+ case (newP : AnyRef, oldP : AnyRef) if newP == oldP => newP == oldP
+ case (newS : Symbol, oldS: Symbol) if newS == oldS => newS == oldS
}
}
diff --git a/test/files/pos/bug151.scala b/test/files/pos/t151.scala
index 86667b49f7..86667b49f7 100644
--- a/test/files/pos/bug151.scala
+++ b/test/files/pos/t151.scala
diff --git a/test/files/pos/t1560.scala b/test/files/pos/t1560.scala
index 49cdaaed6a..fb5592016a 100644
--- a/test/files/pos/t1560.scala
+++ b/test/files/pos/t1560.scala
@@ -1,13 +1,13 @@
-object Test extends Application {
-
+object Test extends App {
+
trait C[T] {
def t: T
}
-
+
def b: Option[C[x] forSome { type x }] = null
-
+
def c = b match {
case Some(b) => b.t
}
-
+
}
diff --git a/test/files/pos/t1565.scala b/test/files/pos/t1565.scala
new file mode 100644
index 0000000000..030086c541
--- /dev/null
+++ b/test/files/pos/t1565.scala
@@ -0,0 +1,18 @@
+object Bug1565 {
+ object X0 { 0; (a : Int, b : Int, c : Int) => println(List(a, b)) }
+ def x() = { 0; (a : Int, b : Int) => println(List(a, b)) ; 0 }
+
+ (a : Int, b : Int) => println(List(a, b))
+
+ // various function syntaxes to exercise the parser
+ val xs = List(1,2,3)
+ xs.filter(x => x < 2)
+ xs.filter((x) => x < 2)
+ xs.filter { x => x < 2 }
+ xs.filter { _ < 2 }
+ xs.filter (_ < 2)
+ xs.foreach { e =>
+ val buf0 = e + 1
+ buf0
+ }
+}
diff --git a/test/files/pos/t1569.scala b/test/files/pos/t1569.scala
new file mode 100644
index 0000000000..e5f9553268
--- /dev/null
+++ b/test/files/pos/t1569.scala
@@ -0,0 +1,5 @@
+object Bug {
+ class C { type T }
+ def foo(x: Int)(y: C)(z: y.T) {}
+ foo(3)(new C { type T = String })("hello")
+} \ No newline at end of file
diff --git a/test/files/pos/bug159.scala b/test/files/pos/t159.scala
index 95c47da23a..95c47da23a 100644
--- a/test/files/pos/bug159.scala
+++ b/test/files/pos/t159.scala
diff --git a/test/files/pos/t1591_pos.scala b/test/files/pos/t1591_pos.scala
new file mode 100644
index 0000000000..4f55d7ce19
--- /dev/null
+++ b/test/files/pos/t1591_pos.scala
@@ -0,0 +1,7 @@
+trait A
+
+object Test {
+ lazy val a = new A {
+ object Zenek
+ }
+}
diff --git a/test/files/pos/t1591b.scala b/test/files/pos/t1591b.scala
new file mode 100644
index 0000000000..84372bb084
--- /dev/null
+++ b/test/files/pos/t1591b.scala
@@ -0,0 +1,13 @@
+import scala.tools.nsc._
+
+class SemanticTokens(val compiler: Global) {
+ import compiler._
+
+ def build() = ErrorType
+
+ class Process {
+ def f() = analyzer
+ // or to crash the compiler instead of a nice message,
+ // def f() = analyzer underlying _
+ }
+}
diff --git a/test/files/pos/bug160.scala b/test/files/pos/t160.scala
index 91ac2ba842..91ac2ba842 100644
--- a/test/files/pos/bug160.scala
+++ b/test/files/pos/t160.scala
diff --git a/test/files/pos/bug1626.scala b/test/files/pos/t1626.scala
index 200be47430..200be47430 100644
--- a/test/files/pos/bug1626.scala
+++ b/test/files/pos/t1626.scala
diff --git a/test/files/pos/t1642/test.scala b/test/files/pos/t1642b.scala
index 72e53b0c9a..72e53b0c9a 100644
--- a/test/files/pos/t1642/test.scala
+++ b/test/files/pos/t1642b.scala
diff --git a/test/files/pos/t1693.scala b/test/files/pos/t1693.scala
new file mode 100644
index 0000000000..f3615f4756
--- /dev/null
+++ b/test/files/pos/t1693.scala
@@ -0,0 +1,9 @@
+object Test {
+ class Foo
+ class SomeOps(x : Foo) { def foo(x: String) = 1 }
+ class OtherOps(x : Foo) { def foo(x: Int) = 1 }
+ implicit def mkSomeOps(x: Foo) : SomeOps = new SomeOps(x)
+ implicit def mkOtherOps(x: Foo) : OtherOps = new OtherOps(x)
+
+ (new Foo).foo(1)
+} \ No newline at end of file
diff --git a/test/files/pos/t1711/Seq.scala b/test/files/pos/t1711/Seq.scala
index c18f05cd73..5f426ea0f7 100644
--- a/test/files/pos/t1711/Seq.scala
+++ b/test/files/pos/t1711/Seq.scala
@@ -3,7 +3,7 @@ package com
object Sequence {
def filteringFunction[V](filter: V => Boolean): List[V] => List[V] = {
- def include(v: V) =
+ def include(v: V) =
filter(v)
(l: List[V]) => l.filter(include)
}
diff --git a/test/files/pos/t1722-A.scala b/test/files/pos/t1722-A.scala
index d059bf22f8..9e522a5059 100644
--- a/test/files/pos/t1722-A.scala
+++ b/test/files/pos/t1722-A.scala
@@ -1,8 +1,8 @@
sealed trait Top
trait C {
private object P extends Top
-}
-/*
+}
+/*
$ scala -e 'new AnyRef with C'
error: error while loading Top, class file '/private/tmp/bobobo/./Top.class' is broken
(error reading Scala signature of /private/tmp/bobobo/./Top.class: malformed Scala signature of Top at 185; reference value P of trait C refers to nonexisting symbol.)
diff --git a/test/files/pos/t1722/Test.scala b/test/files/pos/t1722/Test.scala
index f236d3fdc4..5685d8f40a 100755
--- a/test/files/pos/t1722/Test.scala
+++ b/test/files/pos/t1722/Test.scala
@@ -1,5 +1,5 @@
package t1722
object Test {
- val x = new AnyRef with C
+ val x = new AnyRef with C
}
diff --git a/test/files/pos/t1722/Top.scala b/test/files/pos/t1722/Top.scala
index 4ac52412aa..cec4c531f9 100755
--- a/test/files/pos/t1722/Top.scala
+++ b/test/files/pos/t1722/Top.scala
@@ -3,8 +3,8 @@ package t1722
sealed trait Top
trait C {
private object P extends Top
-}
-/*
+}
+/*
$ scala -e 'new AnyRef with C'
error: error while loading Top, class file '/private/tmp/bobobo/./Top.class' is broken
(error reading Scala signature of /private/tmp/bobobo/./Top.class: malformed Scala signature of Top at 185; reference value P of trait C refers to nonexisting symbol.)
diff --git a/test/files/pos/t1745/J.java b/test/files/pos/t1745/J.java
index 8444eabb24..d95efe8e6f 100644
--- a/test/files/pos/t1745/J.java
+++ b/test/files/pos/t1745/J.java
@@ -1,9 +1,9 @@
-class J {
+class J {
S1 s1;
S2 s2;
-
+
String s = bar(S3.foo(), S3.bar("def"));
-
+
private String bar(String s1, String s2) {
return s1 + s2;
}
diff --git a/test/files/pos/bug175.scala b/test/files/pos/t175.scala
index 4c0eb28ba0..4c0eb28ba0 100644
--- a/test/files/pos/bug175.scala
+++ b/test/files/pos/t175.scala
diff --git a/test/files/pos/t1751.cmds b/test/files/pos/t1751.cmds
new file mode 100644
index 0000000000..d4a4898ffd
--- /dev/null
+++ b/test/files/pos/t1751.cmds
@@ -0,0 +1,3 @@
+javac SuiteClasses.java
+scalac A2_1.scala
+scalac A1_2.scala
diff --git a/test/files/pos/t1756.scala b/test/files/pos/t1756.scala
index 4f7202114c..2e09c8a94a 100755
--- a/test/files/pos/t1756.scala
+++ b/test/files/pos/t1756.scala
@@ -1,5 +1,5 @@
-/**
+/**
This is a tricky issue which has to do with the fact that too much conflicting
type information is propagated into a single implicit search, where the intended
solution applies two implicit searches.
@@ -15,7 +15,7 @@ expected type from x+, because the lhs x is still typed as a Poly[A].
This means that the argument of the implicit conversion is typechecked
with expected type A with Poly[A]. And no solution is found.
-To solve this, I added a fallback scheme similar to implicit arguents:
+To solve this, I added a fallback scheme similar to implicit arguments:
When an implicit view that adds a method matching given arguments and result
type fails, try again without the result type.
*/
@@ -34,21 +34,21 @@ class Poly[C <: Ring[C]](val c: C) extends Ring[Poly[C]] {
def *(that: Poly[C]) = new Poly(this.c*that.c)
}
-object Test extends Application {
-
+object Test extends App {
+
implicit def coef2poly[C <: Ring[C]](c: C): Poly[C] = new Poly(c)
val a = new A
val x = new Poly(new A)
-
+
println(x+a) // works
println(a+x) // works
-
+
val y = new Poly(new Poly(new A))
-
+
println(x+y*x) // works
println(x*y+x) // works
println(y*x+x) // works
-
+
println(x+x*y) // failed before
}
diff --git a/test/files/pos/t1761.scala b/test/files/pos/t1761.scala
index a3ceeea815..2af7280734 100644
--- a/test/files/pos/t1761.scala
+++ b/test/files/pos/t1761.scala
@@ -3,7 +3,7 @@ import scala.xml._
class Foo {
val elements: Seq[Node] = Nil
val innerTransform: PartialFunction[Elem, String] = {
- case Elem(_, l: String, _, _, _ @ _*) if elements.exists(_.label == l) =>
+ case Elem(_, l: String, _, _, _ @ _*) if elements.exists(_.label == l) =>
l
}
}
diff --git a/test/files/pos/bug177.scala b/test/files/pos/t177.scala
index 33b4de9264..33b4de9264 100644
--- a/test/files/pos/bug177.scala
+++ b/test/files/pos/t177.scala
diff --git a/test/files/pos/t1782.cmds b/test/files/pos/t1782.cmds
new file mode 100644
index 0000000000..61f3d3788e
--- /dev/null
+++ b/test/files/pos/t1782.cmds
@@ -0,0 +1,2 @@
+javac Ann.java Days.java ImplementedBy.java
+scalac Test_1.scala
diff --git a/test/files/pos/t1782/Test_1.scala b/test/files/pos/t1782/Test_1.scala
index e61ef8eaf5..6467a74c29 100644
--- a/test/files/pos/t1782/Test_1.scala
+++ b/test/files/pos/t1782/Test_1.scala
@@ -10,7 +10,7 @@ class Provider
@Ann(Days.Friday) def someMethod() = ()
// #2103
- @scala.reflect.BeanProperty
+ @scala.beans.BeanProperty
@Ann(value = Days.Sunday)
val t2103 = "test"
}
diff --git a/test/files/pos/t1798.scala b/test/files/pos/t1798.scala
index 1624e3025e..93df61e844 100644
--- a/test/files/pos/t1798.scala
+++ b/test/files/pos/t1798.scala
@@ -2,7 +2,7 @@ object Foo { private def bar(): Int = 55 }
class Foo(x: Int) { def this() = this(Foo.bar()) }
/*
- * scalac28 a.scala
+ * scalac28 a.scala
a.scala:2: error: method bar cannot be accessed in object Foo
class Foo(x: Int) { def this() = this(Foo.bar()) }
^
diff --git a/test/files/pos/bug183.scala b/test/files/pos/t183.scala
index d7ed27f730..d7ed27f730 100644
--- a/test/files/pos/bug183.scala
+++ b/test/files/pos/t183.scala
diff --git a/test/pending/pos/t1836/J.java b/test/files/pos/t1836/J.java
index a009a59e21..a009a59e21 100644
--- a/test/pending/pos/t1836/J.java
+++ b/test/files/pos/t1836/J.java
diff --git a/test/pending/pos/t1836/S.scala b/test/files/pos/t1836/S.scala
index 88ce1063e9..88ce1063e9 100644
--- a/test/pending/pos/t1836/S.scala
+++ b/test/files/pos/t1836/S.scala
diff --git a/test/files/pos/t1840/J.java b/test/files/pos/t1840/J.java
index fd98b6c4a5..a697596fdd 100644
--- a/test/files/pos/t1840/J.java
+++ b/test/files/pos/t1840/J.java
@@ -1,4 +1,4 @@
package p;
-class J {
- J() {}
+class J {
+ J() {}
}
diff --git a/test/files/pos/bug1843.scala b/test/files/pos/t1843.scala
index cc73353b75..cc73353b75 100644
--- a/test/files/pos/bug1843.scala
+++ b/test/files/pos/t1843.scala
diff --git a/test/files/pos/bug1858.scala b/test/files/pos/t1858.scala
index c06e73e7e6..c06e73e7e6 100644
--- a/test/files/pos/bug1858.scala
+++ b/test/files/pos/t1858.scala
diff --git a/test/files/pos/bug1909.scala b/test/files/pos/t1909.scala
index 01213f62a3..01213f62a3 100644
--- a/test/files/pos/bug1909.scala
+++ b/test/files/pos/t1909.scala
diff --git a/test/files/pos/bug1909b.scala b/test/files/pos/t1909b-pos.scala
index b914bee366..b914bee366 100644
--- a/test/files/pos/bug1909b.scala
+++ b/test/files/pos/t1909b-pos.scala
diff --git a/test/files/pos/t1942.cmds b/test/files/pos/t1942.cmds
new file mode 100644
index 0000000000..c14311042a
--- /dev/null
+++ b/test/files/pos/t1942.cmds
@@ -0,0 +1,2 @@
+scalac A_1.scala
+scalac Test_2.scala
diff --git a/test/files/pos/t1974.scala b/test/files/pos/t1974.scala
new file mode 100644
index 0000000000..3d28478177
--- /dev/null
+++ b/test/files/pos/t1974.scala
@@ -0,0 +1,20 @@
+object Broken {
+ private var map = Map[Class[_], String]()
+
+ def addToMap(c : Class[_], s : String) = map += (c -> s)
+ def fetch(c : Class[_]) = map(c)
+}
+
+object Works {
+ private var map = Map[Class[_], String]()
+
+ def addToMap(c : Class[_], s : String) = map += ((c, s))
+ def fetch(c : Class[_]) = map(c)
+}
+
+object Works2 {
+ private var map = Map[Class[_], String]()
+
+ def addToMap(c : Class[_], s : String) = map += ((c : Class[_]) -> s)
+ def fetch(c : Class[_]) = map(c)
+} \ No newline at end of file
diff --git a/test/pending/pos/t1996.scala b/test/files/pos/t1996.scala
index 2730128196..2730128196 100644
--- a/test/pending/pos/t1996.scala
+++ b/test/files/pos/t1996.scala
diff --git a/test/files/pos/bug201.scala b/test/files/pos/t201.scala
index b0c6b8da43..b0c6b8da43 100644
--- a/test/files/pos/bug201.scala
+++ b/test/files/pos/t201.scala
diff --git a/test/files/pos/t2018.scala b/test/files/pos/t2018.scala
new file mode 100644
index 0000000000..1736c394c9
--- /dev/null
+++ b/test/files/pos/t2018.scala
@@ -0,0 +1,15 @@
+class A {
+ val b = new B
+
+ def getChildren = List(new A).iterator
+
+ class B {
+ private def check = true
+
+ private def getAncestor(p: A): A = {
+ val c = (p.getChildren.find(_.b.check)) match {case Some(d) => d case None => p}
+
+ if (c == p) p else c.b.getAncestor(c)
+ }
+ }
+} \ No newline at end of file
diff --git a/test/files/pos/t2023.scala b/test/files/pos/t2023.scala
index 21c6fc96a6..de3e848fbd 100644
--- a/test/files/pos/t2023.scala
+++ b/test/files/pos/t2023.scala
@@ -3,11 +3,11 @@ trait C[A]
object C {
implicit def ipl[A](implicit from: A => Ordered[A]): C[A] = null
}
-
+
object P {
def foo[A](i: A, j: A)(implicit c: C[A]): Unit = ()
}
-
+
class ImplicitChainTest {
def testTrivial: Unit = {
P.foo('0', '9')
diff --git a/test/files/pos/t2060.scala b/test/files/pos/t2060.scala
index 2c701150e4..cf7250f545 100755
--- a/test/files/pos/t2060.scala
+++ b/test/files/pos/t2060.scala
@@ -4,7 +4,7 @@
* line':
*
* val failure = 1.0 + new Op[Int]
- *
+ *
* we reduce the problem to finding a function from Double to
* {+: _ >: Op[Int] <: Any}, that is, a method which takes
* an argument which is an Op[Int] or a supertype thereof.
diff --git a/test/files/pos/t2081.scala b/test/files/pos/t2081.scala
new file mode 100644
index 0000000000..d772c02dc2
--- /dev/null
+++ b/test/files/pos/t2081.scala
@@ -0,0 +1,11 @@
+object ScalaForRubyists {
+ class RichInt(n: Int) {
+ def days = 1000*60*60*24*n
+ }
+
+ implicit def RichInt(n: Int): RichInt = new RichInt(n)
+
+ val x = 10.days
+ // a couple parser corner cases I wanted not to break
+ val y = 5.e0 + 5e7
+}
diff --git a/test/files/pos/t2082.scala b/test/files/pos/t2082.scala
index 3a160612fe..38937d78fb 100755
--- a/test/files/pos/t2082.scala
+++ b/test/files/pos/t2082.scala
@@ -1,10 +1,10 @@
trait Mapper[T <: Mapper[T]]
-trait KeyedMapper[KeyType, T <: KeyedMapper[KeyType, T]] extends Mapper[T]
+trait KeyedMapper[KeyType, T <: KeyedMapper[KeyType, T]] extends Mapper[T]
-trait KeyedMetaMapper[KeyType, T <: KeyedMapper[KeyType, T]]
+trait KeyedMetaMapper[KeyType, T <: KeyedMapper[KeyType, T]]
trait MappedForeignKey[KeyType, Owner <: Mapper[Owner], Other <: KeyedMapper[KeyType, Other]]
@@ -19,19 +19,19 @@ class TestRun extends KeyedMapper[Long, TestRun] with IdPK {
object TestRun extends TestRun with KeyedMetaMapper[Long, TestRun]
class MetaTestSubject extends TestSubject with KeyedMetaMapper[Long, TestSubject]
-object TestSubject extends MetaTestSubject
+object TestSubject extends MetaTestSubject
object Main {
-
+
def oneToOneJoin[PType <: KeyedMapper[Long, PType] with IdPK,
CType <: KeyedMapper[Long, CType] with IdPK,
- CMetaType <: CType with KeyedMetaMapper[Long, CType],
+ CMetaType <: CType with KeyedMetaMapper[Long, CType],
FKType <: MappedForeignKey[Long, PType, CType]]
- (parents: List[PType], metaMapper: CMetaType, keyGetter: (PType) => FKType ):
+ (parents: List[PType], metaMapper: CMetaType, keyGetter: (PType) => FKType ):
Map[Long, CType] = Map.empty
-
+
def callIt {
- oneToOneJoin[TestRun, TestSubject, MetaTestSubject,
+ oneToOneJoin[TestRun, TestSubject, MetaTestSubject,
MappedForeignKey[Long, TestRun, TestSubject]](
List(), TestSubject, (tr: TestRun) => tr.testSubject)
}
diff --git a/test/files/pos/t2094.scala b/test/files/pos/t2094.scala
new file mode 100644
index 0000000000..ff142117b2
--- /dev/null
+++ b/test/files/pos/t2094.scala
@@ -0,0 +1,31 @@
+object Test extends App {
+ // compiles:
+ Map[Int, Value](
+ 0 -> KnownType(classOf[Object]),
+ 1 -> UnknownValue())
+
+ // does not compile:
+ Map(
+ 0 -> KnownType(classOf[Object]),
+ 1 -> UnknownValue())
+
+ // Experiment.scala:10: error: type mismatch;
+ // found : (Int, KnownType)
+ // required: (Int, Product with Value{def getType: Option[java.lang.Class[_$$2]]}) where type _$$2
+ // 0 -> KnownType(classOf[Object]),
+ // ^
+ // one error found
+}
+sealed trait Value {
+ def getType: Option[Class[_]]
+}
+
+case class UnknownValue() extends Value {
+ def getType = None
+ // compiles if changed to:
+ // def getType: Option[Class[_]] = None
+}
+
+case class KnownType(typ: Class[_]) extends Value {
+ def getType = Some(typ)
+} \ No newline at end of file
diff --git a/test/files/pos/t210.scala b/test/files/pos/t210.scala
new file mode 100644
index 0000000000..f0b907aa5d
--- /dev/null
+++ b/test/files/pos/t210.scala
@@ -0,0 +1,17 @@
+trait Lang1 {
+ trait Exp;
+ trait Visitor { def f(left: Exp): Unit }
+ class Eval1 extends Visitor { self: Visitor =>
+ def f(left: Exp) = ()
+ }
+}
+
+trait Lang2 extends Lang1 {
+ class Eval2 extends Eval1 { self: Visitor => }
+}
+/*
+object Main with App {
+ val lang2 = new Lang2 {}
+ val eval = new lang2.Eval2
+}
+*/
diff --git a/test/files/pos/t211.scala b/test/files/pos/t211.scala
new file mode 100644
index 0000000000..d51c9706da
--- /dev/null
+++ b/test/files/pos/t211.scala
@@ -0,0 +1,8 @@
+trait A;
+trait B;
+class Foo extends A with B { self: A with B => }
+object Test extends App {
+ new Foo();
+ Console.println("t211 completed");
+}
+
diff --git a/test/files/pos/t2119.scala b/test/files/pos/t2119.scala
new file mode 100644
index 0000000000..b9cb4d9c6d
--- /dev/null
+++ b/test/files/pos/t2119.scala
@@ -0,0 +1,4 @@
+class A {
+ val orig = new java.util.ArrayList[String]
+ val copy = new java.util.ArrayList(orig)
+}
diff --git a/test/files/pos/bug2127.scala b/test/files/pos/t2127.scala
index d6244c14a2..d6244c14a2 100644
--- a/test/files/pos/bug2127.scala
+++ b/test/files/pos/t2127.scala
diff --git a/test/files/pos/t2130-1.scala b/test/files/pos/t2130-1.scala
new file mode 100644
index 0000000000..8dd61c4d30
--- /dev/null
+++ b/test/files/pos/t2130-1.scala
@@ -0,0 +1,5 @@
+package foo
+
+package object bar {
+ case class Bippy(x: Int) { }
+}
diff --git a/test/files/pos/t2130-2.scala b/test/files/pos/t2130-2.scala
new file mode 100644
index 0000000000..464f5e0d8e
--- /dev/null
+++ b/test/files/pos/t2130-2.scala
@@ -0,0 +1,17 @@
+package foo
+
+package object bar {
+ class Bippy(x: Int) {
+ class Ding
+ object Ding
+ case class Dong(x: Float)
+ }
+ object Bippy {
+ class Dingus
+ object Dingus
+ case class Dongus(x: Float)
+
+ def apply(xs: Int*) = new Bippy(xs.sum)
+ def apply() = new Bippy(5)
+ }
+}
diff --git a/test/files/pos/t2133.scala b/test/files/pos/t2133.scala
new file mode 100644
index 0000000000..99bac5c38b
--- /dev/null
+++ b/test/files/pos/t2133.scala
@@ -0,0 +1,18 @@
+trait Foo {
+ object bar {
+ private[this] def fn() = 5
+ }
+}
+
+trait Foo2 {
+ object bip {
+ def fn() = 10
+ }
+}
+
+class Bob extends AnyRef with Foo with Foo2 {
+ import bip._
+ import bar._
+
+ def go() = fn()
+}
diff --git a/test/files/pos/t2168.scala b/test/files/pos/t2168.scala
new file mode 100644
index 0000000000..845c5b7361
--- /dev/null
+++ b/test/files/pos/t2168.scala
@@ -0,0 +1,6 @@
+object Test extends App {
+ def foo1(x: AnyRef) = x match { case x: Function0[_] => x() }
+ def foo2(x: AnyRef) = x match { case x: Function0[Any] => x() }
+}
+
+
diff --git a/test/files/pos/t2171.flags b/test/files/pos/t2171.flags
new file mode 100644
index 0000000000..eb4d19bcb9
--- /dev/null
+++ b/test/files/pos/t2171.flags
@@ -0,0 +1 @@
+-optimise \ No newline at end of file
diff --git a/test/files/pos/t2171.scala b/test/files/pos/t2171.scala
new file mode 100644
index 0000000000..a5663c96cd
--- /dev/null
+++ b/test/files/pos/t2171.scala
@@ -0,0 +1,7 @@
+final object test {
+ def logIgnoredException(msg: => String) =
+ try 0 catch { case ex => println(msg) }
+
+ def main (args: Array[String]): Unit =
+ while (true) logIgnoredException ("...")
+}
diff --git a/test/files/pos/t2179.scala b/test/files/pos/t2179.scala
new file mode 100755
index 0000000000..89e22b6e2a
--- /dev/null
+++ b/test/files/pos/t2179.scala
@@ -0,0 +1,3 @@
+object Test {
+ (Nil:List[List[Double]]).reduceLeft((_: Any, _: Any) => Nil.indices.map(_ => 0d))
+}
diff --git a/test/files/pos/t2187-2.scala b/test/files/pos/t2187-2.scala
new file mode 100644
index 0000000000..3f2742dd89
--- /dev/null
+++ b/test/files/pos/t2187-2.scala
@@ -0,0 +1,7 @@
+class Test {
+ def test[A](list: List[A]) = list match {
+ case Seq(x, y) => "xy"
+ case Seq(x) => "x"
+ case _ => "something else"
+ }
+} \ No newline at end of file
diff --git a/test/files/pos/t2187.scala b/test/files/pos/t2187.scala
new file mode 100644
index 0000000000..8a33531541
--- /dev/null
+++ b/test/files/pos/t2187.scala
@@ -0,0 +1,7 @@
+// bug #2187
+object Test extends App {
+ def foo(xs:List[String]) = xs match {
+ case Seq(x) => x
+ case Seq(x,y) => ""
+ }
+}
diff --git a/test/files/pos/t2208.scala b/test/files/pos/t2208_pos.scala
index f1a521b14c..f1a521b14c 100644
--- a/test/files/pos/t2208.scala
+++ b/test/files/pos/t2208_pos.scala
diff --git a/test/files/pos/t2234.scala b/test/files/pos/t2234.scala
index cea657b16f..218e9f5e53 100644
--- a/test/files/pos/t2234.scala
+++ b/test/files/pos/t2234.scala
@@ -1,4 +1,4 @@
-object Test extends Application {
+object Test extends App {
val res0 = 1 #:: Stream.empty
res0 match { case 1 #:: xs => xs }
}
diff --git a/test/files/pos/bug2260.scala b/test/files/pos/t2260.scala
index 4e4cc5ab2c..4e4cc5ab2c 100644
--- a/test/files/pos/bug2260.scala
+++ b/test/files/pos/t2260.scala
diff --git a/test/files/pos/t2261.scala b/test/files/pos/t2261.scala
index aac5c9e0fd..af24234235 100644
--- a/test/files/pos/t2261.scala
+++ b/test/files/pos/t2261.scala
@@ -5,5 +5,5 @@ object Test {
x = List(1,2,3)
// the problem here was that somehow the type variable that was used to infer the type argument for List.apply
// would accumulate several conflicting constraints
- // can't reproduce with
+ // can't reproduce with
} \ No newline at end of file
diff --git a/test/files/pos/t2281.scala b/test/files/pos/t2281.scala
new file mode 100644
index 0000000000..3515d2e2e6
--- /dev/null
+++ b/test/files/pos/t2281.scala
@@ -0,0 +1,41 @@
+import scala.collection.mutable.ArrayBuffer
+
+class A {
+ def f(x: Boolean) = if (x) <br/><br/> else <br/>
+}
+
+class B {
+ def splitSentences(text : String) : ArrayBuffer[String] = {
+ val outarr = new ArrayBuffer[String]
+ var outstr = new StringBuffer
+ var prevspace = false
+ val ctext = text.replaceAll("\n+","\n")
+ ctext foreach {c =>
+ outstr append c
+ if(c == '.' || c == '!' || c == '?' || c == '\n' || c == ':' || c == ';' || (prevspace && c == '-') ){
+ outarr += outstr.toString
+ outstr = new StringBuffer
+ }
+ if(c == '\n'){
+ outarr += "\n\n"
+ }
+ prevspace = c == ' '
+ }
+ if(outstr.length > 0){
+ outarr += outstr.toString
+ }
+ outarr
+ }
+
+ def spanForSentence(x : String,picktext : String) =
+ if(x == "\n\n"){
+ <br/><br/>
+ }else{
+ <span class='clicksentence' style={if(x == picktext) "background-color: yellow" else ""}>{x}</span>
+ }
+
+ def selectableSentences(text : String, picktext : String) = {
+ val sentences = splitSentences(text)
+ sentences.map(x => spanForSentence(x,picktext))
+ }
+} \ No newline at end of file
diff --git a/test/files/pos/bug229.scala b/test/files/pos/t229.scala
index 72ddfa74fe..72ddfa74fe 100644
--- a/test/files/pos/bug229.scala
+++ b/test/files/pos/t229.scala
diff --git a/test/files/pos/t2305.scala b/test/files/pos/t2305.scala
new file mode 100644
index 0000000000..d0b103fdba
--- /dev/null
+++ b/test/files/pos/t2305.scala
@@ -0,0 +1,26 @@
+import java.util.ArrayList
+
+trait Bind[Z[_]]
+
+class MySerializable[X] extends java.io.Serializable
+
+object Bind {
+ implicit val JavaArrayListBind: Bind[ArrayList] = new Bind[ArrayList] {}
+ implicit val MySerializableBind: Bind[MySerializable] = new Bind[MySerializable] {}
+}
+
+object works {
+ // this works fine:
+ def runbind(implicit bind: Bind[MySerializable]) {}
+ runbind
+}
+
+object breaks {
+ def runbind(implicit bind: Bind[ArrayList]) {}
+ runbind
+ /*java.lang.AssertionError: assertion failed: java.io.Serializable
+ at scala.Predef$.assert(Predef.scala:107)
+ at scala.tools.nsc.symtab.Types$TypeRef.transform(Types.scala:1417)
+ at scala.tools.nsc.symtab.Types$TypeRef.baseType(Types.scala:1559)
+ */
+}
diff --git a/test/files/pos/t2310.scala b/test/files/pos/t2310.scala
new file mode 100644
index 0000000000..e08411a3df
--- /dev/null
+++ b/test/files/pos/t2310.scala
@@ -0,0 +1,38 @@
+import scala.Stream._
+
+object consistencyError {
+ /* this gives an error:
+ Consistency problem compiling (virtual file)!
+ Trying to call method body%1(List(scala.collection.immutable.Stream[A])) with arguments (List(tp2, temp6, temp5))
+ case (l #:: ls, rs) => None
+ ^
+ scala.tools.nsc.symtab.Types$TypeError: too many arguments for method body%1: (val rs: scala.collection.immutable.Stream[A])None.type
+
+ two errors found
+ vss(0) =
+ args = List(tp2, temp6, temp5)
+ vss(1) = value rs, value ls, value l
+ args = List(tp2, temp6, temp5)
+ targets(0) = FinalState(,scala.None)
+ targets(1) = FinalState(,scala.None)
+ labels(1) = method body%1
+ labels(0) = method body%0
+ bx = 1
+ label.tpe = (val rs: scala.collection.immutable.Stream[A])None.type
+ */
+ def crash[A](lefts: Stream[A], rights: Stream[A]) = (lefts, rights) match {
+ case (Stream.Empty, Stream.Empty) => None
+ case (l #:: ls, rs) => None
+ }
+
+ // These work
+ // def works1[A](lefts: Stream[A]) = lefts match {
+ // case Stream.Empty => None
+ // case l #:: ls => None
+ // }
+ //
+ // def works2[A](lefts: Stream[A], rights: Stream[A]) = (lefts, rights) match {
+ // case (Stream.Empty, Stream.Empty) => None
+ // case (ls, rs) => None
+ // }
+}
diff --git a/test/files/pos/t2331.scala b/test/files/pos/t2331.scala
new file mode 100644
index 0000000000..9a15b5c2a9
--- /dev/null
+++ b/test/files/pos/t2331.scala
@@ -0,0 +1,11 @@
+trait C {
+ def m[T]: T
+}
+
+object Test {
+ val o /*: C --> no crash*/ = new C {
+ def m[T]: Nothing /*: T --> no crash*/ = error("omitted")
+ }
+
+ o.m[Nothing]
+} \ No newline at end of file
diff --git a/test/files/pos/t2399.scala b/test/files/pos/t2399.scala
new file mode 100644
index 0000000000..b009f7856b
--- /dev/null
+++ b/test/files/pos/t2399.scala
@@ -0,0 +1,14 @@
+trait That1[A]
+trait That2[A, R <: That2[A, R]]
+
+trait T[A, This >: Null <: That1[A] with T[A, This]] extends That2[A, This] {
+ self: This =>
+
+ private var next: This = _
+ def isEmpty = next eq null
+
+ def length: Int = {
+ def loop(x: This, cnt: Int): Int = if (x.isEmpty) cnt else loop(x.next, cnt + 1)
+ loop(self, 0)
+ }
+} \ No newline at end of file
diff --git a/test/files/pos/t2409/J.java b/test/files/pos/t2409/J.java
new file mode 100644
index 0000000000..6b7c45ff6d
--- /dev/null
+++ b/test/files/pos/t2409/J.java
@@ -0,0 +1,4 @@
+class J {
+ static class J2 { }
+ J(J2 j2) { }
+}
diff --git a/test/files/pos/t2409/t2409.scala b/test/files/pos/t2409/t2409.scala
new file mode 100644
index 0000000000..5775008fc4
--- /dev/null
+++ b/test/files/pos/t2409/t2409.scala
@@ -0,0 +1 @@
+object S { new J(null) } \ No newline at end of file
diff --git a/test/files/pos/t2413/TestJava.java b/test/files/pos/t2413/TestJava.java
new file mode 100644
index 0000000000..252c01fbc0
--- /dev/null
+++ b/test/files/pos/t2413/TestJava.java
@@ -0,0 +1,7 @@
+package pack;
+
+public class TestJava {
+ protected String repeatParam(String ... items) {
+ return "nothing";
+ }
+}
diff --git a/test/files/pos/t2413/TestScalac.scala b/test/files/pos/t2413/TestScalac.scala
new file mode 100644
index 0000000000..6992a30f2c
--- /dev/null
+++ b/test/files/pos/t2413/TestScalac.scala
@@ -0,0 +1,23 @@
+import pack.TestJava
+
+class Foo extends TestJava {
+
+ // THIS METHOD YIELDS TO CRASH
+/* def foomethod : Option[String] => Unit = {
+ case None =>
+ val path = repeatParam("s","a","b","c")
+ ()
+ case Some(error) =>
+ ()
+ }
+
+ // THIS IS OK
+ def foomethod2 : String = repeatParam("s","a");
+
+ // THIS IS OK
+ val aVal = repeatParam("1","2","3") */
+
+ // THIS YIELDS TO CRASH
+ for (a <- 1 to 4 ; anotherVal = repeatParam("1","2","3"))
+ yield anotherVal
+}
diff --git a/test/files/pos/t2421.scala b/test/files/pos/t2421.scala
index 0d01be29fc..26e485c160 100644
--- a/test/files/pos/t2421.scala
+++ b/test/files/pos/t2421.scala
@@ -7,8 +7,8 @@ object Test {
implicit val forcibleInt: (Int <~< Forcible[Int]) = error("")
def headProxy[P <: Forcible[Int]](implicit w: Int <~< P): P = error("")
-
- headProxy
- // trivial[Int] should not be considered a valid implicit, since w would have type Int <~< Int,
+
+ headProxy
+ // trivial[Int] should not be considered a valid implicit, since w would have type Int <~< Int,
// and headProxy's type parameter P cannot be instantiated to Int
} \ No newline at end of file
diff --git a/test/files/pos/t2421_delitedsl.scala b/test/files/pos/t2421_delitedsl.scala
index a05887023a..ad6afa7bd8 100644
--- a/test/files/pos/t2421_delitedsl.scala
+++ b/test/files/pos/t2421_delitedsl.scala
@@ -1,10 +1,10 @@
trait DeliteDSL {
abstract class <~<[-From, +To] extends (From => To)
- implicit def trivial[A]: A <~< A = new (A <~< A) {def apply(x: A) = x}
+ implicit def trivial[A]: A <~< A = new (A <~< A) {def apply(x: A) = x}
trait Forcible[T]
object Forcible {
- def factory[T](f: T => Forcible[T]) = new (T <~< Forcible[T]){def apply(x: T) = f(x)}
+ def factory[T](f: T => Forcible[T]) = new (T <~< Forcible[T]){def apply(x: T) = f(x)}
}
case class DeliteInt(x: Int) extends Forcible[Int]
@@ -22,16 +22,16 @@ trait DeliteDSL {
// If T is already a proxy (it is forcible), the compiler should use
// forcibleIdentity to deduce that P=T. If T is Int, the compiler
// should use intToForcible to deduce that P=DeliteInt.
- //
+ //
// Without this feature, the user must write 'xs.proxyOfFirst[DeliteInt]',
// with the feature they can write 'xs.proxyOfFirst', which is shorter and
// avoids exposing internal DELITE types to the world.
object Test {
- val x = new DeliteCollection(List(1,2,3)).headProxy
+ val x = new DeliteCollection(List(1,2,3)).headProxy
// inferred: val x: Forcible[Int] = new DeliteCollection[Int](List.apply[Int](1, 2, 3)).headProxy[Forcible[Int]](forcibleInt);
- val xAlready = new DeliteCollection(List(DeliteInt(1),DeliteInt(2),DeliteInt(3))).headProxy
+ val xAlready = new DeliteCollection(List(DeliteInt(1),DeliteInt(2),DeliteInt(3))).headProxy
// inferred: val xAlready: DeliteInt = new DeliteCollection[DeliteInt](List.apply[DeliteInt](DeliteInt(1), DeliteInt(2), DeliteInt(3))).headProxy[DeliteInt](trivial[DeliteInt]);
}
} \ No newline at end of file
diff --git a/test/files/pos/t2421b_pos.scala b/test/files/pos/t2421b_pos.scala
new file mode 100644
index 0000000000..8b848abb75
--- /dev/null
+++ b/test/files/pos/t2421b_pos.scala
@@ -0,0 +1,19 @@
+object Test {
+ class A
+ class B
+ class C
+ class F[X]
+
+ def f(implicit aa: F[A]) = println(aa)
+
+ implicit def a : F[A] = new F[A]()
+ implicit def b[X <: B] = new F[X]()
+
+ f
+}
+/* bug:
+error: ambiguous implicit values:
+ both method b in object Test1 of type [X <: Test1.B]Test1.F[X]
+ and method a in object Test1 of type => Test1.F[Test1.A]
+ match expected type Test1.F[Test1.A]
+*/
diff --git a/test/files/pos/t2421c.scala b/test/files/pos/t2421c.scala
new file mode 100644
index 0000000000..755e6a39f0
--- /dev/null
+++ b/test/files/pos/t2421c.scala
@@ -0,0 +1,17 @@
+object Test {
+ class A
+ class B
+ class C
+ class F[X]
+
+ def f(implicit aa: F[A]) = println(aa)
+
+ implicit def a : F[A] = new F[A]()
+
+ // generalised from t2421b to verify we check enough
+ class G[X]
+ implicit def g[X] = new G[X]()
+ implicit def b[X <: B](implicit mx: G[X]) = new F[X]()
+
+ f
+} \ No newline at end of file
diff --git a/test/files/pos/t2425.scala b/test/files/pos/t2425.scala
index 403f1a18d7..477d5467aa 100755
--- a/test/files/pos/t2425.scala
+++ b/test/files/pos/t2425.scala
@@ -1,6 +1,6 @@
trait B
class D extends B
-object Test extends Application {
+object Test extends App {
def foo[T](bar: T) = {
bar match {
case _: Array[Array[_]] => println("array 2d")
diff --git a/test/files/pos/t2429.scala b/test/files/pos/t2429.scala
index 9b9cb89de7..3ea3f9e2a5 100755
--- a/test/files/pos/t2429.scala
+++ b/test/files/pos/t2429.scala
@@ -1,8 +1,8 @@
object Msg {
trait T
-
+
trait TSeq
-
+
object TSeq {
implicit def fromSeq(s: Seq[T]): TSeq = error("stub")
}
diff --git a/test/files/pos/t2433/A.java b/test/files/pos/t2433/A.java
new file mode 100755
index 0000000000..340690c402
--- /dev/null
+++ b/test/files/pos/t2433/A.java
@@ -0,0 +1,4 @@
+class A223 extends B223.Inner {
+ static class Inner {}
+ void foo() {}
+} \ No newline at end of file
diff --git a/test/files/pos/t2433/B.java b/test/files/pos/t2433/B.java
new file mode 100755
index 0000000000..151dd71ca1
--- /dev/null
+++ b/test/files/pos/t2433/B.java
@@ -0,0 +1,4 @@
+class B223 {
+ static class Inner {}
+ void m(A223.Inner x) {}
+} \ No newline at end of file
diff --git a/test/files/pos/t2433/Test.scala b/test/files/pos/t2433/Test.scala
new file mode 100755
index 0000000000..02fd89b646
--- /dev/null
+++ b/test/files/pos/t2433/Test.scala
@@ -0,0 +1,3 @@
+object Test {
+ (new A223).foo()
+}
diff --git a/test/files/pos/t2441pos.scala b/test/files/pos/t2441pos.scala
new file mode 100644
index 0000000000..25eb2232c9
--- /dev/null
+++ b/test/files/pos/t2441pos.scala
@@ -0,0 +1,8 @@
+abstract class A {
+ private def foo = List(1, 2)
+}
+trait B extends A {
+ private def foo = List("a", "b")
+ // However it compiles correctly if the type is given:
+ // private def foo: List[String] = List("a", "b")
+}
diff --git a/test/files/pos/t2444.scala b/test/files/pos/t2444.scala
index 6f07dcf92d..a052270196 100644
--- a/test/files/pos/t2444.scala
+++ b/test/files/pos/t2444.scala
@@ -2,14 +2,14 @@ object Test {
trait Foo
- class Bar {
+ class Bar {
object baz extends Foo
}
- def frob[P1, P2<:Foo](f:P1 => P2) = ()
+ def frob[P1, P2<:Foo](f:P1 => P2) = ()
def main(args:Array[String]) : Unit = {
- frob((p:Bar) => p.baz)
+ frob((p:Bar) => p.baz)
}
}
diff --git a/test/files/pos/bug245.scala b/test/files/pos/t245.scala
index 570ac4178d..570ac4178d 100644
--- a/test/files/pos/bug245.scala
+++ b/test/files/pos/t245.scala
diff --git a/test/files/pos/t2454.scala b/test/files/pos/t2454.scala
new file mode 100644
index 0000000000..00f2e6f677
--- /dev/null
+++ b/test/files/pos/t2454.scala
@@ -0,0 +1,25 @@
+package am;
+
+trait One[M[_]] {
+ val x : Int
+}
+
+trait Two[M[_,_]] {
+ val x : Int
+}
+
+object Test {
+ // Works.
+ val x = new Two[Map] {
+ val x = 5
+ }
+
+ val o = new One[java.util.List] {
+ val x = 1
+ }
+
+ // Does not work
+ val y = new Two[java.util.concurrent.ConcurrentHashMap] {
+ val x = 3
+ }
+}
diff --git a/test/files/pos/t2464.cmds b/test/files/pos/t2464.cmds
new file mode 100644
index 0000000000..ca733ef23d
--- /dev/null
+++ b/test/files/pos/t2464.cmds
@@ -0,0 +1,3 @@
+javac JavaOne.java
+scalac ScalaOne_1.scala
+scalac t2464_2.scala
diff --git a/test/files/pos/t2464/JavaOne.java b/test/files/pos/t2464/JavaOne.java
new file mode 100644
index 0000000000..ff36868a0e
--- /dev/null
+++ b/test/files/pos/t2464/JavaOne.java
@@ -0,0 +1,5 @@
+class ClassTwo {
+ public static class Child {
+ public void func2() {return ;}
+ }
+}
diff --git a/test/files/pos/t2464/ScalaOne_1.scala b/test/files/pos/t2464/ScalaOne_1.scala
new file mode 100644
index 0000000000..0271b9ce72
--- /dev/null
+++ b/test/files/pos/t2464/ScalaOne_1.scala
@@ -0,0 +1,6 @@
+class ScalaClassOne extends ClassTwo.Child {
+ def func4() = {
+ func2
+ }
+}
+
diff --git a/test/files/pos/t2464/t2464_2.scala b/test/files/pos/t2464/t2464_2.scala
new file mode 100644
index 0000000000..13a52c952b
--- /dev/null
+++ b/test/files/pos/t2464/t2464_2.scala
@@ -0,0 +1,3 @@
+object Test {
+ val c1 = new ScalaClassOne
+}
diff --git a/test/files/pos/t247.scala b/test/files/pos/t247.scala
new file mode 100644
index 0000000000..983b7998a9
--- /dev/null
+++ b/test/files/pos/t247.scala
@@ -0,0 +1,26 @@
+class Order[t](less:(t,t) => Boolean,equal:(t,t) => Boolean) {}
+
+trait Map[A, B] extends scala.collection.Map[A, B] {
+ val factory:MapFactory[A]
+}
+abstract class MapFactory[A] {
+ def Empty[B]:Map[A,B];
+}
+
+class TreeMapFactory[KEY](newOrder:Order[KEY]) extends MapFactory[KEY] {
+ val order = newOrder;
+ def Empty[V] = new TreeMap[KEY,V](new TreeMapFactory[KEY](order));
+}
+
+class Tree[KEY,Entry](order:Order[KEY]) {
+ def size =0;
+}
+
+class TreeMap[KEY,VALUE](_factory:TreeMapFactory[KEY]) extends Tree[KEY,Pair[KEY,VALUE]](_factory.order) with scala.collection.DefaultMap[KEY, VALUE] with Map[KEY, VALUE] {
+ val factory = _factory
+ val order = _factory.order;
+ def this(newOrder:Order[KEY]) = this(new TreeMapFactory[KEY](newOrder));
+ def get(key:KEY) = null;
+ def iterator:Iterator[Pair[KEY,VALUE]] = null;
+ override def size = super[Tree].size
+}
diff --git a/test/files/pos/t2484.scala b/test/files/pos/t2484.scala
new file mode 100755
index 0000000000..7d1b7cb03c
--- /dev/null
+++ b/test/files/pos/t2484.scala
@@ -0,0 +1,17 @@
+class Admin extends javax.swing.JApplet {
+ val jScrollPane = new javax.swing.JScrollPane (null, 0, 0)
+ def t2484: Unit = {
+ scala.concurrent.ops.spawn {jScrollPane.synchronized {
+ def someFunction () = {}
+ //scala.concurrent.ops.spawn {someFunction ()}
+ jScrollPane.addComponentListener (new java.awt.event.ComponentAdapter {override def componentShown (e: java.awt.event.ComponentEvent) = {
+ someFunction (); jScrollPane.removeComponentListener (this)}})
+ }}
+ }
+}
+// t2630.scala
+object Test {
+ def meh(xs: List[Any]) {
+ xs map { x => (new AnyRef {}) }
+ }
+}
diff --git a/test/files/pos/bug2486.scala b/test/files/pos/t2486.scala
index 69fe4c127e..69fe4c127e 100644
--- a/test/files/pos/bug2486.scala
+++ b/test/files/pos/t2486.scala
diff --git a/test/files/pos/t2504.scala b/test/files/pos/t2504.scala
index 67f8226852..0abe7dd13e 100755
--- a/test/files/pos/t2504.scala
+++ b/test/files/pos/t2504.scala
@@ -1,5 +1,5 @@
object Test {
val ys: Iterable[_] = Array("abc")
- val xs = Array("abc")
+ val xs = Array("abc")
xs sameElements Array("abc")
}
diff --git a/test/files/pos/t252.scala b/test/files/pos/t252.scala
new file mode 100644
index 0000000000..d51b5511eb
--- /dev/null
+++ b/test/files/pos/t252.scala
@@ -0,0 +1,17 @@
+abstract class Module {}
+
+abstract class T {
+ type moduleType <: Module
+ val module: moduleType
+}
+
+abstract class Base {
+ type mType = Module
+ type tType = T { type moduleType <: mType }
+}
+
+abstract class Derived extends Base {
+ def f(inputs: List[tType]): Unit = {
+ for (t <- inputs; m = t.module) { }
+ }
+}
diff --git a/test/files/pos/t2545.scala b/test/files/pos/t2545.scala
index 6ad994223c..b4238fb718 100755
--- a/test/files/pos/t2545.scala
+++ b/test/files/pos/t2545.scala
@@ -1,6 +1,6 @@
trait Frog[T] {
- def hello: T
- def size: Int
+ def hello: T
+ def size: Int
}
trait OnlyWithFrogs {
diff --git a/test/files/pos/t2569/Child.scala b/test/files/pos/t2569/Child.scala
index 64f4dc172f..3d7f4248b5 100644
--- a/test/files/pos/t2569/Child.scala
+++ b/test/files/pos/t2569/Child.scala
@@ -1,9 +1,9 @@
package varargs
-
+
class Child extends Parent {
-
+
override def concatenate(strings: String*): String =
strings map("\"" + _ + "\"") mkString("(", ", ", ")")
-
+
}
diff --git a/test/files/pos/t2569/Parent.java b/test/files/pos/t2569/Parent.java
index 89421becbd..133f2ee567 100644
--- a/test/files/pos/t2569/Parent.java
+++ b/test/files/pos/t2569/Parent.java
@@ -1,7 +1,7 @@
package varargs;
-
+
public class Parent {
-
+
public String concatenate(String... strings) {
StringBuilder builder = new StringBuilder();
for (String s : strings) {
@@ -9,5 +9,5 @@ package varargs;
}
return builder.toString();
}
-
+
}
diff --git a/test/files/pos/t261-ab.scala b/test/files/pos/t261-ab.scala
new file mode 100644
index 0000000000..df641e811a
--- /dev/null
+++ b/test/files/pos/t261-ab.scala
@@ -0,0 +1,9 @@
+trait A { val foo: String = "A" }
+trait B {
+ private val foo: String = "B"
+ def f = println(foo)
+}
+object Test extends App with B with A {
+ println(foo) // prints "A", as expected
+ f // prints "B", as expected
+}
diff --git a/test/files/pos/t261-ba.scala b/test/files/pos/t261-ba.scala
new file mode 100644
index 0000000000..6c9c5b10b7
--- /dev/null
+++ b/test/files/pos/t261-ba.scala
@@ -0,0 +1,9 @@
+trait B {
+ private val foo: String = "B"
+ def f = println(foo)
+}
+trait A { val foo: String = "A" }
+object Test extends App with B with A {
+ println(foo) // prints "A", as expected
+ f // prints "B", as expected
+}
diff --git a/test/files/pos/t2610.scala b/test/files/pos/t2610.scala
new file mode 100644
index 0000000000..8dd4cde66e
--- /dev/null
+++ b/test/files/pos/t2610.scala
@@ -0,0 +1,17 @@
+package mada; package defects; package tests
+
+package object bbb {
+ def bar = ()
+ aaa.foo // value foo is not a member of package mada.defects.tests.aaa
+}
+
+package object aaa {
+ def foo = ()
+}
+
+/* compiles successfully if placed here..
+package object bbb {
+ def bar = ()
+ aaa.foo // value foo is not a member of package mada.defects.tests.aaa
+}
+*/ \ No newline at end of file
diff --git a/test/files/pos/t2619.scala b/test/files/pos/t2619.scala
new file mode 100644
index 0000000000..565bc9572b
--- /dev/null
+++ b/test/files/pos/t2619.scala
@@ -0,0 +1,80 @@
+abstract class F {
+ final def apply(x: Int): AnyRef = null
+}
+abstract class AbstractModule {
+ def as: List[AnyRef]
+ def ms: List[AbstractModule]
+ def fs: List[F] = Nil
+ def rs(x: Int): List[AnyRef] = fs.map(_(x))
+}
+abstract class ModuleType1 extends AbstractModule {}
+abstract class ModuleType2 extends AbstractModule {}
+
+object ModuleAE extends ModuleType1 {
+ def as = Nil
+ def ms = Nil
+}
+object ModuleAF extends ModuleType2 {
+ def as = Nil
+ def ms = List(ModuleAE)
+}
+object ModuleAG extends ModuleType1 {
+ def as = List("")
+ def ms = Nil
+}
+object ModuleAI extends ModuleType1 {
+ def as = Nil
+ def ms = List(ModuleAE)
+}
+object ModuleAK extends ModuleType2 {
+ def as = Nil
+ def ms = List(ModuleAF)
+}
+object ModuleAL extends ModuleType1 {
+ def as = Nil
+ def ms = List(
+ ModuleAG,
+ ModuleAI
+ )
+}
+object ModuleAM extends ModuleType1 {
+ def as = Nil
+ def ms = List(
+ ModuleAL,
+ ModuleAE
+ ) ::: List(ModuleAK)
+}
+object ModuleBE extends ModuleType1 {
+ def as = Nil
+ def ms = Nil
+}
+object ModuleBF extends ModuleType2 {
+ def as = Nil
+ def ms = List(ModuleBE)
+}
+object ModuleBG extends ModuleType1 {
+ def as = List("")
+ def ms = Nil
+}
+object ModuleBI extends ModuleType1 {
+ def as = Nil
+ def ms = List(ModuleBE)
+}
+object ModuleBK extends ModuleType2 {
+ def as = Nil
+ def ms = List(ModuleBF)
+}
+object ModuleBL extends ModuleType1 {
+ def as = Nil
+ def ms = List(
+ ModuleBG,
+ ModuleBI
+ )
+}
+object ModuleBM extends ModuleType1 {
+ def as = Nil
+ def ms = List(
+ ModuleBL,
+ ModuleBE
+ ) ::: List(ModuleBK)
+} \ No newline at end of file
diff --git a/test/files/pos/t262.scala b/test/files/pos/t262.scala
new file mode 100644
index 0000000000..b81490977c
--- /dev/null
+++ b/test/files/pos/t262.scala
@@ -0,0 +1,14 @@
+object O {
+ abstract class A {
+ def f:A;
+ }
+ class B extends A {
+ def f = if(1 == 2) new C else new D;
+ }
+ class C extends A {
+ def f = this;
+ }
+ class D extends A {
+ def f = this;
+ }
+}
diff --git a/test/files/pos/t2624.scala b/test/files/pos/t2624.scala
new file mode 100644
index 0000000000..76f0e30369
--- /dev/null
+++ b/test/files/pos/t2624.scala
@@ -0,0 +1,4 @@
+object Test {
+ List(1).map(identity(_))
+ List(1).map(identity) // this didn't typecheck before the fix
+}
diff --git a/test/files/pos/t2635.scala b/test/files/pos/t2635.scala
new file mode 100755
index 0000000000..7cd5531356
--- /dev/null
+++ b/test/files/pos/t2635.scala
@@ -0,0 +1,16 @@
+abstract class Base
+
+object Test
+{
+ def run(c: Class[_ <: Base]): Unit = {
+ }
+
+ def main(args: Array[String]): Unit =
+ {
+ val sc: Option[Class[_ <: Base]] = Some(classOf[Base])
+ sc match {
+ case Some(c) => run(c)
+ case None =>
+ }
+ }
+}
diff --git a/test/files/pos/t2660.scala b/test/files/pos/t2660.scala
new file mode 100644
index 0000000000..b1908b201b
--- /dev/null
+++ b/test/files/pos/t2660.scala
@@ -0,0 +1,25 @@
+package hoho
+
+class G
+
+class H extends G
+
+class A[T](x: T) {
+
+ def this(y: G, z: T) = {
+ this(z)
+ print(1)
+ }
+
+ def this(z: H, h: T) = {
+ this(h)
+ print(2)
+ }
+}
+
+object T {
+ def main(args: Array[String]) {
+ implicit def g2h(g: G): H = new H
+ new A(new H, 23)
+ }
+} \ No newline at end of file
diff --git a/test/files/pos/t2664.scala b/test/files/pos/t2664.scala
new file mode 100644
index 0000000000..7b667d0106
--- /dev/null
+++ b/test/files/pos/t2664.scala
@@ -0,0 +1,9 @@
+package pkg1 {
+ class C {
+ private[pkg1] def foo: Int = 1
+ }
+
+ trait T extends C {
+ private[pkg1] abstract override def foo = super.foo + 1
+ }
+}
diff --git a/test/files/pos/t2665.scala b/test/files/pos/t2665.scala
new file mode 100644
index 0000000000..108daf509a
--- /dev/null
+++ b/test/files/pos/t2665.scala
@@ -0,0 +1,3 @@
+object Test {
+ val x: Unit = Array("")
+} \ No newline at end of file
diff --git a/test/files/pos/t2667.scala b/test/files/pos/t2667.scala
new file mode 100644
index 0000000000..b214cc7f37
--- /dev/null
+++ b/test/files/pos/t2667.scala
@@ -0,0 +1,6 @@
+object A {
+ def foo(x: Int, y: Int*): Int = 45
+ def foo[T](x: T*): Int = 55
+
+ val x: Unit = foo(23, 23f)
+} \ No newline at end of file
diff --git a/test/files/pos/t2669.scala b/test/files/pos/t2669.scala
new file mode 100644
index 0000000000..e34f08f0f5
--- /dev/null
+++ b/test/files/pos/t2669.scala
@@ -0,0 +1,28 @@
+// #2629, #2639, #2669
+object Test2669 {
+
+ def test[T](l: java.util.ArrayList[_ <: T]) = 1
+ test(new java.util.ArrayList[String]())
+
+}
+
+import java.util.ArrayList
+
+object Test2629 {
+ def main(args: Array[String]): Unit = {
+ val l = new ArrayList[String](1)
+ val m = new ArrayList(l)
+
+ println(l.size)
+ println(m.size)
+ }
+}
+
+
+import java.util.Vector
+
+// scalac cannot detect lack of type params, but then throws AssertionError later:
+class TVector2639 {
+ val b = new Vector // this line passed without error detected
+ val a = new Vector(1) // this line caused throwing AssertionError when scalac
+}
diff --git a/test/files/pos/t267.scala b/test/files/pos/t267.scala
new file mode 100644
index 0000000000..7e5876eae9
--- /dev/null
+++ b/test/files/pos/t267.scala
@@ -0,0 +1,55 @@
+package expAbstractData
+
+/** A base class consisting of
+ * - a root trait (i.e. abstract class) `Exp' with an `eval' function
+ * - an abstract type `exp' bounded by `Exp'
+ * - a concrete instance class `Num' of `Exp' for numeric literals
+ */
+trait Base {
+ type exp <: Exp
+
+ trait Exp {
+ def eval: Int
+ }
+ class Num(v: Int) extends Exp { self: exp =>
+ val value = v
+ def eval = value
+ }
+}
+
+object testBase extends App with Base {
+ type exp = Exp
+ val term = new Num(2);
+ Console.println(term.eval)
+}
+
+/** Data extension: An extension of `Base' with `Plus' expressions
+ */
+trait BasePlus extends Base {
+ class Plus(l: exp, r: exp) extends Exp { self: exp =>
+ val left = l
+ val right = r
+ def eval = left.eval + right.eval
+ }
+}
+
+/** Operation extension: An extension of `Base' with 'show' methods.
+ */
+trait Show extends Base {
+ type exp <: Exp1
+
+ trait Exp1 extends Exp {
+ def show: String
+ }
+ class Num1(v: Int) extends Num(v) with Exp1 { self: exp with Num1 =>
+ def show = value.toString()
+ }
+}
+
+/** Operation extension: An extension of `BasePlus' with 'show' methods.
+ */
+trait ShowPlus extends BasePlus with Show {
+ class Plus1(l: exp, r: exp) extends Plus(l, r) with Exp1 { self: exp with Plus1 =>
+ def show = left.show + " + " + right.show
+ }
+}
diff --git a/test/files/pos/t2683.scala b/test/files/pos/t2683.scala
new file mode 100755
index 0000000000..4ba34b554a
--- /dev/null
+++ b/test/files/pos/t2683.scala
@@ -0,0 +1,7 @@
+class A
+class B extends A
+
+object Test {
+ val c: Class[_ <: A] = Class.forName("B").asSubclass(classOf[A])
+ val x: Option[Class[_ <: A]] = Some(3).map { case _ => c }
+}
diff --git a/test/files/pos/t2691.scala b/test/files/pos/t2691.scala
new file mode 100644
index 0000000000..94012a8177
--- /dev/null
+++ b/test/files/pos/t2691.scala
@@ -0,0 +1,16 @@
+object Breakdown {
+ def unapplySeq(x: Int): Some[List[String]] = Some(List("", "there"))
+}
+object Test {
+ 42 match {
+ case Breakdown("") => // needed to trigger bug
+ case Breakdown("", who) => println ("hello " + who)
+ }
+}
+object Test2 {
+ 42 match {
+ case Breakdown("") => // needed to trigger bug
+ case Breakdown("foo") => // needed to trigger bug
+ case Breakdown("", who) => println ("hello " + who)
+ }
+}
diff --git a/test/files/pos/t2693.scala b/test/files/pos/t2693.scala
new file mode 100644
index 0000000000..97732cf081
--- /dev/null
+++ b/test/files/pos/t2693.scala
@@ -0,0 +1,6 @@
+class A {
+ trait T[A]
+ def usetHk[T[_], A](ta: T[A]) = 0
+ usetHk(new T[Int]{}: T[Int])
+ usetHk(new T[Int]{}) // fails with: found: java.lang.Object with T[Int], required: ?T[ ?A ]
+} \ No newline at end of file
diff --git a/test/files/pos/t2698.scala b/test/files/pos/t2698.scala
new file mode 100644
index 0000000000..0e2662de61
--- /dev/null
+++ b/test/files/pos/t2698.scala
@@ -0,0 +1,10 @@
+import scala.collection._
+import scala.util.regexp._
+
+abstract class S2 {
+ val lang: WordExp
+ type __labelT = lang._labelT
+
+ var deltaq: Array[__labelT] = _
+ def delta1 = immutable.Map(deltaq.zipWithIndex: _*)
+}
diff --git a/test/files/pos/t2708.scala b/test/files/pos/t2708.scala
new file mode 100644
index 0000000000..19485bf4ce
--- /dev/null
+++ b/test/files/pos/t2708.scala
@@ -0,0 +1 @@
+class Foo(@volatile var v: Int)
diff --git a/test/files/pos/t2726.cmds b/test/files/pos/t2726.cmds
new file mode 100644
index 0000000000..5fcb18bfbb
--- /dev/null
+++ b/test/files/pos/t2726.cmds
@@ -0,0 +1,2 @@
+scalac SQLBuilder_1.scala
+scalac test_2.scala
diff --git a/test/files/pos/t2726/SQLBuilder_1.scala b/test/files/pos/t2726/SQLBuilder_1.scala
new file mode 100644
index 0000000000..7b3e3d8322
--- /dev/null
+++ b/test/files/pos/t2726/SQLBuilder_1.scala
@@ -0,0 +1,7 @@
+class SQLBuilder extends SQLBuilder.Segment
+
+object SQLBuilder {
+ trait Segment
+}
+
+
diff --git a/test/files/pos/t2726/t2726_2.scala b/test/files/pos/t2726/t2726_2.scala
new file mode 100644
index 0000000000..e738143aeb
--- /dev/null
+++ b/test/files/pos/t2726/t2726_2.scala
@@ -0,0 +1,3 @@
+object SQuery2Test {
+ new SQLBuilder
+}
diff --git a/test/files/pos/t2741/2741_1.scala b/test/files/pos/t2741/2741_1.scala
new file mode 100644
index 0000000000..d47ed3b6cb
--- /dev/null
+++ b/test/files/pos/t2741/2741_1.scala
@@ -0,0 +1,9 @@
+trait Partial {
+ type Apply[XYZ] = List[XYZ]
+}
+trait MA[M[_]]
+trait MAs {
+ val a: MA[Partial#Apply] = null // after compilation, the type is pickled as `MA[ [B] List[B] ]`
+}
+
+object Scalaz extends MAs \ No newline at end of file
diff --git a/test/files/pos/t2741/2741_2.scala b/test/files/pos/t2741/2741_2.scala
new file mode 100644
index 0000000000..41f6a64260
--- /dev/null
+++ b/test/files/pos/t2741/2741_2.scala
@@ -0,0 +1,5 @@
+// object Test compiles jointly, but not separately.
+object Test {
+ import Scalaz._
+ Scalaz.a
+} \ No newline at end of file
diff --git a/test/files/pos/t2782.scala b/test/files/pos/t2782.scala
new file mode 100644
index 0000000000..ab12aaf1fe
--- /dev/null
+++ b/test/files/pos/t2782.scala
@@ -0,0 +1,18 @@
+import scala.{collection => sc}
+
+object Test {
+ trait Foo[T]
+
+ // Haven't managed to repro without using a CanBuild or CanBuildFrom implicit parameter
+ implicit def MapFoo[A, B, M[A, B] <: sc.Map[A,B]](implicit aFoo: Foo[A], bFoo: Foo[B], cb: sc.generic.CanBuild[(A, B), M[A, B]]) = new Foo[M[A,B]] {}
+ implicit object Tuple2IntIntFoo extends Foo[(Int, Int)] // no difference if this line is uncommented
+ implicit def Tuple2Foo[A, B] = new Foo[(A, B)] {} // nor this one
+
+ implicitly[Foo[(Int, Int)]]
+}
+
+class A {
+ def x[N[X] >: M[X], M[_], G](n: N[G], m: M[G]) = null
+
+ x(Some(3), Seq(2))
+}
diff --git a/test/files/pos/t2794.scala b/test/files/pos/t2794.scala
new file mode 100644
index 0000000000..a17edf8cb3
--- /dev/null
+++ b/test/files/pos/t2794.scala
@@ -0,0 +1,9 @@
+class Key[T]
+
+class Entry[T](val k: Key[T], val v: T)
+
+object Entry {
+
+ def makeDefault[T >: Null <: AnyRef] = new Entry[T](new Key[T], null: T)
+
+}
diff --git a/test/files/pos/t2795.scala b/test/files/pos/t2795.scala
new file mode 100644
index 0000000000..935cb1f444
--- /dev/null
+++ b/test/files/pos/t2795.scala
@@ -0,0 +1,17 @@
+package t1
+
+trait Element[T] {
+}
+
+trait Config {
+ type T <: Element[T]
+ implicit val m: ClassManifest[T]
+ // XXX Following works fine:
+ // type T <: Element[_]
+}
+
+trait Transform { self: Config =>
+ def processBlock(block: Array[T]): Unit = {
+ var X = new Array[T](1)
+ }
+}
diff --git a/test/files/pos/t2797.scala b/test/files/pos/t2797.scala
new file mode 100644
index 0000000000..4323664e91
--- /dev/null
+++ b/test/files/pos/t2797.scala
@@ -0,0 +1,9 @@
+class MyVector[A] {
+ def map[B](f: A => B): MyVector[B] = error("")
+}
+
+object Test {
+ def unzip[B, C](_this: MyVector[(B, C)]): (MyVector[B], MyVector[C]) = {
+ (_this.map{ bc => bc._1 }, _this.map{ bc => bc._2 })
+ }
+} \ No newline at end of file
diff --git a/test/files/pos/t2799.flags b/test/files/pos/t2799.flags
new file mode 100644
index 0000000000..d1b831ea87
--- /dev/null
+++ b/test/files/pos/t2799.flags
@@ -0,0 +1 @@
+-deprecation -Xfatal-warnings \ No newline at end of file
diff --git a/test/files/pos/t2799.scala b/test/files/pos/t2799.scala
new file mode 100644
index 0000000000..7710cce26c
--- /dev/null
+++ b/test/files/pos/t2799.scala
@@ -0,0 +1 @@
+@deprecated("hi mom", "") case class Bob ()
diff --git a/test/files/pos/t2809.scala b/test/files/pos/t2809.scala
new file mode 100644
index 0000000000..1f68b0b07a
--- /dev/null
+++ b/test/files/pos/t2809.scala
@@ -0,0 +1,20 @@
+package p1 {
+ abstract class T1 {
+ protected def bug(p: Int = 1): Int // without 'protected' compiles fine
+ }
+}
+package p2 { // all being in the same package compiles fine
+ import p1._
+ abstract class T2 extends T1 {
+ class A {
+ bug()
+ }
+ }
+
+ abstract class T3 extends T2 {
+ class A {
+ bug()
+ }
+ }
+}
+
diff --git a/test/files/pos/t2810.scala b/test/files/pos/t2810.scala
new file mode 100644
index 0000000000..c85eca164a
--- /dev/null
+++ b/test/files/pos/t2810.scala
@@ -0,0 +1,8 @@
+
+
+
+
+object Test {
+ val closeable1: { def close(): Unit } = new scala.io.Source { val iter: Iterator[Char] = "".iterator }
+ val closeable2: { def close(): Unit } = new java.io.Closeable { def close() = {} }
+}
diff --git a/test/files/pos/bug284.scala b/test/files/pos/t284-pos.scala
index 19673b7e4c..19673b7e4c 100644
--- a/test/files/pos/bug284.scala
+++ b/test/files/pos/t284-pos.scala
diff --git a/test/files/pos/t2868.cmds b/test/files/pos/t2868.cmds
new file mode 100644
index 0000000000..ed8124a9e0
--- /dev/null
+++ b/test/files/pos/t2868.cmds
@@ -0,0 +1,3 @@
+javac Jann.java Nest.java
+scalac pick_1.scala
+scalac test_2.scala
diff --git a/test/files/pos/t2868/Jann.java b/test/files/pos/t2868/Jann.java
new file mode 100644
index 0000000000..f5b68de7b0
--- /dev/null
+++ b/test/files/pos/t2868/Jann.java
@@ -0,0 +1,5 @@
+public @interface Jann {
+ public String str();
+ public Nest inn();
+ public int[] arr();
+}
diff --git a/test/files/pos/t2868/Nest.java b/test/files/pos/t2868/Nest.java
new file mode 100644
index 0000000000..53652291ad
--- /dev/null
+++ b/test/files/pos/t2868/Nest.java
@@ -0,0 +1,3 @@
+public @interface Nest {
+ public int value();
+}
diff --git a/test/files/pos/t2868/pick_1.scala b/test/files/pos/t2868/pick_1.scala
new file mode 100644
index 0000000000..e91728ec2f
--- /dev/null
+++ b/test/files/pos/t2868/pick_1.scala
@@ -0,0 +1,7 @@
+class ann(s: String) extends StaticAnnotation
+class pick {
+ final val s = "bang!"
+ @ann("bang!") def foo = 1
+ @Jann(str = "bang!", inn = new Nest(1), arr = Array(1, 2)) def bar = 2
+ @Jann(str = "bang!", inn = new Nest(1), arr = Array(1, 2)) def baz = 3
+}
diff --git a/test/files/pos/t2868/t2868_src_2.scala b/test/files/pos/t2868/t2868_src_2.scala
new file mode 100644
index 0000000000..f11ef0fae2
--- /dev/null
+++ b/test/files/pos/t2868/t2868_src_2.scala
@@ -0,0 +1,6 @@
+class test {
+ val l = (new pick).s
+ val u = (new pick).foo
+ val c = (new pick).bar
+ val k = (new pick).baz
+}
diff --git a/test/files/pos/t287.scala b/test/files/pos/t287.scala
new file mode 100644
index 0000000000..8e5e8831c1
--- /dev/null
+++ b/test/files/pos/t287.scala
@@ -0,0 +1,12 @@
+object testBuf {
+ class mystream extends java.io.BufferedOutputStream(new java.io.FileOutputStream("/dev/null")) {
+ def w( x:String ):Unit = {
+ val foo = new Array[Byte](2);
+
+ // write( byte[] ) is defined in FilterOutputStream, the superclass of BufferedOutputStream
+ super.write( foo ); // error
+
+ super.write( foo, 0, foo.length ); // this works however
+ }
+ }
+}
diff --git a/test/files/pos/bug289.scala b/test/files/pos/t289.scala
index 96c0244dfa..96c0244dfa 100644
--- a/test/files/pos/bug289.scala
+++ b/test/files/pos/t289.scala
diff --git a/test/files/pos/t2910.scala b/test/files/pos/t2910.scala
new file mode 100644
index 0000000000..17a6a64809
--- /dev/null
+++ b/test/files/pos/t2910.scala
@@ -0,0 +1,33 @@
+object Test {
+ def test1 {
+ C
+ object C
+ }
+
+ def test2 {
+ println(s.length)
+ lazy val s = "abc"
+ }
+
+ def test3 {
+ lazy val lazyBar = bar
+ object bar {
+ val foo = 12
+ }
+ lazy val lazyBar2 = bar
+ }
+
+ def test4 {
+ lazy val x = {
+ x
+ lazy val x = 12
+ 0
+ }
+ }
+
+ def test5 {
+ lazy val f: Int = g
+ Console.println("foo")
+ lazy val g: Int = f
+ }
+} \ No newline at end of file
diff --git a/test/files/pos/t2913.scala b/test/files/pos/t2913.scala
new file mode 100755
index 0000000000..ee86b9e402
--- /dev/null
+++ b/test/files/pos/t2913.scala
@@ -0,0 +1,53 @@
+class A {
+ def foo(a: Int) = 0
+}
+
+class RichA {
+ def foo(a: String) = 0
+ def foo(a: String, b: String) = 0
+ def foo() = 0
+}
+
+object Test {
+
+ implicit def AToRichA(a: A) = new RichA
+
+ val a = new A
+ a.foo()
+ a.foo(1)
+
+ a.foo("") // Without implicits, a type error regarding invalid argument types is generated at `""`. This is
+ // the same position as an argument, so the 'second try' typing with an Implicit View is tried,
+ // and AToRichA(a).foo("") is found.
+ //
+ // My reading of the spec "7.3 Views" is that `a.foo` denotes a member of `a`, so the view should
+ // not be triggered.
+ //
+ // But perhaps the implementation was changed to solve See https://lampsvn.epfl.ch/trac/scala/ticket/1756
+
+ a.foo("a", "b") // Without implicits, a type error regarding invalid arity is generated at `foo(<error>"", "")`.
+ // Typers#tryTypedApply:3274 only checks if the error is as the same position as `foo`, `"a"`, or `"b"`.
+ // None of these po
+}
+
+// t0851 is essentially the same:
+object test1 {
+ case class Foo[T,T2](f : (T,T2) => String) extends (((T,T2)) => String){
+ def apply(t : T) = (s:T2) => f(t,s)
+ def apply(p : (T,T2)) = f(p._1,p._2)
+ }
+ implicit def g[T](f : (T,String) => String) = Foo(f)
+ def main(args : Array[String]) : Unit = {
+ val f = (x:Int,s:String) => s + x
+ println(f(1))
+ ()
+ }
+}
+object Main {
+ def main(args : Array[String]) {
+ val fn = (a : Int, str : String) => "a: " + a + ", str: " + str
+ implicit def fx[T](f : (T,String) => String) = (x:T) => f(x,null)
+ println(fn(1))
+ ()
+ }
+}
diff --git a/test/files/pos/t2939.scala b/test/files/pos/t2939.scala
new file mode 100644
index 0000000000..67677f2f18
--- /dev/null
+++ b/test/files/pos/t2939.scala
@@ -0,0 +1,13 @@
+import collection._
+
+object Proxies {
+ class C1 extends MapProxy[Int,Int] { def self = Map[Int,Int]() }
+ class C2 extends mutable.MapProxy[Int,Int] { def self = mutable.Map[Int,Int]() }
+ class C3 extends immutable.MapProxy[Int,Int] { def self = immutable.Map[Int,Int]() }
+
+ class C4 extends SetProxy[Int] { def self = Set[Int]() }
+ class C5 extends mutable.SetProxy[Int] { def self = mutable.Set[Int]() }
+ class C6 extends immutable.SetProxy[Int] { def self = immutable.Set[Int]() }
+
+ class C7 extends SeqProxy[Int] { def self = Seq[Int]() }
+} \ No newline at end of file
diff --git a/test/files/pos/t294.cmds b/test/files/pos/t294.cmds
new file mode 100644
index 0000000000..62c9a5a068
--- /dev/null
+++ b/test/files/pos/t294.cmds
@@ -0,0 +1,3 @@
+javac Ann.java Ann2.java
+scalac Test_1.scala
+scalac Test_2.scala
diff --git a/test/files/pos/t2940/Cycle.java b/test/files/pos/t2940/Cycle.java
new file mode 100644
index 0000000000..eef6c23b5e
--- /dev/null
+++ b/test/files/pos/t2940/Cycle.java
@@ -0,0 +1,3 @@
+public interface Cycle<T extends Cycle<?>> {
+ void doStuff();
+} \ No newline at end of file
diff --git a/test/files/pos/t2940/Error.scala b/test/files/pos/t2940/Error.scala
new file mode 100644
index 0000000000..7c600667f3
--- /dev/null
+++ b/test/files/pos/t2940/Error.scala
@@ -0,0 +1,12 @@
+abstract class Error {
+ val c: Cycle[_]
+}
+
+object Test {
+ trait Quux[T] extends Cycle[Quux[T]]
+ val x = new Quux[Int] { def doStuff() { } }
+
+ def main(args: Array[String]): Unit = {
+
+ }
+}
diff --git a/test/files/pos/t2945.scala b/test/files/pos/t2945.scala
new file mode 100644
index 0000000000..762bdb61e1
--- /dev/null
+++ b/test/files/pos/t2945.scala
@@ -0,0 +1,12 @@
+object Foo {
+ def test(s: String) = {
+ (s: Seq[Char]) match {
+ case Seq('f', 'o', 'o', ' ', rest1 @ _*) =>
+ rest1
+ case Seq('b', 'a', 'r', ' ', ' ', rest2 @ _*) =>
+ rest2
+ case _ =>
+ s
+ }
+ }
+} \ No newline at end of file
diff --git a/test/files/pos/bug295.scala b/test/files/pos/t295.scala
index 22c7beff4d..22c7beff4d 100644
--- a/test/files/pos/bug295.scala
+++ b/test/files/pos/t295.scala
diff --git a/test/files/pos/t2956/BeanDefinitionVisitor.java b/test/files/pos/t2956/BeanDefinitionVisitor.java
new file mode 100644
index 0000000000..2ff5daa253
--- /dev/null
+++ b/test/files/pos/t2956/BeanDefinitionVisitor.java
@@ -0,0 +1,6 @@
+import java.util.Map;
+public class BeanDefinitionVisitor {
+ @SuppressWarnings("unchecked")
+ protected void visitMap(Map<?, ?> mapVal) {
+ }
+}
diff --git a/test/files/pos/t2956/t2956.scala b/test/files/pos/t2956/t2956.scala
new file mode 100755
index 0000000000..eb6e817465
--- /dev/null
+++ b/test/files/pos/t2956/t2956.scala
@@ -0,0 +1,7 @@
+import scala.collection.JavaConversions._
+
+class Outer {
+ protected class Inner extends BeanDefinitionVisitor {
+ protected def visitMap(mapVal: Map[_, _]): Unit = ()
+ }
+} \ No newline at end of file
diff --git a/test/files/pos/bug296.scala b/test/files/pos/t296.scala
index 0c267a307e..0c267a307e 100644
--- a/test/files/pos/bug296.scala
+++ b/test/files/pos/t296.scala
diff --git a/test/files/pos/t2973.scala b/test/files/pos/t2973.scala
new file mode 100644
index 0000000000..f5dde856d9
--- /dev/null
+++ b/test/files/pos/t2973.scala
@@ -0,0 +1 @@
+package foo {}; package bar {}; package baz {}
diff --git a/test/files/pos/t2994a.scala b/test/files/pos/t2994a.scala
new file mode 100644
index 0000000000..f2d57c34ca
--- /dev/null
+++ b/test/files/pos/t2994a.scala
@@ -0,0 +1,27 @@
+object Naturals {
+ trait NAT {
+ type a[s[_ <: NAT] <: NAT, z <: NAT] <: NAT
+ type v = a[SUCC, ZERO]
+ }
+ final class ZERO extends NAT {
+ type a[s[_ <: NAT] <: NAT, z <: NAT] = z
+ }
+ final class SUCC[n <: NAT] extends NAT {
+ type a[s[_ <: NAT] <: NAT, z <: NAT] = s[n#a[s, z]]
+ }
+ type _0 = ZERO
+ type _1 = SUCC[_0]
+ type _2 = SUCC[_1]
+ type _3 = SUCC[_2]
+ type _4 = SUCC[_3]
+ type _5 = SUCC[_4]
+ type _6 = SUCC[_5]
+
+
+ // crashes scala-2.8.0 beta1
+ trait MUL[n <: NAT, m <: NAT] extends NAT {
+ trait curry[n[_[_], _], s[_]] { type f[z <: NAT] = n[s, z] }
+ type a[s[_ <: NAT] <: NAT, z <: NAT] = n#a[curry[m#a, s]#f, z]
+ }
+
+} \ No newline at end of file
diff --git a/test/files/pos/t2994b.scala b/test/files/pos/t2994b.scala
new file mode 100644
index 0000000000..c9d9cc812b
--- /dev/null
+++ b/test/files/pos/t2994b.scala
@@ -0,0 +1,7 @@
+object Test {
+ trait Bar[X[_]]
+ trait Baz[S[_] <: Bar[S]] {
+ type Apply[T]
+ }
+ trait Foo[V[_] <: Bar[V]] extends Bar[Baz[V]#Apply]
+} \ No newline at end of file
diff --git a/test/files/pos/t3020.scala b/test/files/pos/t3020.scala
new file mode 100644
index 0000000000..cb429cd94f
--- /dev/null
+++ b/test/files/pos/t3020.scala
@@ -0,0 +1,9 @@
+object Test {
+ def main(args: Array[String]): Unit = {
+ var x = true
+
+ ( { if (x) new scala.util.Random() } .asInstanceOf[Runnable] )
+ }
+}
+
+
diff --git a/test/files/pos/t3037.scala b/test/files/pos/t3037.scala
new file mode 100644
index 0000000000..b71ffe0418
--- /dev/null
+++ b/test/files/pos/t3037.scala
@@ -0,0 +1,13 @@
+package test
+
+object A {
+ println(("a" match {
+ case "a" => 1
+ case _ => "a"
+ }).asInstanceOf[Object])
+ def foo[T](x: T) = x
+ var x: Int = 1
+ var y: Long = 1L
+ x = foo(x)
+ y = foo(y)
+}
diff --git a/test/files/pos/bug304.scala b/test/files/pos/t304.scala
index 76da44157d..76da44157d 100644
--- a/test/files/pos/bug304.scala
+++ b/test/files/pos/t304.scala
diff --git a/test/files/pos/t3048.scala b/test/files/pos/t3048.scala
new file mode 100644
index 0000000000..dc056ecba2
--- /dev/null
+++ b/test/files/pos/t3048.scala
@@ -0,0 +1,8 @@
+class B
+object C extends B
+
+class F[T <: B](cons: => T)
+class F2[T <: B](cons: => T) extends F(cons)
+
+object D extends F2(C) // works
+object E extends F2(new B {})
diff --git a/test/files/pos/t3071.scala b/test/files/pos/t3071.scala
new file mode 100644
index 0000000000..7e14432941
--- /dev/null
+++ b/test/files/pos/t3071.scala
@@ -0,0 +1,7 @@
+class A (val i: Int) {
+ def copy (i: Int = this.i): A = new A(i)
+}
+
+class B (val j: Int) extends A(1) {
+ override def copy (j: Int = this.j): B = new B(j)
+}
diff --git a/test/files/pos/t3076/C2.scala b/test/files/pos/t3076/C2.scala
new file mode 100644
index 0000000000..d08f9ee81d
--- /dev/null
+++ b/test/files/pos/t3076/C2.scala
@@ -0,0 +1,4 @@
+class C2 {
+ def m1() { new T { } }
+ def m2() { new T { } }
+}
diff --git a/test/files/pos/t3076/T.scala b/test/files/pos/t3076/T.scala
new file mode 100644
index 0000000000..b710a29343
--- /dev/null
+++ b/test/files/pos/t3076/T.scala
@@ -0,0 +1,2 @@
+trait T { private val z = new C1 }
+private class C1
diff --git a/test/files/pos/t3079.scala b/test/files/pos/t3079.scala
new file mode 100644
index 0000000000..4bead34ff3
--- /dev/null
+++ b/test/files/pos/t3079.scala
@@ -0,0 +1,17 @@
+sealed trait Identity[A] {
+ val value: A
+}
+
+trait Coerce[A, B] {
+ def unwrap: (A => B)
+}
+
+object Coerce {
+ def IdentityCoerce[B] = new Coerce[Identity[B], B] {
+ // java.lang.Error: A in trait Identity cannot be instantiated from ?x$1.type
+ def unwrap = _.value
+
+ // Providing the type of _ works around the problem.
+ //def unwrap = (_: Identity[B]).value
+ }
+} \ No newline at end of file
diff --git a/test/files/pos/t3097.flags b/test/files/pos/t3097.flags
new file mode 100644
index 0000000000..144ddac9d3
--- /dev/null
+++ b/test/files/pos/t3097.flags
@@ -0,0 +1 @@
+-unchecked -Xfatal-warnings
diff --git a/test/files/pos/t3097.scala b/test/files/pos/t3097.scala
new file mode 100644
index 0000000000..a034b960f7
--- /dev/null
+++ b/test/files/pos/t3097.scala
@@ -0,0 +1,31 @@
+package seal
+
+sealed trait ISimpleValue
+
+sealed trait IListValue extends ISimpleValue {
+ def items: List[IAtomicValue[_]]
+}
+sealed trait IAtomicValue[O] extends ISimpleValue {
+ def data: O
+}
+
+sealed trait IAbstractDoubleValue[O] extends IAtomicValue[O] { }
+sealed trait IDoubleValue extends IAbstractDoubleValue[Double]
+
+case class ListValue(val items: List[IAtomicValue[_]]) extends IListValue
+class DoubleValue(val data: Double) extends IDoubleValue {
+ def asDouble = data
+}
+
+object Test {
+ /**
+ * @param args the command line arguments
+ */
+ def main(args: Array[String]): Unit = {
+ val v: ISimpleValue = new DoubleValue(1)
+ v match {
+ case m: IListValue => println("list")
+ case a: IAtomicValue[_] => println("atomic")
+ }
+ }
+}
diff --git a/test/files/pos/t3106.scala b/test/files/pos/t3106.scala
new file mode 100644
index 0000000000..cf7b507126
--- /dev/null
+++ b/test/files/pos/t3106.scala
@@ -0,0 +1,7 @@
+class Sample[A] (val d0: ((A,A)) => A) {}
+
+object Sample {
+ implicit def apply[A] (x:A): Sample[A] = {
+ new Sample(p => p._1)
+ }
+} \ No newline at end of file
diff --git a/test/files/pos/t3108.scala b/test/files/pos/t3108.scala
new file mode 100644
index 0000000000..6a1da73220
--- /dev/null
+++ b/test/files/pos/t3108.scala
@@ -0,0 +1,5 @@
+object A {
+ val a: NotNull = ""
+ val b: NotNull = 41
+}
+
diff --git a/test/files/pos/t3136.scala b/test/files/pos/t3136.scala
new file mode 100644
index 0000000000..6a5850aeb0
--- /dev/null
+++ b/test/files/pos/t3136.scala
@@ -0,0 +1,19 @@
+class Type
+class Symbol
+case class PolyType(tps: List[Symbol], res: Type) extends Type
+class OtherType extends Type
+
+// case class NullaryMethodType(tp: Type) extends Type
+
+object NullaryMethodType {
+ def apply(resTpe: Type): Type = PolyType(List(), resTpe)
+ def unapply(tp: Type): Option[(Type)] = None
+}
+
+object Test {
+ def TEST(tp: Type): String =
+ tp match {
+ case PolyType(ps1, PolyType(ps2, res @ PolyType(a, b))) => "1"+tp // couldn't find a simpler version that still crashes
+ case NullaryMethodType(meh) => "2"+meh
+ }
+}
diff --git a/test/files/pos/t3137.scala b/test/files/pos/t3137.scala
new file mode 100644
index 0000000000..cb7317af01
--- /dev/null
+++ b/test/files/pos/t3137.scala
@@ -0,0 +1,17 @@
+trait A {
+ val C: Any
+}
+
+class B extends A {
+ class C
+ object C
+}
+
+trait AA {
+ type C
+ def C: Int => C
+}
+
+class BB extends AA {
+ case class C(v: Int)
+}
diff --git a/test/files/pos/t3152.scala b/test/files/pos/t3152.scala
new file mode 100644
index 0000000000..a20428dbee
--- /dev/null
+++ b/test/files/pos/t3152.scala
@@ -0,0 +1,20 @@
+trait Applicative[M[_]]
+
+sealed trait MA[M[_], A] {
+ def sequence[N[_], B](implicit a: A <:< N[B], n: Applicative[N]): N[M[B]] = error("stub")
+ // def sequence3[N[_], B]()(implicit a: A <:< N[B], n: Applicative[N]): N[M[B]] = error("stub")
+}
+
+object test {
+ implicit def ListMA[A](l: List[A]): MA[List, A] = error("stub")
+ implicit val ao: Applicative[Option] = error("stub")
+
+ /* This compiles OK:
+ (Nil: List[Option[Int]]).sequence3(): Option[List[Int]]
+ */
+
+ // BUG: error: immutable is not an enclosing class
+ // !!! No line number is reported with the error
+ (Nil: List[Option[Int]]).sequence: Option[List[Int]]
+ (List[Option[Int]]()).sequence: Option[List[Int]]
+} \ No newline at end of file
diff --git a/test/files/pos/t3174.scala b/test/files/pos/t3174.scala
new file mode 100755
index 0000000000..c3d90a4946
--- /dev/null
+++ b/test/files/pos/t3174.scala
@@ -0,0 +1,14 @@
+object test {
+ def method() {
+ class Foo extends AnyRef {
+ object Color {
+ object Blue
+ }
+
+ class Board {
+ val grid = Color.Blue
+ }
+ }
+ new Foo
+ }
+ }
diff --git a/test/files/pos/t3174b.scala b/test/files/pos/t3174b.scala
new file mode 100755
index 0000000000..002c4f090f
--- /dev/null
+++ b/test/files/pos/t3174b.scala
@@ -0,0 +1,12 @@
+trait Foo[X] { def foo : Map[String,Foo[X]] }
+
+object Test {
+ def f[T]() : Foo[T] = {
+ class Anon extends Foo[T] {
+ var foo: Map[String, Foo[T]] = Map[String,Foo[T]]()
+ //def foo = Map[String,Foo[T]]()
+ //def foo_=(x: Map[String,Foo[T]]) {}
+ }
+ new Anon
+ }
+}
diff --git a/test/files/pos/t3175-pos.scala b/test/files/pos/t3175-pos.scala
new file mode 100644
index 0000000000..497ff8255c
--- /dev/null
+++ b/test/files/pos/t3175-pos.scala
@@ -0,0 +1,7 @@
+object Test {
+ def f(g:{val update:Unit}) = g.update
+
+ def main(args: Array[String]): Unit = {
+
+ }
+}
diff --git a/test/files/pos/t3177.scala b/test/files/pos/t3177.scala
new file mode 100644
index 0000000000..21893c9422
--- /dev/null
+++ b/test/files/pos/t3177.scala
@@ -0,0 +1,39 @@
+trait InvariantFunctor[F[_]] {
+ def xmap[A, B](ma: F[A], f: A => B, g: B => A): F[B]
+}
+
+object InvariantFunctor {
+ import Endo._
+
+ implicit val EndoInvariantFunctor = new InvariantFunctor[Endo] {
+ def xmap[A, B](ma: Endo[A], f: A => B, g: B => A): Endo[B] = (b: B) => f(ma(g(b)))
+ }
+
+ // The definition about fails with:
+ // anon-type.scala:9: error: not found: value b
+ // def xmap[A, B](ma: Endo[A], f: A => B, g: B => A): Endo[B] = (b: B) => f(ma(g(b)))
+ // ^
+ // anon-type.scala:8: error: not found: type $anon
+ // implicit val EndoInvariantFunctor = new InvariantFunctor[Endo] {
+ // ^
+
+
+ // These both work:
+ // implicit val EndoInvariantFunctorAscribed: InvariantFunctor[Endo] = new InvariantFunctor[Endo] {
+ // def xmap[A, B](ma: Endo[A], f: A => B, g: B => A): Endo[B] = (b: B) => f(ma(g(b)))
+ // }
+ //
+ // implicit val EndoInvariantFunctorStubbed = new InvariantFunctor[Endo] {
+ // def xmap[A, B](ma: Endo[A], f: A => B, g: B => A): Endo[B] = error("stub")
+ // }
+}
+
+trait Endo[X]
+
+object Endo {
+ implicit def EndoTo[A](f: A => A): Endo[A] = new Endo[A] {
+ def apply(a: A) = f(a)
+ }
+
+ implicit def EndoFrom[A](e: Endo[A]): A => A = e.apply(_)
+} \ No newline at end of file
diff --git a/test/files/pos/bug318.scala b/test/files/pos/t318.scala
index dbe0e0528c..dbe0e0528c 100644
--- a/test/files/pos/bug318.scala
+++ b/test/files/pos/t318.scala
diff --git a/test/files/pos/bug319.scala b/test/files/pos/t319.scala
index eed25eb84c..eed25eb84c 100644
--- a/test/files/pos/bug319.scala
+++ b/test/files/pos/t319.scala
diff --git a/test/files/pos/t3234.flags b/test/files/pos/t3234.flags
new file mode 100644
index 0000000000..c9cefdc4b9
--- /dev/null
+++ b/test/files/pos/t3234.flags
@@ -0,0 +1 @@
+-Yinline -Xfatal-warnings \ No newline at end of file
diff --git a/test/files/pos/t3234.scala b/test/files/pos/t3234.scala
new file mode 100644
index 0000000000..443d0467f0
--- /dev/null
+++ b/test/files/pos/t3234.scala
@@ -0,0 +1,19 @@
+trait Trait1 {
+ // need more work before this one works
+ // @inline
+ def foo2(n: Int) = n*n
+}
+
+trait Trait2 {
+ @inline def foo3(n: Int) = 1
+}
+
+class Base extends Trait1 {
+ @inline def foo(n: Int) = n
+}
+
+object Test extends Base with Trait2 {
+ def main(args: Array[String]) = {
+ println(foo(42) + foo2(11) + foo3(2))
+ }
+} \ No newline at end of file
diff --git a/test/files/pos/t3249/Test.java b/test/files/pos/t3249/Test.java
new file mode 100644
index 0000000000..4cc7cb2ab5
--- /dev/null
+++ b/test/files/pos/t3249/Test.java
@@ -0,0 +1,5 @@
+public class Test {
+ public static void meh() {
+ new A<Integer>().f();
+ }
+} \ No newline at end of file
diff --git a/test/files/pos/t3249/a.scala b/test/files/pos/t3249/a.scala
new file mode 100644
index 0000000000..0394464549
--- /dev/null
+++ b/test/files/pos/t3249/a.scala
@@ -0,0 +1,11 @@
+class A[U] { def f[T] = { class X extends A[T] } }
+
+
+/*
+$ scalac a.scala
+$ javac -cp .:$SCALA_HOME/lib/scala-library.jar -Xprint 'A$X$1'
+
+ public class X$1 extends A<java.lang.Object> implements scala.ScalaObject {
+ public X$1(A<U> null);
+ }
+*/ \ No newline at end of file
diff --git a/test/files/pos/t3252.flags b/test/files/pos/t3252.flags
new file mode 100644
index 0000000000..eb4d19bcb9
--- /dev/null
+++ b/test/files/pos/t3252.flags
@@ -0,0 +1 @@
+-optimise \ No newline at end of file
diff --git a/test/files/pos/t3252.scala b/test/files/pos/t3252.scala
new file mode 100644
index 0000000000..4b8e862714
--- /dev/null
+++ b/test/files/pos/t3252.scala
@@ -0,0 +1,15 @@
+class A {
+ def f(x : Boolean) : Thread = {
+ g {
+ x match {
+ case false =>
+ B.h { }
+ }
+ }
+ }
+
+ private def g[T](block : => T) = error("")
+}
+object B {
+ def h(block : => Unit) : Nothing = error("")
+} \ No newline at end of file
diff --git a/test/files/pos/t3274.scala b/test/files/pos/t3274.scala
new file mode 100644
index 0000000000..dfa6a4ec01
--- /dev/null
+++ b/test/files/pos/t3274.scala
@@ -0,0 +1,9 @@
+trait A { this: B =>
+ trait X {
+ class Y1 extends Y
+ }
+}
+
+trait B extends A {
+ trait Y { def f {} }
+} \ No newline at end of file
diff --git a/test/files/pos/t3278.scala b/test/files/pos/t3278.scala
new file mode 100644
index 0000000000..788ec75d26
--- /dev/null
+++ b/test/files/pos/t3278.scala
@@ -0,0 +1,15 @@
+class Foo
+class Test {
+ def update[B](x : B, b : Int) {}
+ def apply[B](x : B) = 1
+}
+
+object Test {
+ def main(a : Array[String]) {
+ val a = new Test
+ val f = new Foo
+ a(f) = 1 //works
+ a(f) = a(f) + 1 //works
+ a(f) += 1 //error: reassignment to val
+ }
+} \ No newline at end of file
diff --git a/test/files/pos/t3312.scala b/test/files/pos/t3312.scala
new file mode 100644
index 0000000000..9bf3e23ed3
--- /dev/null
+++ b/test/files/pos/t3312.scala
@@ -0,0 +1,17 @@
+trait Root {
+ def say: String
+}
+
+trait A extends Root {
+ override def say: String = "bow"
+}
+
+trait B extends Root {
+ override def say: String = "hi"
+}
+
+object Foo extends A with B {
+ override def say: String = foo(super[A].say)
+
+ def foo(p: => String): String = p
+}
diff --git a/test/files/pos/t3343.scala b/test/files/pos/t3343.scala
new file mode 100644
index 0000000000..6c34cdff00
--- /dev/null
+++ b/test/files/pos/t3343.scala
@@ -0,0 +1,15 @@
+import scala.collection.mutable.{ Builder, ListBuffer }
+
+object Test {
+ class Converter[T]
+ object SimpleIntConverter extends Converter[Int]
+
+ class TraversableConverter[T, Coll[X] <: Traversable[X]](converter: Converter[T], builder: Builder[T, Coll[T]]) extends Converter[Coll[T]] {
+ def convert(x: T): List[T] = List(x)
+ }
+ val tc: Converter[List[Int]] = new TraversableConverter(SimpleIntConverter, new ListBuffer[Int])
+ val tc2 = new TraversableConverter(SimpleIntConverter, new ListBuffer[Int])
+
+ def main(args: Array[String]): Unit = {
+ }
+} \ No newline at end of file
diff --git a/test/files/pos/t3349/AbstractTupleSet.java b/test/files/pos/t3349/AbstractTupleSet.java
new file mode 100644
index 0000000000..47b440a589
--- /dev/null
+++ b/test/files/pos/t3349/AbstractTupleSet.java
@@ -0,0 +1,9 @@
+public abstract class AbstractTupleSet implements TupleSet {
+ public void addColumn(String name, Class type) {
+ throw new UnsupportedOperationException();
+ }
+
+ public void addColumn(String name, String expr) {
+ throw new UnsupportedOperationException();
+ }
+}
diff --git a/test/files/pos/t3349/Table.java b/test/files/pos/t3349/Table.java
new file mode 100644
index 0000000000..1609367623
--- /dev/null
+++ b/test/files/pos/t3349/Table.java
@@ -0,0 +1,9 @@
+public class Table extends AbstractTupleSet {
+ public void addColumn(String name, Class type) {
+ throw new UnsupportedOperationException();
+ }
+
+ public void addColumn(String name, String expr) {
+ throw new UnsupportedOperationException();
+ }
+} \ No newline at end of file
diff --git a/test/files/pos/t3349/Test.scala b/test/files/pos/t3349/Test.scala
new file mode 100644
index 0000000000..8174e4c4f8
--- /dev/null
+++ b/test/files/pos/t3349/Test.scala
@@ -0,0 +1,5 @@
+object Test {
+ val label = "name"
+ val table: Table = error("")
+ table.addColumn( label, label.getClass )
+} \ No newline at end of file
diff --git a/test/files/pos/t3349/TupleSet.java b/test/files/pos/t3349/TupleSet.java
new file mode 100644
index 0000000000..14a073a950
--- /dev/null
+++ b/test/files/pos/t3349/TupleSet.java
@@ -0,0 +1,4 @@
+public interface TupleSet {
+ public void addColumn(String name, Class type);
+ public void addColumn(String name, String expr);
+} \ No newline at end of file
diff --git a/test/files/pos/t3363.scala b/test/files/pos/t3363.scala
new file mode 100755
index 0000000000..bae54084ea
--- /dev/null
+++ b/test/files/pos/t3363.scala
@@ -0,0 +1,18 @@
+object TestCase {
+
+ //now matter if you put (abstract) class or trait it will fail in all cases
+ trait MapOps[T]
+
+ //if fs was reduced to List (generic type with one parameter) then the code compiles
+ //if you inherit from MapOps[T] instead of MapOps[F] then code compiles fine
+ implicit def map2ops[T,F](fs: Map[T,F]) = new MapOps[F] {
+ //if you remove this line, then code compiles
+ lazy val m: Manifest[T] = error("just something to make it compile")
+ def is(xs: List[T]) = List(xs)
+ }
+
+ def main(args: Array[String]) {
+ println(Map(1 -> "2") is List(2))
+ }
+
+ }
diff --git a/test/files/pos/t3371.scala b/test/files/pos/t3371.scala
new file mode 100644
index 0000000000..897cd9de44
--- /dev/null
+++ b/test/files/pos/t3371.scala
@@ -0,0 +1,9 @@
+// that compiles
+class Test(myValue:String) { println(myValue) }
+
+// that compiles too
+trait Other { val otherValue = "" }
+class Test2(myValue:String) { self:Other => println(otherValue) }
+
+// that does not compile saying that myValue is not found
+class Test3(myValue:String) { self:Other => println(myValue) }
diff --git a/test/files/pos/t3373.scala b/test/files/pos/t3373.scala
new file mode 100644
index 0000000000..b4af3610bb
--- /dev/null
+++ b/test/files/pos/t3373.scala
@@ -0,0 +1,11 @@
+class Entry(time: Long) {
+ def getTime: Long = time
+}
+
+object Test {
+ def extractTime(e: Entry) = e.getTime
+
+ implicit val orderEntries = new Ordering[Entry] {
+ def compare(first: Entry, second: Entry) = extractTime(first) compare extractTime(second)
+ }
+} \ No newline at end of file
diff --git a/test/files/pos/t3374.scala b/test/files/pos/t3374.scala
new file mode 100644
index 0000000000..4c0293181d
--- /dev/null
+++ b/test/files/pos/t3374.scala
@@ -0,0 +1,6 @@
+trait Parent {
+ type Test[A, H[B <: A]]
+}
+trait Sub extends Parent {
+ type Test[AS, HS[B <: AS]] = AS
+} \ No newline at end of file
diff --git a/test/files/pos/t3384.scala b/test/files/pos/t3384.scala
new file mode 100644
index 0000000000..4d4a81d69d
--- /dev/null
+++ b/test/files/pos/t3384.scala
@@ -0,0 +1,14 @@
+package test
+
+package p {
+ class A(a: String = "")
+}
+
+package object po {
+ type A = p.A
+}
+
+import po._
+class C {
+ val a = new A() //p.A.init$default$1)
+}
diff --git a/test/files/pos/t3404/Base.java b/test/files/pos/t3404/Base.java
new file mode 100644
index 0000000000..c5df18cc9f
--- /dev/null
+++ b/test/files/pos/t3404/Base.java
@@ -0,0 +1,3 @@
+abstract class Base {
+ abstract Class foo(Object o);
+} \ No newline at end of file
diff --git a/test/files/pos/t3404/Derived.scala b/test/files/pos/t3404/Derived.scala
new file mode 100644
index 0000000000..16976fe3d5
--- /dev/null
+++ b/test/files/pos/t3404/Derived.scala
@@ -0,0 +1,3 @@
+class Derived extends Base {
+ def foo(a: AnyRef) = classOf[String]
+} \ No newline at end of file
diff --git a/test/files/pos/t3411.scala b/test/files/pos/t3411.scala
new file mode 100644
index 0000000000..b76fec66a6
--- /dev/null
+++ b/test/files/pos/t3411.scala
@@ -0,0 +1,8 @@
+object A {
+ def g(c: PartialFunction[Any,Unit]) {}
+
+ def f {
+ lazy val x = 0
+ g { case `x` => }
+ }
+}
diff --git a/test/files/pos/t3417.scala b/test/files/pos/t3417.scala
new file mode 100644
index 0000000000..d2de1608aa
--- /dev/null
+++ b/test/files/pos/t3417.scala
@@ -0,0 +1,11 @@
+trait X extends NotNull {
+ def foo = 1
+}
+
+trait Y extends Object with NotNull {
+ def bar = 1
+}
+
+class Z extends NotNull
+
+class W extends Object with NotNull
diff --git a/test/files/pos/t3419/B_1.scala b/test/files/pos/t3419/B_1.scala
new file mode 100644
index 0000000000..a8ec7edba4
--- /dev/null
+++ b/test/files/pos/t3419/B_1.scala
@@ -0,0 +1,3 @@
+trait T[A,B] {
+ type X[a <: A, b <: B] <: B
+} \ No newline at end of file
diff --git a/test/files/pos/t3419/C_2.scala b/test/files/pos/t3419/C_2.scala
new file mode 100644
index 0000000000..da721d2c31
--- /dev/null
+++ b/test/files/pos/t3419/C_2.scala
@@ -0,0 +1,3 @@
+object F {
+ type S = T[Any,Int] {type X[N <: Int, Acc <: Int] = Acc}
+} \ No newline at end of file
diff --git a/test/files/pos/t342.scala b/test/files/pos/t342.scala
new file mode 100644
index 0000000000..752b24d2ba
--- /dev/null
+++ b/test/files/pos/t342.scala
@@ -0,0 +1,8 @@
+object Main extends App {
+
+ object Foo extends Enumeration(0, "Bar") { // 2
+ val Bar = Value
+ }
+ import Foo._;
+ Console.println(Bar)
+}
diff --git a/test/files/pos/t3420.flags b/test/files/pos/t3420.flags
new file mode 100644
index 0000000000..ea03113c66
--- /dev/null
+++ b/test/files/pos/t3420.flags
@@ -0,0 +1 @@
+-optimise -Xfatal-warnings \ No newline at end of file
diff --git a/test/files/pos/t3420.scala b/test/files/pos/t3420.scala
new file mode 100644
index 0000000000..0fc56ed67b
--- /dev/null
+++ b/test/files/pos/t3420.scala
@@ -0,0 +1,5 @@
+class C {
+ val cv = Map[Int, Int](1 -> 2)
+ lazy val cl = Map[Int, Int](1 -> 2)
+ def cd = Map[Int, Int](1 -> 2)
+}
diff --git a/test/files/pos/t3429/A.scala b/test/files/pos/t3429/A.scala
new file mode 100644
index 0000000000..4b705808c1
--- /dev/null
+++ b/test/files/pos/t3429/A.scala
@@ -0,0 +1,12 @@
+class A {
+ @Test(exc = classOf[Exception])
+ def myTestMethod = 0
+}
+// rytz@chara:~/scala/trunk/sandbox$ javac Test.java
+// rytz@chara:~/scala/trunk/sandbox$ ../build/pack/bin/scalac A.scala
+// A.scala:2: error: type mismatch;
+// found : java.lang.Class[Exception](classOf[java.lang.Exception])
+// required: java.lang.Class
+// @Test(exc = classOf[Exception])
+// ^
+// one error found \ No newline at end of file
diff --git a/test/files/pos/t3429/Test.java b/test/files/pos/t3429/Test.java
new file mode 100644
index 0000000000..e7c57c90c5
--- /dev/null
+++ b/test/files/pos/t3429/Test.java
@@ -0,0 +1,3 @@
+public @interface Test {
+ public Class exc() default Exception.class;
+} \ No newline at end of file
diff --git a/test/files/pos/t3430.flags b/test/files/pos/t3430.flags
new file mode 100644
index 0000000000..eb4d19bcb9
--- /dev/null
+++ b/test/files/pos/t3430.flags
@@ -0,0 +1 @@
+-optimise \ No newline at end of file
diff --git a/test/files/pos/t3430.scala b/test/files/pos/t3430.scala
new file mode 100644
index 0000000000..4990abb2a1
--- /dev/null
+++ b/test/files/pos/t3430.scala
@@ -0,0 +1,13 @@
+// package com.example
+
+object A {
+ def f1(f: String => Boolean) = f("a")
+
+ def f2(): Boolean =
+ f1 { s1 =>
+ f1 { s2 =>
+ while (true) { }
+ true
+ }
+ }
+} \ No newline at end of file
diff --git a/test/files/pos/bug344.scala b/test/files/pos/t344.scala
index 8a6ad9120d..8a6ad9120d 100644
--- a/test/files/pos/bug344.scala
+++ b/test/files/pos/t344.scala
diff --git a/test/files/pos/t3440.scala b/test/files/pos/t3440.scala
new file mode 100644
index 0000000000..46bba1b207
--- /dev/null
+++ b/test/files/pos/t3440.scala
@@ -0,0 +1,18 @@
+object test {
+ abstract class SampleFormat1 {
+ def readerFactory: Any
+ }
+
+ case object Int8 extends SampleFormat1 {
+ def readerFactory = error("")
+ }
+ case object Int16 extends SampleFormat1 {
+ def readerFactory = error("")
+ }
+
+ (new {}: Any) match {
+ case 8 => Int8
+ case 16 => Int16
+ case _ => error("")
+ }
+} \ No newline at end of file
diff --git a/test/files/pos/t3477.scala b/test/files/pos/t3477.scala
new file mode 100644
index 0000000000..660aa55736
--- /dev/null
+++ b/test/files/pos/t3477.scala
@@ -0,0 +1,7 @@
+class J3 {
+ def f[K, K1 >: K, V](x: Map[K1, V]): Map[K, V] = error("")
+}
+
+object Test {
+ (new J3).f(Map[Int, Int]())
+} \ No newline at end of file
diff --git a/test/files/pos/t3480.scala b/test/files/pos/t3480.scala
new file mode 100644
index 0000000000..830365170b
--- /dev/null
+++ b/test/files/pos/t3480.scala
@@ -0,0 +1,4 @@
+object Test {
+ val List(_*) = List(1)
+ val Array( who, what @ _* ) = "Eclipse plugin cannot not handle this" split (" ")
+}
diff --git a/test/files/pos/t3486/JTest.java b/test/files/pos/t3486/JTest.java
new file mode 100644
index 0000000000..0bf388b72d
--- /dev/null
+++ b/test/files/pos/t3486/JTest.java
@@ -0,0 +1,3 @@
+public class JTest<A> extends T2<A> {
+ public A m( A a ) { return a; }
+} \ No newline at end of file
diff --git a/test/files/pos/t3486/test.scala b/test/files/pos/t3486/test.scala
new file mode 100644
index 0000000000..544232b0d1
--- /dev/null
+++ b/test/files/pos/t3486/test.scala
@@ -0,0 +1,6 @@
+trait Test[A] {
+ def m( a: A ): A
+ def specified(a:A):A = a
+}
+
+abstract class T2[A] extends Test[A] \ No newline at end of file
diff --git a/test/files/pos/t348plus.scala b/test/files/pos/t348plus.scala
new file mode 100644
index 0000000000..e61f7346f2
--- /dev/null
+++ b/test/files/pos/t348plus.scala
@@ -0,0 +1,24 @@
+// bug #348
+
+trait Foo {
+ type bar <: Bar;
+ abstract class Bar;
+ case class Baz(r:bar) extends Bar;
+ case object NoBar extends Bar;
+}
+object Test extends App {
+ object ConcreteFooBar extends Foo { // if moved to toplevel, it works
+ type bar = Bar;
+ }
+ def foo = {
+ import ConcreteFooBar._ ;
+ Baz( NoBar )
+ }
+}
+
+// bug #367
+
+object Bla {
+ def foo(): Unit = (return null).equals(null);
+}
+
diff --git a/test/files/pos/t3494.scala b/test/files/pos/t3494.scala
new file mode 100644
index 0000000000..35a4bcde5d
--- /dev/null
+++ b/test/files/pos/t3494.scala
@@ -0,0 +1,7 @@
+object Test {
+ def f[T](xs: T*) = ()
+
+ val x = "abc"
+
+ f[x.type](x)
+} \ No newline at end of file
diff --git a/test/files/pos/t3495.flags b/test/files/pos/t3495.flags
new file mode 100644
index 0000000000..08de722af0
--- /dev/null
+++ b/test/files/pos/t3495.flags
@@ -0,0 +1 @@
+-Dsoot.class.path=bin:.
diff --git a/test/files/pos/t3495.scala b/test/files/pos/t3495.scala
new file mode 100644
index 0000000000..8d5dff4302
--- /dev/null
+++ b/test/files/pos/t3495.scala
@@ -0,0 +1,2 @@
+class Foo { }
+
diff --git a/test/files/pos/t3498.scala b/test/files/pos/t3498.scala
new file mode 100644
index 0000000000..bcc90ca64c
--- /dev/null
+++ b/test/files/pos/t3498.scala
@@ -0,0 +1,15 @@
+abstract class A[T, @specialized(scala.Int) U : Manifest] {
+ def f(state: T): Array[U]
+}
+
+abstract class B extends A[ Array[Byte], Int ] {
+ type T = Array[Byte]
+ type U = Int
+
+ val N = 0
+
+ def f(state: T): Array[U] =
+ {
+ new Array[U](N + state(N))
+ }
+} \ No newline at end of file
diff --git a/test/files/pos/t3521/DoubleValue.java b/test/files/pos/t3521/DoubleValue.java
new file mode 100644
index 0000000000..28f05cd972
--- /dev/null
+++ b/test/files/pos/t3521/DoubleValue.java
@@ -0,0 +1,7 @@
+import java.lang.annotation.*;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.FIELD)
+public @interface DoubleValue {
+ double value();
+} \ No newline at end of file
diff --git a/test/files/pos/t3521/a.scala b/test/files/pos/t3521/a.scala
new file mode 100644
index 0000000000..94bb451fc3
--- /dev/null
+++ b/test/files/pos/t3521/a.scala
@@ -0,0 +1,4 @@
+class Test {
+ @DoubleValue(-0.05)
+ var a = 0
+} \ No newline at end of file
diff --git a/test/files/pos/t3528.scala b/test/files/pos/t3528.scala
new file mode 100644
index 0000000000..b1c4344731
--- /dev/null
+++ b/test/files/pos/t3528.scala
@@ -0,0 +1,8 @@
+class A {
+ // 3528 - not fixed
+ // def f1 = List(List(1), Stream(1))
+ // 3528 comments
+ def f2 = List(Set(1,2,3), List(1,2,3))
+ // 2322
+ def f3 = List(null: Range, null: List[Int])
+}
diff --git a/test/files/pos/t3534.scala b/test/files/pos/t3534.scala
new file mode 100644
index 0000000000..d926d4e286
--- /dev/null
+++ b/test/files/pos/t3534.scala
@@ -0,0 +1,6 @@
+object Test {
+ List[Option[Int]]() match {
+ case None :: bb :: cc => ()
+ case x => throw new Exception(x.filter(_.isDefined).mkString)
+ }
+ } \ No newline at end of file
diff --git a/test/files/pos/t3560.scala b/test/files/pos/t3560.scala
new file mode 100644
index 0000000000..3cde9710dc
--- /dev/null
+++ b/test/files/pos/t3560.scala
@@ -0,0 +1,2 @@
+trait Foo[X] { def foo : Map[String,Foo[X]] }
+object T3560 { def f[T]() : Foo[T] = new Foo[T] { var foo = Map[String,Foo[T]]() } }
diff --git a/test/files/pos/t3567/Foo.scala b/test/files/pos/t3567/Foo.scala
new file mode 100644
index 0000000000..4f83ba9f43
--- /dev/null
+++ b/test/files/pos/t3567/Foo.scala
@@ -0,0 +1,3 @@
+class Foo {
+ val foo = Outer.f()
+}
diff --git a/test/files/pos/t3567/Outer.java b/test/files/pos/t3567/Outer.java
new file mode 100644
index 0000000000..f1f124b808
--- /dev/null
+++ b/test/files/pos/t3567/Outer.java
@@ -0,0 +1,7 @@
+class Outer<T> {
+ class Inner {
+ }
+ static Outer<Integer>.Inner f() {
+ return null;
+ }
+}
diff --git a/test/files/pos/t3568.scala b/test/files/pos/t3568.scala
new file mode 100755
index 0000000000..0f26e2fad3
--- /dev/null
+++ b/test/files/pos/t3568.scala
@@ -0,0 +1,46 @@
+import scala.annotation._
+import scala.annotation.unchecked._
+import scala.collection._
+
+
+package object buffer {
+ val broken = new ArrayVec2() // commenting out this line causes the file to compile.
+
+ val works = Class.forName("buffer.ArrayVec2").newInstance().asInstanceOf[ArrayVec2]
+}
+
+package buffer {
+ object Main {
+ // ArrayVec2 can be compiled, instantiated and used.
+ def main(args: Array[String]) { println(works) }
+ }
+
+ trait ElemType { type Element; type Component <: ElemType }
+ trait Float1 extends ElemType { type Element = Float; type Component = Float1}
+ class Vec2 extends ElemType { type Element = Vec2; type Component = Float1 }
+
+ abstract class BaseSeq[T <: ElemType, E]
+ extends IndexedSeq[E] with IndexedSeqOptimized[E, IndexedSeq[E]] {
+ def length = 1
+ def apply(i: Int) :E
+ }
+
+ abstract class GenericSeq[T <: ElemType] extends BaseSeq[T, T#Element]
+ trait DataArray[T <: ElemType] extends BaseSeq[T, T#Element]
+ trait DataView[T <: ElemType] extends BaseSeq[T, T#Element]
+ abstract class BaseFloat1 extends BaseSeq[Float1, Float]
+
+ class ArrayFloat1 extends BaseFloat1 with DataArray[Float1] {
+ def apply(i: Int) :Float = 0f
+ }
+
+ class ViewFloat1 extends BaseFloat1 with DataView[Float1] {
+ def apply(i: Int) :Float = 0f
+ }
+
+ class ArrayVec2(val backingSeq: ArrayFloat1)
+ extends GenericSeq[Vec2] with DataArray[Vec2] {
+ def this() = this(new ArrayFloat1)
+ def apply(i: Int) :Vec2 = null
+ }
+}
diff --git a/test/files/pos/t3570.scala b/test/files/pos/t3570.scala
new file mode 100644
index 0000000000..8921f83b2a
--- /dev/null
+++ b/test/files/pos/t3570.scala
@@ -0,0 +1,7 @@
+class test {
+ object Break extends Throwable
+ def break = throw Break
+ def block(x: => Unit) {
+ try { x } catch { case e: Break.type => }
+ }
+}
diff --git a/test/files/pos/t3578.scala b/test/files/pos/t3578.scala
new file mode 100644
index 0000000000..306cde811b
--- /dev/null
+++ b/test/files/pos/t3578.scala
@@ -0,0 +1,30 @@
+object Test {
+ sealed abstract class JValue {
+ def ++(other: JValue) = {
+ def append(value1: JValue, value2: JValue): JValue = (value1, value2) match {
+ case (JNothing, x) => x
+ case (x, JNothing) => x
+ case (JObject(xs), x: JField) => JObject(xs ::: List(x))
+ case (x: JField, JObject(xs)) => JObject(x :: xs)
+ case (JArray(xs), JArray(ys)) => JArray(xs ::: ys)
+ case (JArray(xs), v: JValue) => JArray(xs ::: List(v))
+ case (v: JValue, JArray(xs)) => JArray(v :: xs)
+ case (f1: JField, f2: JField) => JObject(f1 :: f2 :: Nil)
+ case (JField(n, v1), v2: JValue) => JField(n, append(v1, v2))
+ case (x, y) => JArray(x :: y :: Nil)
+ }
+ append(this, other)
+ }
+ }
+
+ case object JNothing extends JValue
+ case object JNull extends JValue
+ case class JString(s: String) extends JValue
+ case class JDouble(num: Double) extends JValue
+ case class JInt(num: BigInt) extends JValue
+ case class JBool(value: Boolean) extends JValue
+ case class JField(name: String, value: JValue) extends JValue
+ case class JObject(obj: List[JField]) extends JValue
+ case class JArray(arr: List[JValue]) extends JValue
+}
+
diff --git a/test/files/pos/t3582.scala b/test/files/pos/t3582.scala
new file mode 100644
index 0000000000..e20af5e61d
--- /dev/null
+++ b/test/files/pos/t3582.scala
@@ -0,0 +1,12 @@
+trait C[A]
+object Test {
+ def ImplicitParamCA[CC[A], A](implicit ev: C[A]) {implicitly[C[A]]} // must use this exact syntax...
+ // error: could not find implicit value for parameter e: C[A]
+}
+// [[syntax trees at end of typer]]
+// abstract trait C#5[A#9116 >: Nothing#5832 <: Any#52] extends scala#33.AnyRef#2780;
+// final object Test#15 extends java.lang.Object#2485 with ScalaObject#1913 {
+// def ImplicitParamCA#9123[CC#9124[A#10858 >: Nothing#5832 <: Any#52] >: [A#10858]Nothing#5832 <: [A#10858]Any#52,
+// A#9125 >: Nothing#5832 <: Any#52](implicit ev#10856: C#5[A#9127]): Unit#3818
+// = scala#34.this.Predef#1683.implicitly#8816[C#5[A#10858]]()
+// }
diff --git a/test/files/pos/t3582b.scala b/test/files/pos/t3582b.scala
new file mode 100644
index 0000000000..8f0bfb9b2a
--- /dev/null
+++ b/test/files/pos/t3582b.scala
@@ -0,0 +1,5 @@
+object ParamScoping {
+ // scoping worked fine in the result type, but was wrong in body
+ // reason: typedTypeDef needs new context, which was set up by typed1 but not by typedDefDef and typedClassDef
+ def noOverlapFOwithHO[T, G[T]]: G[T] = null.asInstanceOf[G[T]]
+} \ No newline at end of file
diff --git a/test/files/pos/bug359.scala b/test/files/pos/t359.scala
index 11233c3ba4..11233c3ba4 100644
--- a/test/files/pos/bug359.scala
+++ b/test/files/pos/t359.scala
diff --git a/test/files/pos/bug360.scala b/test/files/pos/t360.scala
index f3716d4f97..f3716d4f97 100644
--- a/test/files/pos/bug360.scala
+++ b/test/files/pos/t360.scala
diff --git a/test/files/pos/bug361.scala b/test/files/pos/t361.scala
index 1d19ecb523..1d19ecb523 100644
--- a/test/files/pos/bug361.scala
+++ b/test/files/pos/t361.scala
diff --git a/test/files/pos/t3612.scala b/test/files/pos/t3612.scala
new file mode 100644
index 0000000000..d3bcc373e3
--- /dev/null
+++ b/test/files/pos/t3612.scala
@@ -0,0 +1,6 @@
+trait C
+
+class Outer {
+ object O0 extends C {}
+ object O extends C { self => }
+} \ No newline at end of file
diff --git a/test/files/pos/t3622/AsyncTask.java b/test/files/pos/t3622/AsyncTask.java
new file mode 100644
index 0000000000..cfcea3fe1a
--- /dev/null
+++ b/test/files/pos/t3622/AsyncTask.java
@@ -0,0 +1,5 @@
+package test;
+
+public abstract class AsyncTask<Params, Progress, Result> {
+ protected abstract Result doInBackground(Params... args);
+} \ No newline at end of file
diff --git a/test/files/pos/t3622/MyAsyncTask.java b/test/files/pos/t3622/MyAsyncTask.java
new file mode 100644
index 0000000000..9ef4947052
--- /dev/null
+++ b/test/files/pos/t3622/MyAsyncTask.java
@@ -0,0 +1,9 @@
+package test;
+
+public abstract class MyAsyncTask extends AsyncTask<String, String, String> {
+ protected abstract String doInBackground1(String[] args);
+ @Override
+ protected String doInBackground(String... args) {
+ return doInBackground1(new String[]{"dummy"});
+ }
+} \ No newline at end of file
diff --git a/test/files/pos/t3622/Test.scala b/test/files/pos/t3622/Test.scala
new file mode 100644
index 0000000000..fb82c581f9
--- /dev/null
+++ b/test/files/pos/t3622/Test.scala
@@ -0,0 +1,5 @@
+package test
+
+class Test extends MyAsyncTask {
+ protected[test] def doInBackground1(args: Array[String]): String = ""
+} \ No newline at end of file
diff --git a/test/files/pos/t3636.scala b/test/files/pos/t3636.scala
new file mode 100644
index 0000000000..dbfc7a2c94
--- /dev/null
+++ b/test/files/pos/t3636.scala
@@ -0,0 +1,49 @@
+class CTxnLocal[ T ] {
+ def set( x: T )( implicit t: Txn ) {}
+ def get( implicit t: Txn ) : T = null.asInstanceOf[ T ]
+ def initialValue( t: Txn ) : T = null.asInstanceOf[ T ]
+}
+
+trait Txn
+
+trait ProcTxn {
+ def ccstm: Txn
+}
+
+trait TxnLocal[ @specialized T ] {
+ def apply()( implicit tx: ProcTxn ) : T
+ def set( v: T )( implicit tx: ProcTxn ) : Unit
+ def swap( v: T )( implicit tx: ProcTxn ) : T
+ def transform( f: T => T )( implicit tx: ProcTxn ) : Unit
+}
+
+object TxnLocal {
+ def apply[ @specialized T ] : TxnLocal[ T ] = new Impl( new CTxnLocal[ T ])
+ def apply[ @specialized T ]( initValue: => T ) : TxnLocal[ T ] = new Impl( new CTxnLocal[ T ] {
+ override def initialValue( tx: Txn ): T = initValue
+ })
+
+ private class Impl[ T ]( c: CTxnLocal[ T ]) extends TxnLocal[ T ] {
+ def apply()( implicit tx: ProcTxn ) : T = c.get( tx.ccstm )
+ def set( v: T )( implicit tx: ProcTxn ) : Unit = c.set( v )( tx.ccstm )
+ def swap( v: T )( implicit tx: ProcTxn ) : T = {
+ // currently not implemented in CTxnLocal
+ val oldV = apply
+ set( v )
+ oldV
+ }
+ def transform( f: T => T )( implicit tx: ProcTxn ) {
+ set( f( apply ))
+ }
+ }
+}
+
+
+object Transition {
+ private val currentRef = TxnLocal[ Transition ]( Instant )
+ def current( implicit tx: ProcTxn ) : Transition = currentRef()
+}
+
+sealed abstract class Transition
+case object Instant extends Transition
+
diff --git a/test/files/pos/t3642/Tuppel_1.java b/test/files/pos/t3642/Tuppel_1.java
new file mode 100644
index 0000000000..07c715ee90
--- /dev/null
+++ b/test/files/pos/t3642/Tuppel_1.java
@@ -0,0 +1,7 @@
+public class Tuppel_1<T> {
+ private Tuppel_1(){}
+
+ public static <A> Tuppel_1<A> get() {
+ return new Tuppel_1<A>() {};
+ }
+} \ No newline at end of file
diff --git a/test/files/pos/t3642/t3642_2.scala b/test/files/pos/t3642/t3642_2.scala
new file mode 100644
index 0000000000..0892e508a5
--- /dev/null
+++ b/test/files/pos/t3642/t3642_2.scala
@@ -0,0 +1,3 @@
+object T {
+ Tuppel_1.get
+} \ No newline at end of file
diff --git a/test/files/pos/t3670.scala b/test/files/pos/t3670.scala
new file mode 100644
index 0000000000..19959f910f
--- /dev/null
+++ b/test/files/pos/t3670.scala
@@ -0,0 +1,43 @@
+class A {
+ val n = {
+ val z = {
+ lazy val bb = 1
+ bb
+ }
+ val a = {
+ lazy val cc = 2
+ cc
+ }
+ lazy val b = {
+ lazy val dd = 3
+ dd
+ }
+ z
+ }
+}
+
+class B {
+ locally {
+ lazy val ms = "as"
+ ms
+ }
+}
+
+class C {
+ val things = List("things")
+ if(things.size < 100) {
+ lazy val msg = "foo"
+ msg
+ }
+}
+
+class D {
+ val things = List("things")
+ if(things.size < 100) {
+ if (things.size > 10) {
+ lazy val msg = "foo"
+ msg
+ }
+ }
+}
+
diff --git a/test/files/pos/t3671.scala b/test/files/pos/t3671.scala
new file mode 100644
index 0000000000..75559f84e2
--- /dev/null
+++ b/test/files/pos/t3671.scala
@@ -0,0 +1,7 @@
+object Crash {
+ def crash(value: Int): Unit =
+ value match {
+ case java.lang.Integer.MAX_VALUE => println("MAX_VALUE")
+ case java.lang.Integer.MIN_VALUE => println("MIN_VALUE")
+ }
+} \ No newline at end of file
diff --git a/test/files/pos/t3672.scala b/test/files/pos/t3672.scala
new file mode 100644
index 0000000000..b2752ce21f
--- /dev/null
+++ b/test/files/pos/t3672.scala
@@ -0,0 +1,4 @@
+object Test {
+ def foo(f: Int => Int) = () ; foo { implicit x : Int => x + 1 }
+ def bar(f: Int => Int) = () ; foo { x : Int => x + 1 }
+}
diff --git a/test/files/pos/t3676.scala b/test/files/pos/t3676.scala
new file mode 100644
index 0000000000..60c0ceaec8
--- /dev/null
+++ b/test/files/pos/t3676.scala
@@ -0,0 +1,5 @@
+trait SeqLike[+Repr]
+trait Seq extends SeqLike[Seq]
+
+trait MySeq extends Seq with SeqLike[MySub]
+trait MySub extends MySeq
diff --git a/test/files/pos/t3688-redux.scala b/test/files/pos/t3688-redux.scala
new file mode 100644
index 0000000000..e601cf240c
--- /dev/null
+++ b/test/files/pos/t3688-redux.scala
@@ -0,0 +1,8 @@
+import collection.JavaConverters._
+import java.{ util => ju }
+import scala.collection.{ mutable, immutable }
+
+object Test {
+ def m[P <% AsJava[ju.List[Int]]](l: P) = 1
+ m(List(1))
+} \ No newline at end of file
diff --git a/test/files/pos/t3688.scala b/test/files/pos/t3688.scala
new file mode 100644
index 0000000000..d15e9d1a84
--- /dev/null
+++ b/test/files/pos/t3688.scala
@@ -0,0 +1,14 @@
+import collection.mutable
+import collection.JavaConversions._
+import java.{util => ju}
+
+object Test {
+
+ implicitly[mutable.Map[Int, String] => ju.Dictionary[Int, String]]
+
+}
+
+object Test2 {
+ def m[P <% ju.List[Int]](l: P) = 1
+ m(List(1)) // bug: should compile
+} \ No newline at end of file
diff --git a/test/files/pos/bug372.scala b/test/files/pos/t372.scala
index 9ce5b9ab72..9ce5b9ab72 100644
--- a/test/files/pos/bug372.scala
+++ b/test/files/pos/t372.scala
diff --git a/test/files/pos/t3731.scala b/test/files/pos/t3731.scala
new file mode 100644
index 0000000000..75938540c0
--- /dev/null
+++ b/test/files/pos/t3731.scala
@@ -0,0 +1,13 @@
+object Test{
+ trait ZW[S]{type T}
+ def ZipWith[S, M <: ZW[S]]: M#T = error("ZW")
+
+ // meh must be parameterised to force an asSeenFrom that
+ // duplicates the refinement in the TR's pre without updating its sym
+ def meh[A] = ZipWith[A, ZW[A]{type T=Stream[A]}]
+
+ meh[Int]: Stream[Int]
+}
+// debugging output in coevolveSym should say:
+// coevolved type T#11029 : Stream#3234[A#9228] to type T#11277 : Stream#3234[A#9227]
+// with Test.ZW#9219[A#9228]{type T#11029 = Stream#3234[A#9228]} -> Test.ZW#9219[A#9227]{type T#11277 = Stream#3234[A#9227]}
diff --git a/test/files/pos/t374.scala b/test/files/pos/t374.scala
new file mode 100644
index 0000000000..fb9c0b4027
--- /dev/null
+++ b/test/files/pos/t374.scala
@@ -0,0 +1,21 @@
+object tokens extends Enumeration {
+ type Token = Value;
+ val BAD = Value("<bad>");
+ val IDENT = Value("ident");
+ val NAME = Value("name");
+}
+
+object test extends AnyRef with App {
+ import tokens._;
+
+ val reserved = new scala.collection.mutable.HashMap[String, Token]();
+
+ if (true) {
+ reserved.get("a") match {
+ case None => IDENT
+ case Some(tk) => tk
+ }
+ }
+ else
+ BAD
+}
diff --git a/test/files/pos/t3774.scala b/test/files/pos/t3774.scala
new file mode 100644
index 0000000000..2869925b01
--- /dev/null
+++ b/test/files/pos/t3774.scala
@@ -0,0 +1,5 @@
+// This used to hang the lub process. Now it rejects the file. This is still not correct,
+// but we can solve this only after a redesign of lub a la dot.
+object Hang {
+ Map[(Int,Int),List[Int]]() ++ (for(x <- 0 to 1 ; y <- 0 to 1) yield {(x,y)-> (0 to 1)})
+}
diff --git a/test/files/pos/t3777.scala b/test/files/pos/t3777.scala
new file mode 100644
index 0000000000..165eeebfdb
--- /dev/null
+++ b/test/files/pos/t3777.scala
@@ -0,0 +1,7 @@
+object Test {
+ type Point = Map[Symbol, String]
+ type Points = IndexedSeq[Point]
+
+ def makePoints2: Points = IndexedSeq[Point]()
+ val spoints2 = util.Random.shuffle(makePoints2)
+}
diff --git a/test/files/pos/t3792.scala b/test/files/pos/t3792.scala
new file mode 100644
index 0000000000..10773c5f5b
--- /dev/null
+++ b/test/files/pos/t3792.scala
@@ -0,0 +1,4 @@
+object Test {
+ type Hui = Nil.type
+ val n: Hui = Nil
+} \ No newline at end of file
diff --git a/test/files/pos/t3800.scala b/test/files/pos/t3800.scala
new file mode 100644
index 0000000000..796eb268c5
--- /dev/null
+++ b/test/files/pos/t3800.scala
@@ -0,0 +1,6 @@
+class meh extends StaticAnnotation
+
+class ALike[C]
+abstract class AFactory[CC[x] <: ALike[CC[x]]] {
+ def aCompanion : AFactory[CC @meh]
+} \ No newline at end of file
diff --git a/test/files/pos/t3808.scala b/test/files/pos/t3808.scala
new file mode 100644
index 0000000000..294621803a
--- /dev/null
+++ b/test/files/pos/t3808.scala
@@ -0,0 +1,11 @@
+object Test {
+ def meh: Unit = {
+ trait TC[I]
+ implicit val tci = new TC[Int]{}
+
+ def baz[J : TC] : String = "meh"
+
+ baz
+ // () // commenting or uncommenting this line should not affect compilation (visibly)
+ }
+} \ No newline at end of file
diff --git a/test/files/pos/t3833.scala b/test/files/pos/t3833.scala
new file mode 100644
index 0000000000..c49e9339ca
--- /dev/null
+++ b/test/files/pos/t3833.scala
@@ -0,0 +1,26 @@
+object Main {
+ def mkArray[T <: A](atype: Int) :T#AType = {
+ (atype match {
+ case 1 =>
+ new Array[Int](10)
+ // Decompiled code: return (Object[])new int[10];
+ case 2 =>
+ new Array[Float](10)
+ }).asInstanceOf[T#AType]
+ }
+
+ def main(args: Array[String]) {
+ println(mkArray[I](1))
+ //java.lang.ClassCastException: [I cannot be cast to [Ljava.lang.Object;
+ }
+}
+
+trait A {
+ type AType <: AnyRef
+}
+trait I extends A {
+ type AType = Array[Int]
+}
+trait F extends A {
+ type AType = Array[Float]
+}
diff --git a/test/files/pos/t3837.scala b/test/files/pos/t3837.scala
new file mode 100644
index 0000000000..e1797dba77
--- /dev/null
+++ b/test/files/pos/t3837.scala
@@ -0,0 +1,10 @@
+class BipClass { }
+trait BipTrait {
+ self: BipClass =>
+
+ private[this] def foo() = 5
+ def bar() = this.foo()
+}
+// error: value foo is not a member of BipTrait with BipClass
+// def bar() = this.foo()
+// ^
diff --git a/test/files/pos/t3856.scala b/test/files/pos/t3856.scala
new file mode 100644
index 0000000000..fd253a56a8
--- /dev/null
+++ b/test/files/pos/t3856.scala
@@ -0,0 +1,8 @@
+case class C[T](x: T)
+
+case class CS(xs: C[_]*)
+
+object Test {
+ val x = CS(C(5), C("abc")) match { case CS(C(5), xs @ _*) => xs }
+ println(x)
+}
diff --git a/test/files/pos/t3859.scala b/test/files/pos/t3859.scala
new file mode 100644
index 0000000000..83d4c37b29
--- /dev/null
+++ b/test/files/pos/t3859.scala
@@ -0,0 +1,4 @@
+class Test {
+ def foo: Unit = bar(Array(): _*)
+ def bar(values: AnyRef*): Unit = ()
+} \ No newline at end of file
diff --git a/test/files/pos/t3861.scala b/test/files/pos/t3861.scala
new file mode 100644
index 0000000000..5ebe025203
--- /dev/null
+++ b/test/files/pos/t3861.scala
@@ -0,0 +1,2 @@
+trait Y
+abstract class X(x: Int) { self: Y => x }
diff --git a/test/files/pos/t3862.scala b/test/files/pos/t3862.scala
new file mode 100644
index 0000000000..a6dba84fea
--- /dev/null
+++ b/test/files/pos/t3862.scala
@@ -0,0 +1,8 @@
+object OverloadingShapeType {
+ // comment out this, and the other alternative is chosen.
+ def blerg(f: String) {}
+
+ def blerg[M[X], T](l: M[T]) {}
+
+ blerg(List(1)) // error: type mismatch; found : List[Int] required: String
+} \ No newline at end of file
diff --git a/test/files/pos/t3864/scalaz_2.scala b/test/files/pos/t3864/scalaz_2.scala
new file mode 100644
index 0000000000..a3f5b69617
--- /dev/null
+++ b/test/files/pos/t3864/scalaz_2.scala
@@ -0,0 +1 @@
+object Scalaz extends Tuples \ No newline at end of file
diff --git a/test/files/pos/t3864/tuples_1.scala b/test/files/pos/t3864/tuples_1.scala
new file mode 100644
index 0000000000..1d19af6e41
--- /dev/null
+++ b/test/files/pos/t3864/tuples_1.scala
@@ -0,0 +1,78 @@
+trait PimpedType[X] {
+ val value: X
+}
+
+trait Tuples {
+
+
+trait Tuple15W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O] extends PimpedType[Tuple15[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O]] {
+ def fold[Z](f: => (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O) => Z): Z = {import value._; f(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15)}
+ def toIndexedSeq[Z](implicit ev: value.type <:< Tuple15[Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z]): IndexedSeq[Z] = {val zs = ev(value); import zs._; IndexedSeq(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15)}
+ def mapElements[AA, BB, CC, DD, EE, FF, GG, HH, II, JJ, KK, LL, MM, NN, OO](_1: (A => AA) = identity[A] _, _2: (B => BB) = identity[B] _, _3: (C => CC) = identity[C] _, _4: (D => DD) = identity[D] _, _5: (E => EE) = identity[E] _, _6: (F => FF) = identity[F] _, _7: (G => GG) = identity[G] _, _8: (H => HH) = identity[H] _, _9: (I => II) = identity[I] _, _10: (J => JJ) = identity[J] _, _11: (K => KK) = identity[K] _, _12: (L => LL) = identity[L] _, _13: (M => MM) = identity[M] _, _14: (N => NN) = identity[N] _, _15: (O => OO) = identity[O] _): (AA, BB, CC, DD, EE, FF, GG, HH, II, JJ, KK, LL, MM, NN, OO) = (_1(value._1), _2(value._2), _3(value._3), _4(value._4), _5(value._5), _6(value._6), _7(value._7), _8(value._8), _9(value._9), _10(value._10), _11(value._11), _12(value._12), _13(value._13), _14(value._14), _15(value._15))
+}
+
+implicit def ToTuple15W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O](t: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O)): Tuple15W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O] = new { val value = t } with Tuple15W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O]
+
+
+trait Tuple16W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P] extends PimpedType[Tuple16[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P]] {
+ def fold[Z](f: => (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P) => Z): Z = {import value._; f(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16)}
+ def toIndexedSeq[Z](implicit ev: value.type <:< Tuple16[Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z]): IndexedSeq[Z] = {val zs = ev(value); import zs._; IndexedSeq(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16)}
+ def mapElements[AA, BB, CC, DD, EE, FF, GG, HH, II, JJ, KK, LL, MM, NN, OO, PP](_1: (A => AA) = identity[A] _, _2: (B => BB) = identity[B] _, _3: (C => CC) = identity[C] _, _4: (D => DD) = identity[D] _, _5: (E => EE) = identity[E] _, _6: (F => FF) = identity[F] _, _7: (G => GG) = identity[G] _, _8: (H => HH) = identity[H] _, _9: (I => II) = identity[I] _, _10: (J => JJ) = identity[J] _, _11: (K => KK) = identity[K] _, _12: (L => LL) = identity[L] _, _13: (M => MM) = identity[M] _, _14: (N => NN) = identity[N] _, _15: (O => OO) = identity[O] _, _16: (P => PP) = identity[P] _): (AA, BB, CC, DD, EE, FF, GG, HH, II, JJ, KK, LL, MM, NN, OO, PP) = (_1(value._1), _2(value._2), _3(value._3), _4(value._4), _5(value._5), _6(value._6), _7(value._7), _8(value._8), _9(value._9), _10(value._10), _11(value._11), _12(value._12), _13(value._13), _14(value._14), _15(value._15), _16(value._16))
+}
+
+implicit def ToTuple16W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P](t: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P)): Tuple16W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P] = new { val value = t } with Tuple16W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P]
+
+
+trait Tuple17W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q] extends PimpedType[Tuple17[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q]] {
+ def fold[Z](f: => (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q) => Z): Z = {import value._; f(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17)}
+ def toIndexedSeq[Z](implicit ev: value.type <:< Tuple17[Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z]): IndexedSeq[Z] = {val zs = ev(value); import zs._; IndexedSeq(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17)}
+ def mapElements[AA, BB, CC, DD, EE, FF, GG, HH, II, JJ, KK, LL, MM, NN, OO, PP, QQ](_1: (A => AA) = identity[A] _, _2: (B => BB) = identity[B] _, _3: (C => CC) = identity[C] _, _4: (D => DD) = identity[D] _, _5: (E => EE) = identity[E] _, _6: (F => FF) = identity[F] _, _7: (G => GG) = identity[G] _, _8: (H => HH) = identity[H] _, _9: (I => II) = identity[I] _, _10: (J => JJ) = identity[J] _, _11: (K => KK) = identity[K] _, _12: (L => LL) = identity[L] _, _13: (M => MM) = identity[M] _, _14: (N => NN) = identity[N] _, _15: (O => OO) = identity[O] _, _16: (P => PP) = identity[P] _, _17: (Q => QQ) = identity[Q] _): (AA, BB, CC, DD, EE, FF, GG, HH, II, JJ, KK, LL, MM, NN, OO, PP, QQ) = (_1(value._1), _2(value._2), _3(value._3), _4(value._4), _5(value._5), _6(value._6), _7(value._7), _8(value._8), _9(value._9), _10(value._10), _11(value._11), _12(value._12), _13(value._13), _14(value._14), _15(value._15), _16(value._16), _17(value._17))
+}
+
+implicit def ToTuple17W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q](t: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q)): Tuple17W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q] = new { val value = t } with Tuple17W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q]
+
+
+trait Tuple18W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R] extends PimpedType[Tuple18[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R]] {
+ def fold[Z](f: => (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R) => Z): Z = {import value._; f(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18)}
+ def toIndexedSeq[Z](implicit ev: value.type <:< Tuple18[Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z]): IndexedSeq[Z] = {val zs = ev(value); import zs._; IndexedSeq(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18)}
+ def mapElements[AA, BB, CC, DD, EE, FF, GG, HH, II, JJ, KK, LL, MM, NN, OO, PP, QQ, RR](_1: (A => AA) = identity[A] _, _2: (B => BB) = identity[B] _, _3: (C => CC) = identity[C] _, _4: (D => DD) = identity[D] _, _5: (E => EE) = identity[E] _, _6: (F => FF) = identity[F] _, _7: (G => GG) = identity[G] _, _8: (H => HH) = identity[H] _, _9: (I => II) = identity[I] _, _10: (J => JJ) = identity[J] _, _11: (K => KK) = identity[K] _, _12: (L => LL) = identity[L] _, _13: (M => MM) = identity[M] _, _14: (N => NN) = identity[N] _, _15: (O => OO) = identity[O] _, _16: (P => PP) = identity[P] _, _17: (Q => QQ) = identity[Q] _, _18: (R => RR) = identity[R] _): (AA, BB, CC, DD, EE, FF, GG, HH, II, JJ, KK, LL, MM, NN, OO, PP, QQ, RR) = (_1(value._1), _2(value._2), _3(value._3), _4(value._4), _5(value._5), _6(value._6), _7(value._7), _8(value._8), _9(value._9), _10(value._10), _11(value._11), _12(value._12), _13(value._13), _14(value._14), _15(value._15), _16(value._16), _17(value._17), _18(value._18))
+}
+
+implicit def ToTuple18W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R](t: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R)): Tuple18W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R] = new { val value = t } with Tuple18W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R]
+
+
+trait Tuple19W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S] extends PimpedType[Tuple19[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S]] {
+ def fold[Z](f: => (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S) => Z): Z = {import value._; f(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19)}
+ def toIndexedSeq[Z](implicit ev: value.type <:< Tuple19[Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z]): IndexedSeq[Z] = {val zs = ev(value); import zs._; IndexedSeq(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19)}
+ def mapElements[AA, BB, CC, DD, EE, FF, GG, HH, II, JJ, KK, LL, MM, NN, OO, PP, QQ, RR, SS](_1: (A => AA) = identity[A] _, _2: (B => BB) = identity[B] _, _3: (C => CC) = identity[C] _, _4: (D => DD) = identity[D] _, _5: (E => EE) = identity[E] _, _6: (F => FF) = identity[F] _, _7: (G => GG) = identity[G] _, _8: (H => HH) = identity[H] _, _9: (I => II) = identity[I] _, _10: (J => JJ) = identity[J] _, _11: (K => KK) = identity[K] _, _12: (L => LL) = identity[L] _, _13: (M => MM) = identity[M] _, _14: (N => NN) = identity[N] _, _15: (O => OO) = identity[O] _, _16: (P => PP) = identity[P] _, _17: (Q => QQ) = identity[Q] _, _18: (R => RR) = identity[R] _, _19: (S => SS) = identity[S] _): (AA, BB, CC, DD, EE, FF, GG, HH, II, JJ, KK, LL, MM, NN, OO, PP, QQ, RR, SS) = (_1(value._1), _2(value._2), _3(value._3), _4(value._4), _5(value._5), _6(value._6), _7(value._7), _8(value._8), _9(value._9), _10(value._10), _11(value._11), _12(value._12), _13(value._13), _14(value._14), _15(value._15), _16(value._16), _17(value._17), _18(value._18), _19(value._19))
+}
+
+implicit def ToTuple19W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S](t: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S)): Tuple19W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S] = new { val value = t } with Tuple19W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S]
+
+
+trait Tuple20W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T] extends PimpedType[Tuple20[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T]] {
+ def fold[Z](f: => (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T) => Z): Z = {import value._; f(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20)}
+ def toIndexedSeq[Z](implicit ev: value.type <:< Tuple20[Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z]): IndexedSeq[Z] = {val zs = ev(value); import zs._; IndexedSeq(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20)}
+ def mapElements[AA, BB, CC, DD, EE, FF, GG, HH, II, JJ, KK, LL, MM, NN, OO, PP, QQ, RR, SS, TT](_1: (A => AA) = identity[A] _, _2: (B => BB) = identity[B] _, _3: (C => CC) = identity[C] _, _4: (D => DD) = identity[D] _, _5: (E => EE) = identity[E] _, _6: (F => FF) = identity[F] _, _7: (G => GG) = identity[G] _, _8: (H => HH) = identity[H] _, _9: (I => II) = identity[I] _, _10: (J => JJ) = identity[J] _, _11: (K => KK) = identity[K] _, _12: (L => LL) = identity[L] _, _13: (M => MM) = identity[M] _, _14: (N => NN) = identity[N] _, _15: (O => OO) = identity[O] _, _16: (P => PP) = identity[P] _, _17: (Q => QQ) = identity[Q] _, _18: (R => RR) = identity[R] _, _19: (S => SS) = identity[S] _, _20: (T => TT) = identity[T] _): (AA, BB, CC, DD, EE, FF, GG, HH, II, JJ, KK, LL, MM, NN, OO, PP, QQ, RR, SS, TT) = (_1(value._1), _2(value._2), _3(value._3), _4(value._4), _5(value._5), _6(value._6), _7(value._7), _8(value._8), _9(value._9), _10(value._10), _11(value._11), _12(value._12), _13(value._13), _14(value._14), _15(value._15), _16(value._16), _17(value._17), _18(value._18), _19(value._19), _20(value._20))
+}
+
+implicit def ToTuple20W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T](t: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T)): Tuple20W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T] = new { val value = t } with Tuple20W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T]
+
+
+trait Tuple21W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U] extends PimpedType[Tuple21[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U]] {
+ def fold[Z](f: => (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U) => Z): Z = {import value._; f(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21)}
+ def toIndexedSeq[Z](implicit ev: value.type <:< Tuple21[Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z]): IndexedSeq[Z] = {val zs = ev(value); import zs._; IndexedSeq(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21)}
+ def mapElements[AA, BB, CC, DD, EE, FF, GG, HH, II, JJ, KK, LL, MM, NN, OO, PP, QQ, RR, SS, TT, UU](_1: (A => AA) = identity[A] _, _2: (B => BB) = identity[B] _, _3: (C => CC) = identity[C] _, _4: (D => DD) = identity[D] _, _5: (E => EE) = identity[E] _, _6: (F => FF) = identity[F] _, _7: (G => GG) = identity[G] _, _8: (H => HH) = identity[H] _, _9: (I => II) = identity[I] _, _10: (J => JJ) = identity[J] _, _11: (K => KK) = identity[K] _, _12: (L => LL) = identity[L] _, _13: (M => MM) = identity[M] _, _14: (N => NN) = identity[N] _, _15: (O => OO) = identity[O] _, _16: (P => PP) = identity[P] _, _17: (Q => QQ) = identity[Q] _, _18: (R => RR) = identity[R] _, _19: (S => SS) = identity[S] _, _20: (T => TT) = identity[T] _, _21: (U => UU) = identity[U] _): (AA, BB, CC, DD, EE, FF, GG, HH, II, JJ, KK, LL, MM, NN, OO, PP, QQ, RR, SS, TT, UU) = (_1(value._1), _2(value._2), _3(value._3), _4(value._4), _5(value._5), _6(value._6), _7(value._7), _8(value._8), _9(value._9), _10(value._10), _11(value._11), _12(value._12), _13(value._13), _14(value._14), _15(value._15), _16(value._16), _17(value._17), _18(value._18), _19(value._19), _20(value._20), _21(value._21))
+}
+
+implicit def ToTuple21W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U](t: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U)): Tuple21W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U] = new { val value = t } with Tuple21W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U]
+
+
+trait Tuple22W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V] extends PimpedType[Tuple22[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V]] {
+ def fold[Z](f: => (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V) => Z): Z = {import value._; f(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22)}
+ def toIndexedSeq[Z](implicit ev: value.type <:< Tuple22[Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z]): IndexedSeq[Z] = {val zs = ev(value); import zs._; IndexedSeq(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22)}
+ def mapElements[AA, BB, CC, DD, EE, FF, GG, HH, II, JJ, KK, LL, MM, NN, OO, PP, QQ, RR, SS, TT, UU, VV](_1: (A => AA) = identity[A] _, _2: (B => BB) = identity[B] _, _3: (C => CC) = identity[C] _, _4: (D => DD) = identity[D] _, _5: (E => EE) = identity[E] _, _6: (F => FF) = identity[F] _, _7: (G => GG) = identity[G] _, _8: (H => HH) = identity[H] _, _9: (I => II) = identity[I] _, _10: (J => JJ) = identity[J] _, _11: (K => KK) = identity[K] _, _12: (L => LL) = identity[L] _, _13: (M => MM) = identity[M] _, _14: (N => NN) = identity[N] _, _15: (O => OO) = identity[O] _, _16: (P => PP) = identity[P] _, _17: (Q => QQ) = identity[Q] _, _18: (R => RR) = identity[R] _, _19: (S => SS) = identity[S] _, _20: (T => TT) = identity[T] _, _21: (U => UU) = identity[U] _, _22: (V => VV) = identity[V] _): (AA, BB, CC, DD, EE, FF, GG, HH, II, JJ, KK, LL, MM, NN, OO, PP, QQ, RR, SS, TT, UU, VV) = (_1(value._1), _2(value._2), _3(value._3), _4(value._4), _5(value._5), _6(value._6), _7(value._7), _8(value._8), _9(value._9), _10(value._10), _11(value._11), _12(value._12), _13(value._13), _14(value._14), _15(value._15), _16(value._16), _17(value._17), _18(value._18), _19(value._19), _20(value._20), _21(value._21), _22(value._22))
+}
+
+implicit def ToTuple22W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V](t: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V)): Tuple22W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V] = new { val value = t } with Tuple22W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V]
+} \ No newline at end of file
diff --git a/test/files/pos/t3866.scala b/test/files/pos/t3866.scala
new file mode 100644
index 0000000000..5fe7e3f50e
--- /dev/null
+++ b/test/files/pos/t3866.scala
@@ -0,0 +1,17 @@
+abstract class ImplicitRepeated {
+ trait T[+A, +B]
+ trait X
+
+ def f[N, R <: List[_]](elems: T[N, R]*) // alternative a)
+ def f[N, R <: List[_]](props: String, elems: T[N, R]*) // alternative b)
+
+ // the following implicit causes "cannot be applied" errors
+ implicit def xToRight(r: X): T[Nothing, X] = null
+ implicit def anyToN[N](x: N): T[N, Nothing] = null
+
+
+ f("A", 1, 2) // should be implicitly resolved to alternative b)
+ f( 1, 2 ) // should be implicitly resolved to alternative a)
+ // ImplicitRepeated.this.f[Int, Nothing]("A", ImplicitRepeated.this.anyToN[Int](1), ImplicitRepeated.this.anyToN[Int](2));
+ // ImplicitRepeated.this.f[Int, Nothing](ImplicitRepeated.this.anyToN[Int](1), ImplicitRepeated.this.anyToN[Int](2))
+} \ No newline at end of file
diff --git a/test/files/pos/t3869.scala b/test/files/pos/t3869.scala
new file mode 100644
index 0000000000..acd19abb24
--- /dev/null
+++ b/test/files/pos/t3869.scala
@@ -0,0 +1,10 @@
+
+// see ticket #3869
+object Test {
+ def f: Unit =
+ try return finally while(true) ()
+
+ def main(args: Array[String]) {
+ f
+ }
+}
diff --git a/test/files/pos/t3883.scala b/test/files/pos/t3883.scala
new file mode 100644
index 0000000000..adde0526b2
--- /dev/null
+++ b/test/files/pos/t3883.scala
@@ -0,0 +1,15 @@
+// need to test both orders
+object A1 {
+ implicit def i: Equiv[Boolean] = error("")
+ implicit def div[T, A](implicit f: T => A, eq: Equiv[A]): Equiv[T] = error("")
+
+ implicitly[Equiv[Boolean]]
+}
+
+object A2 {
+ implicit def div[T, A](implicit f: T => A, eq: Equiv[A]): Equiv[T] = error("")
+ implicit def i: Equiv[Boolean] = error("")
+
+ implicitly[Equiv[Boolean]]
+}
+
diff --git a/test/files/pos/bug389.scala b/test/files/pos/t389.scala
index 535bd4de87..535bd4de87 100644
--- a/test/files/pos/bug389.scala
+++ b/test/files/pos/t389.scala
diff --git a/test/files/pos/t3890.scala b/test/files/pos/t3890.scala
new file mode 100644
index 0000000000..bfc4754779
--- /dev/null
+++ b/test/files/pos/t3890.scala
@@ -0,0 +1,4 @@
+object Test {
+ def g[S, T <: S](s: S)(t: T): Unit = println("")
+ g("a")("a") // error: inferred type arguments [java.lang.String] do not conform to method g's type parameter bounds [T <: S]
+} \ No newline at end of file
diff --git a/test/files/pos/t3898.scala b/test/files/pos/t3898.scala
new file mode 100644
index 0000000000..075692e5a8
--- /dev/null
+++ b/test/files/pos/t3898.scala
@@ -0,0 +1,6 @@
+trait Atomic[@specialized(Boolean) T] {
+ def x: T
+
+ def f(fn: T => T): Boolean = f(fn(x), true)
+ def f[R](a: T, b: R): R = b
+}
diff --git a/test/files/pos/t3924.scala b/test/files/pos/t3924.scala
new file mode 100644
index 0000000000..35165baaf0
--- /dev/null
+++ b/test/files/pos/t3924.scala
@@ -0,0 +1,6 @@
+object Test {
+ class Hoe extends Serializable {
+ def add(a: java.io.Serializable): Unit = println(a)
+ def someMethod() { add(this) }
+ }
+}
diff --git a/test/files/pos/t3927.scala b/test/files/pos/t3927.scala
new file mode 100644
index 0000000000..eb4c4b3be5
--- /dev/null
+++ b/test/files/pos/t3927.scala
@@ -0,0 +1,6 @@
+object A {
+ def x {
+ implicit lazy val e: Equiv[Int] = error("")
+ implicitly[Equiv[Int]]
+ }
+}
diff --git a/test/files/pos/t3938/Parent.java b/test/files/pos/t3938/Parent.java
new file mode 100644
index 0000000000..a35f435030
--- /dev/null
+++ b/test/files/pos/t3938/Parent.java
@@ -0,0 +1,9 @@
+public class Parent<A>{
+ class I1 {}
+ class I2 extends Parent.I1 {}
+
+ // OKAY:
+ class I3 extends I1 {}
+ static class I4 {}
+ static class I5 extends Parent.I4 {}
+}
diff --git a/test/files/pos/t3938/UseParent.scala b/test/files/pos/t3938/UseParent.scala
new file mode 100644
index 0000000000..3f4c2298d5
--- /dev/null
+++ b/test/files/pos/t3938/UseParent.scala
@@ -0,0 +1,7 @@
+object UseParent {
+ classOf[Parent[AnyRef]#I2]
+
+ // OKAY
+ classOf[Parent[AnyRef]#I3]
+ classOf[Parent.I5]
+}
diff --git a/test/files/pos/t3946/A.java b/test/files/pos/t3946/A.java
new file mode 100644
index 0000000000..70265229df
--- /dev/null
+++ b/test/files/pos/t3946/A.java
@@ -0,0 +1,5 @@
+package p;
+
+public class A {
+ protected void f() {}
+}
diff --git a/test/files/pos/t3946/Test_1.scala b/test/files/pos/t3946/Test_1.scala
new file mode 100644
index 0000000000..0cceff3aab
--- /dev/null
+++ b/test/files/pos/t3946/Test_1.scala
@@ -0,0 +1,12 @@
+package q {
+ class B extends p.A {
+ override protected def f() { }
+ }
+}
+
+package p {
+ object T {
+ val a = new A()
+ a.f()
+ }
+}
diff --git a/test/files/pos/t3951/Coll_1.scala b/test/files/pos/t3951/Coll_1.scala
new file mode 100644
index 0000000000..c2cc39a1a9
--- /dev/null
+++ b/test/files/pos/t3951/Coll_1.scala
@@ -0,0 +1,36 @@
+trait Document {
+ sealed trait FieldBase
+ trait StaticFieldBase extends FieldBase with StaticDocument
+ trait DynamicFieldBase extends FieldBase with DynamicDocument
+}
+
+sealed trait StaticDocument extends Document {
+ abstract class AbstractField extends FieldBase
+}
+
+sealed trait DynamicDocument extends Document {
+ abstract class AbstractField extends FieldBase
+}
+
+class Coll extends StaticDocument
+
+// similiar issue with annotations
+class ann[T] extends StaticAnnotation
+
+trait StatDoc extends Doc {
+ @ann[StatFB]
+ def foo: Int
+}
+
+trait Doc {
+ @ann[DynDoc#ForceDynDoc]
+ def bar: Int
+ trait StatFB
+ trait DynFB
+}
+
+trait DynDoc extends Doc {
+ @ann[DynFB]
+ def baz: Int
+ trait ForceDynDoc
+}
diff --git a/test/files/pos/t3951/Test_2.scala b/test/files/pos/t3951/Test_2.scala
new file mode 100644
index 0000000000..2519543008
--- /dev/null
+++ b/test/files/pos/t3951/Test_2.scala
@@ -0,0 +1,4 @@
+object Test {
+ new Coll
+ trait T extends StatDoc
+}
diff --git a/test/files/pos/t3960.flags b/test/files/pos/t3960.flags
new file mode 100644
index 0000000000..4449dbbdf3
--- /dev/null
+++ b/test/files/pos/t3960.flags
@@ -0,0 +1 @@
+-Ycheck:typer \ No newline at end of file
diff --git a/test/files/pos/t3960.scala b/test/files/pos/t3960.scala
new file mode 100644
index 0000000000..5c658e9fbc
--- /dev/null
+++ b/test/files/pos/t3960.scala
@@ -0,0 +1,7 @@
+class A {
+ class C[x]
+ val cs = new scala.collection.mutable.HashMap[C[_], Int]
+ def c: C[_] = sys.error("")
+ val eval: C[_] = c
+ cs(c) += 1
+}
diff --git a/test/files/pos/bug397.scala b/test/files/pos/t397.scala
index 87be2987ab..87be2987ab 100644
--- a/test/files/pos/bug397.scala
+++ b/test/files/pos/t397.scala
diff --git a/test/files/pos/t3972.scala b/test/files/pos/t3972.scala
new file mode 100644
index 0000000000..d6cbb3dfb7
--- /dev/null
+++ b/test/files/pos/t3972.scala
@@ -0,0 +1,11 @@
+object CompilerCrash {
+ def main(args: Array[String]) {
+ args match {
+ case Array("a", a @ _*) => { } // The code compiles fine if this line is commented out or "@ _*" is deleted or this line is swapped for the next line
+ case Array("b") => { } // The code compiles fine if this line is commented out
+ case Array("c", c) => {
+ 0 // The code compiles fine if this line is commented out
+ }
+ }
+ }
+}
diff --git a/test/files/pos/t3986.scala b/test/files/pos/t3986.scala
new file mode 100644
index 0000000000..10c4eb435f
--- /dev/null
+++ b/test/files/pos/t3986.scala
@@ -0,0 +1,5 @@
+object Test {
+ def main(args: Array[String]) {
+ new { val x = "abc" } with AnyRef { }
+ }
+}
diff --git a/test/files/pos/t4018.scala b/test/files/pos/t4018.scala
new file mode 100644
index 0000000000..2b265c5717
--- /dev/null
+++ b/test/files/pos/t4018.scala
@@ -0,0 +1,15 @@
+trait M[V[_]]
+
+class Cls[V[_]](c: M[V])
+
+object Cls{
+ def apply[V[_]](c: M[V]): Cls[V] = new Cls[V](c)
+}
+
+object test {
+ val c: M[Option] = new M[Option] {}
+ new Cls(c) // does not infer.
+ new Cls[Option](c) // okay
+ Cls(c) // okay
+}
+
diff --git a/test/files/pos/bug402.scala b/test/files/pos/t402.scala
index a5a3df4825..a5a3df4825 100644
--- a/test/files/pos/bug402.scala
+++ b/test/files/pos/t402.scala
diff --git a/test/files/pos/t4020.flags b/test/files/pos/t4020.flags
new file mode 100644
index 0000000000..85d8eb2ba2
--- /dev/null
+++ b/test/files/pos/t4020.flags
@@ -0,0 +1 @@
+-Xfatal-warnings
diff --git a/test/files/pos/t4020.scala b/test/files/pos/t4020.scala
new file mode 100644
index 0000000000..8a758d53f7
--- /dev/null
+++ b/test/files/pos/t4020.scala
@@ -0,0 +1,25 @@
+class A {
+ sealed trait Foo
+}
+
+object a1 extends A {
+ case class Foo1(i: Int) extends Foo
+}
+
+object a2 extends A {
+ case class Foo2(i: Int) extends Foo
+}
+
+class B {
+ def mthd(foo: a2.Foo) = {
+ foo match {
+ case a2.Foo2(i) => i
+
+ // Note: This case is impossible. In fact, scalac
+ // will (correctly) report an error if it is uncommented,
+ // but a warning if it is commented.
+
+ // case a1.Foo1(i) => i
+ }
+ }
+} \ No newline at end of file
diff --git a/test/files/pos/t4036.scala b/test/files/pos/t4036.scala
new file mode 100644
index 0000000000..b902a3153b
--- /dev/null
+++ b/test/files/pos/t4036.scala
@@ -0,0 +1,13 @@
+object Error {
+ def f {
+ case class X(b: Boolean = false)
+ val r = X()
+ }
+ def g = {
+ val x = 0
+ var y = 1 // no constant type
+ def foo(z: Int = y) = 1
+ val z = 2
+ foo()
+ }
+}
diff --git a/test/files/pos/bug404.scala b/test/files/pos/t404.scala
index 8f5e8bef5e..8f5e8bef5e 100644
--- a/test/files/pos/bug404.scala
+++ b/test/files/pos/t404.scala
diff --git a/test/files/pos/t4052.scala b/test/files/pos/t4052.scala
new file mode 100644
index 0000000000..561e1704e9
--- /dev/null
+++ b/test/files/pos/t4052.scala
@@ -0,0 +1,5 @@
+package object test {
+ trait PackageError
+ object PackageError
+}
+
diff --git a/test/files/pos/t4112.scala b/test/files/pos/t4112.scala
new file mode 100644
index 0000000000..311dad9e72
--- /dev/null
+++ b/test/files/pos/t4112.scala
@@ -0,0 +1,12 @@
+
+
+import collection.immutable._
+
+
+
+object Test {
+ def main(args: Array[String]) {
+ val treemap = TreeMap(1 -> 2, 3 -> 4) ++ TreeMap(5 -> 6)
+ (treemap: TreeMap[Int, Int])
+ }
+}
diff --git a/test/files/pos/t4114.scala b/test/files/pos/t4114.scala
new file mode 100644
index 0000000000..25eb2232c9
--- /dev/null
+++ b/test/files/pos/t4114.scala
@@ -0,0 +1,8 @@
+abstract class A {
+ private def foo = List(1, 2)
+}
+trait B extends A {
+ private def foo = List("a", "b")
+ // However it compiles correctly if the type is given:
+ // private def foo: List[String] = List("a", "b")
+}
diff --git a/test/files/pos/bug415.scala b/test/files/pos/t415.scala
index 355b6136d1..355b6136d1 100644
--- a/test/files/pos/bug415.scala
+++ b/test/files/pos/t415.scala
diff --git a/test/files/pos/t4173.scala b/test/files/pos/t4173.scala
new file mode 100644
index 0000000000..33a713191a
--- /dev/null
+++ b/test/files/pos/t4173.scala
@@ -0,0 +1,4 @@
+object t4173 {
+ def bar(a: Int = 0, b: Int = 0)(cs: Any*) = ()
+ bar(b = 1)(Nil: _*)
+}
diff --git a/test/files/pos/t4188.scala b/test/files/pos/t4188.scala
new file mode 100644
index 0000000000..40e7d4924e
--- /dev/null
+++ b/test/files/pos/t4188.scala
@@ -0,0 +1,6 @@
+class A {
+ object Ding
+ class B {
+ (null: Any) match { case _: Ding.type => () }
+ }
+}
diff --git a/test/files/pos/bug419.scala b/test/files/pos/t419.scala
index 65dcb04356..65dcb04356 100644
--- a/test/files/pos/bug419.scala
+++ b/test/files/pos/t419.scala
diff --git a/test/files/pos/t4202.scala b/test/files/pos/t4202.scala
new file mode 100644
index 0000000000..aca7d503ee
--- /dev/null
+++ b/test/files/pos/t4202.scala
@@ -0,0 +1,18 @@
+object t4202_1 {
+ () => {
+ trait T {
+ def t = ()
+ }
+ }
+}
+
+object t4202_2 {
+ () => {
+ trait T {
+ def t = ()
+ }
+ object T2 extends T {
+ t
+ }
+ }
+}
diff --git a/test/files/pos/t4205/1.scala b/test/files/pos/t4205/1.scala
new file mode 100644
index 0000000000..4dad790376
--- /dev/null
+++ b/test/files/pos/t4205/1.scala
@@ -0,0 +1,3 @@
+trait A[OUT[_]] {
+ null.asInstanceOf[B[OUT]].b1("")
+} \ No newline at end of file
diff --git a/test/files/pos/t4205/2.scala b/test/files/pos/t4205/2.scala
new file mode 100644
index 0000000000..398fbdecc5
--- /dev/null
+++ b/test/files/pos/t4205/2.scala
@@ -0,0 +1,4 @@
+trait B[OUT[_]] {
+ def b1[A](a: A) = b2[OUT]
+ def b2[OUT1[_]] = ()
+}
diff --git a/test/files/pos/bug422.scala b/test/files/pos/t422.scala
index cb3ba279d4..cb3ba279d4 100644
--- a/test/files/pos/bug422.scala
+++ b/test/files/pos/t422.scala
diff --git a/test/files/pos/t4220.scala b/test/files/pos/t4220.scala
new file mode 100644
index 0000000000..8fb999e345
--- /dev/null
+++ b/test/files/pos/t4220.scala
@@ -0,0 +1,7 @@
+// don't know if our half-working sbt build is meaningfully
+// tested for #4220 with this, but it can't hurt.
+class Boo(a: Int = 0)
+
+object test {
+ class Boo
+}
diff --git a/test/files/pos/t4237.scala b/test/files/pos/t4237.scala
new file mode 100644
index 0000000000..fcf6eb8bf1
--- /dev/null
+++ b/test/files/pos/t4237.scala
@@ -0,0 +1,6 @@
+class A {
+ (new { def field = 0; def field_=(i: Int) = () }).field = 5 // compiles as expected
+ (new { def field(implicit i: Int) = 0; def field_=(i: Int) = () }).field = 5 // compiles even with implicit params on getter
+ (new { def field = 0; def field_=[T](i: Int) = () }).field = 5 // compiles with type param on setter
+ (new { def field[T] = 0; def field_=(i: Int) = () }).field = 5 // DOESN'T COMPILE
+} \ No newline at end of file
diff --git a/test/files/pos/t4243.scala b/test/files/pos/t4243.scala
new file mode 100644
index 0000000000..5fa8665918
--- /dev/null
+++ b/test/files/pos/t4243.scala
@@ -0,0 +1,18 @@
+
+
+
+
+object wrap {
+
+ trait DomainLike[@specialized(Int) A, +This <: Domain[A]]
+
+ trait Domain[@specialized(Int) B]
+ extends DomainLike[B, Domain[B]]
+
+ trait IterableDomainLike[@specialized(Int) C, +This <: IterableDomain[C]]
+ extends DomainLike[C, This]
+
+ trait IterableDomain[@specialized(Int) D]
+ extends Domain[D] with IterableDomainLike[D, IterableDomain[D]]
+
+}
diff --git a/test/files/pos/t4257.scala b/test/files/pos/t4257.scala
new file mode 100644
index 0000000000..39f04a0a0a
--- /dev/null
+++ b/test/files/pos/t4257.scala
@@ -0,0 +1,15 @@
+object Test {
+
+ class SA[@specialized(Int) A] {
+ def o[U](f: ((Int, A) => Any)) {}
+
+ def o[U](f: A => Any) {}
+ }
+
+ class X[@specialized(Int) B] {
+ def x(b: B) = {
+ new SA[B]().o((x: Any) => x)
+ }
+ }
+}
+
diff --git a/test/files/pos/t4266.scala b/test/files/pos/t4266.scala
new file mode 100644
index 0000000000..301cc264bc
--- /dev/null
+++ b/test/files/pos/t4266.scala
@@ -0,0 +1,27 @@
+object Test {
+
+ trait Tensor2Like[
+ @specialized(Int) A1,
+ +D1 <: DomainLike[A1],
+ +D <: Product2DomainLike[D1]
+ ] {
+ def domain: D;
+
+ def checkKey(k1: A1) {
+ domain._1.contains(k1)
+ }
+ }
+
+ trait DomainLike[A] {
+ def contains(key: A): Boolean;
+ }
+
+ // trait DomainLike[@specialized(Int) A] {
+ // def contains(key: A): Boolean;
+ // }
+
+ trait Product2DomainLike[+D1] {
+ def _1: D1;
+ }
+}
+
diff --git a/test/files/pos/t4269.scala b/test/files/pos/t4269.scala
new file mode 100644
index 0000000000..70f0471a9a
--- /dev/null
+++ b/test/files/pos/t4269.scala
@@ -0,0 +1,5 @@
+class A {
+ PartialFunction.condOpt(Nil) {
+ case items@List(_*) if true =>
+ }
+}
diff --git a/test/files/pos/t4275.scala b/test/files/pos/t4275.scala
new file mode 100644
index 0000000000..183cb5155e
--- /dev/null
+++ b/test/files/pos/t4275.scala
@@ -0,0 +1,13 @@
+object Test {
+ def f = "abc".count(_ > 'a')
+
+ class A {
+ private val count: Int = 0
+ }
+ class B extends A { }
+ object B {
+ implicit def b2seq(x: B): Seq[Int] = Nil
+
+ def f = (new B) count (_ > 0)
+ }
+}
diff --git a/test/files/pos/t430-feb09.scala b/test/files/pos/t430-feb09.scala
new file mode 100644
index 0000000000..bba8996e4e
--- /dev/null
+++ b/test/files/pos/t430-feb09.scala
@@ -0,0 +1,34 @@
+// Compiles
+package a {
+ case class A[T]()
+}
+
+// Compiles
+package b.scala {
+ class B[T]
+}
+
+// Doesn't compile: type Nothing is not a member of c.scala
+package c.scala {
+ case class C[T]()
+}
+
+// Doesn't compile: type Nothing is not a member of d.scala
+package d.scala.d {
+ case class D[T]()
+}
+
+// Doesn't compile: type Any is not a member of e.scala
+package e.scala {
+ case class E[T >: Nothing]()
+}
+
+// Compiles
+package f.scala {
+ case class F[T >: Nothing <: Any]()
+}
+
+// Doesn't compile: type <byname> is not a member of package h.scala
+package h.scala {
+ case class H(s: String)(t: =>String)
+}
diff --git a/test/files/pos/t430.scala b/test/files/pos/t430.scala
new file mode 100644
index 0000000000..e04e39bea8
--- /dev/null
+++ b/test/files/pos/t430.scala
@@ -0,0 +1,20 @@
+object Test extends App {
+ def foo[T <% Ordered[T]](x: T){ Console.println(""+(x < x)+" "+(x <= x)) }
+ def bar(x: Unit ): Unit = foo(x);
+ def bar(x: Boolean): Unit = foo(x);
+ def bar(x: Byte ): Unit = foo(x);
+ def bar(x: Short ): Unit = foo(x);
+ def bar(x: Int ): Unit = foo(x);
+ def bar(x: Long ): Unit = foo(x);
+ def bar(x: Float ): Unit = foo(x);
+ def bar(x: Double ): Unit = foo(x);
+ bar(())
+ bar(true)
+ bar(1: Byte)
+ bar(1: Short)
+ bar('a')
+ bar(1)
+ bar(1l)
+ bar(1.0f)
+ bar(1.0)
+}
diff --git a/test/files/pos/t4305.scala b/test/files/pos/t4305.scala
new file mode 100644
index 0000000000..ba3eb65bc1
--- /dev/null
+++ b/test/files/pos/t4305.scala
@@ -0,0 +1,31 @@
+object T1 {
+ trait T[A]
+ class C extends T[String]
+ object Test {
+ def main(args: Array[String]): Unit = {
+ classOf[C].getTypeParameters
+ }
+ }
+}
+
+object T2 {
+ trait T[A]
+ class C extends T[String]
+ object Test {
+ def main(args: Array[String]): Unit = {
+ val x = classOf[C]
+ x.getTypeParameters
+ }
+ }
+}
+
+object T3 {
+ trait T[A]
+ class C extends T[String]
+ object Test {
+ def main(args: Array[String]): Unit = {
+ val x: Class[C] = classOf[C]
+ x.getTypeParameters
+ }
+ }
+} \ No newline at end of file
diff --git a/test/files/pos/t432.scala b/test/files/pos/t432.scala
new file mode 100644
index 0000000000..087fd70aba
--- /dev/null
+++ b/test/files/pos/t432.scala
@@ -0,0 +1,2 @@
+case class Tata()
+object Tata
diff --git a/test/files/pos/t4345.scala b/test/files/pos/t4345.scala
new file mode 100644
index 0000000000..59de1eadd3
--- /dev/null
+++ b/test/files/pos/t4345.scala
@@ -0,0 +1,7 @@
+trait C1[+A, +CC[X]] {
+ protected[this] def f: A => CC[A] = sys.error("")
+}
+
+trait C2[+A, +CC[X]] extends C1[A, CC] {
+ override protected[this] def f = super.f
+} \ No newline at end of file
diff --git a/test/files/pos/t4351.check b/test/files/pos/t4351.check
new file mode 100644
index 0000000000..cb5d407e13
--- /dev/null
+++ b/test/files/pos/t4351.check
@@ -0,0 +1 @@
+runtime exception
diff --git a/test/files/pos/t4351.scala b/test/files/pos/t4351.scala
new file mode 100644
index 0000000000..2d57588793
--- /dev/null
+++ b/test/files/pos/t4351.scala
@@ -0,0 +1,20 @@
+object Test {
+ def main(args: Array[String]): Unit = {
+ try new BooleanPropImpl() value
+ catch {
+ case e: RuntimeException => println("runtime exception")
+ }
+ }
+}
+
+trait Prop[@specialized(Boolean) +T] {
+ def value: T
+}
+
+class PropImpl[+T] extends Prop[T] {
+ def value: T = scala.sys.error("")
+}
+
+trait BooleanProp extends Prop[Boolean]
+
+class BooleanPropImpl() extends PropImpl[Boolean] with BooleanProp
diff --git a/test/files/pos/t4363.scala b/test/files/pos/t4363.scala
new file mode 100644
index 0000000000..64cdcd9356
--- /dev/null
+++ b/test/files/pos/t4363.scala
@@ -0,0 +1,8 @@
+object Test {
+ trait Suite { def bar() = () }
+
+ () => {
+ trait FunkySuite extends Suite { override def bar() = () }
+ class MySuite extends FunkySuite { }
+ }
+}
diff --git a/test/files/pos/bug439.scala b/test/files/pos/t439.scala
index f3191c72fa..f3191c72fa 100644
--- a/test/files/pos/bug439.scala
+++ b/test/files/pos/t439.scala
diff --git a/test/files/pos/t4402/A.scala b/test/files/pos/t4402/A.scala
new file mode 100644
index 0000000000..f43f0865f0
--- /dev/null
+++ b/test/files/pos/t4402/A.scala
@@ -0,0 +1,3 @@
+package ohmy
+
+class A extends other.Bar
diff --git a/test/files/pos/t4402/Bar.java b/test/files/pos/t4402/Bar.java
new file mode 100644
index 0000000000..edc00a5fd1
--- /dev/null
+++ b/test/files/pos/t4402/Bar.java
@@ -0,0 +1,7 @@
+package other;
+
+public class Bar extends test.Foo {
+ void createMeSth(test.Foo.Inner aaa) {
+ aaa.hello();
+ }
+}
diff --git a/test/files/pos/t4402/Foo.java b/test/files/pos/t4402/Foo.java
new file mode 100644
index 0000000000..585a5e0a2c
--- /dev/null
+++ b/test/files/pos/t4402/Foo.java
@@ -0,0 +1,8 @@
+package test;
+
+public abstract class Foo {
+ protected interface Inner {
+ public void hello();
+ }
+}
+
diff --git a/test/files/pos/bug443.scala b/test/files/pos/t443.scala
index 5b5e3ea828..5b5e3ea828 100644
--- a/test/files/pos/bug443.scala
+++ b/test/files/pos/t443.scala
diff --git a/test/files/pos/t4430.scala b/test/files/pos/t4430.scala
new file mode 100644
index 0000000000..746ecb271e
--- /dev/null
+++ b/test/files/pos/t4430.scala
@@ -0,0 +1,11 @@
+class Crash {
+ def S(op: => Double) = 0
+ def A(a: Int, b: Int) = 0
+
+ val t = 0
+
+ val q = A(
+ b = S { val xxx = t ; 42 },
+ a = 0
+ )
+}
diff --git a/test/files/pos/t4432.scala b/test/files/pos/t4432.scala
new file mode 100644
index 0000000000..09f4c2ab34
--- /dev/null
+++ b/test/files/pos/t4432.scala
@@ -0,0 +1,42 @@
+object Main {
+ def foo1 = {
+ class A {
+ val x = {
+ lazy val cc = 1 //
+ cc
+ ()
+ }
+ }
+ new A
+ }
+
+ def foo2 = {
+ class B {
+ val x = {
+ object cc
+ cc
+ ()
+ }
+ }
+ new B
+ }
+
+ def foo3 = {
+ object C {
+ val x = {
+ lazy val cc = 1
+ cc
+ }
+ }
+ C
+ }
+
+ def foo4 = {
+ class D {
+ lazy val cc = 1
+ cc
+ }
+ new D
+ }
+
+}
diff --git a/test/files/pos/t4457_1.scala b/test/files/pos/t4457_1.scala
new file mode 100644
index 0000000000..4442f28e4a
--- /dev/null
+++ b/test/files/pos/t4457_1.scala
@@ -0,0 +1,26 @@
+object ImplicitConvAmbiguity2 {
+
+ class N[T]
+ class NE[T] extends N[T]
+ class NN[T] extends N[T]
+ class AA[A]
+ class BB[A]
+
+ implicit def conv1(i: Float) = new NE[Float]
+ implicit def conv3(op: AA[java.util.TooManyListenersException]) = new N[java.util.TooManyListenersException]
+ implicit def conv4(op: AA[Float]) = new N[Float]
+ implicit def conv5(e: BB[java.util.GregorianCalendar]) = new N[java.util.GregorianCalendar]
+
+ def aFunc[A](a: NE[A]) = new AA[A]
+ def aFunc[A](a: NN[A]) = new BB[A]
+
+ def bFunc[T](e1: N[T]) = {}
+
+ def typeMe1 {
+ val x = aFunc(4F)
+ bFunc(x)
+ }
+ def typeMe2 {
+ bFunc(aFunc(4F))
+ }
+}
diff --git a/test/files/pos/t4494.flags b/test/files/pos/t4494.flags
new file mode 100644
index 0000000000..281f0a10cd
--- /dev/null
+++ b/test/files/pos/t4494.flags
@@ -0,0 +1 @@
+-Yrangepos
diff --git a/test/files/pos/t4494.scala b/test/files/pos/t4494.scala
new file mode 100644
index 0000000000..ef38a19083
--- /dev/null
+++ b/test/files/pos/t4494.scala
@@ -0,0 +1,3 @@
+object A {
+ List(1)
+}
diff --git a/test/files/pos/t4501.scala b/test/files/pos/t4501.scala
new file mode 100644
index 0000000000..dac2524024
--- /dev/null
+++ b/test/files/pos/t4501.scala
@@ -0,0 +1,14 @@
+// After lub modification
+import scala.collection.mutable.ListBuffer
+
+class A {
+ def foo[T](a:T, b:T):T = a
+ def f1 = foo(ListBuffer(), List())
+ def f2 = foo(ListBuffer(), ListBuffer())
+ def f3 = foo(List(), List())
+
+ // scalap
+ // def f1 : scala.collection.Seq[scala.Nothing] = { /* compiled code */ }
+ // def f2 : scala.collection.mutable.ListBuffer[scala.Nothing] = { /* compiled code */ }
+ // def f3 : scala.collection.immutable.List[scala.Nothing] = { /* compiled code */ }
+} \ No newline at end of file
diff --git a/test/files/pos/t4502.scala b/test/files/pos/t4502.scala
new file mode 100644
index 0000000000..ed7d3d0557
--- /dev/null
+++ b/test/files/pos/t4502.scala
@@ -0,0 +1,12 @@
+class T {
+ def send(o: Any, d: Int = 10) { }
+
+ def c(f: => Any) { }
+
+ def f() {
+ var a = this
+ a.send(
+ c(a.send(()))
+ )
+ }
+}
diff --git a/test/files/pos/t4524.scala b/test/files/pos/t4524.scala
new file mode 100644
index 0000000000..4721a7d067
--- /dev/null
+++ b/test/files/pos/t4524.scala
@@ -0,0 +1,9 @@
+object test {
+ import A._
+ class A(b: B = new A.B())
+ object A {
+ class B
+ new A()
+ }
+}
+
diff --git a/test/files/pos/t4547.scala b/test/files/pos/t4547.scala
new file mode 100644
index 0000000000..01f229bbf6
--- /dev/null
+++ b/test/files/pos/t4547.scala
@@ -0,0 +1,4 @@
+object Main {
+ def g: BigInt = 5 + BigInt(4) // since we're looking for an implicit that converts an int into something that has a + method that takes a BigInt, BigInt should be in the implicit scope
+ def g2 = 5 + BigInt(4)
+} \ No newline at end of file
diff --git a/test/files/pos/t4553.scala b/test/files/pos/t4553.scala
new file mode 100755
index 0000000000..4eefe57b2b
--- /dev/null
+++ b/test/files/pos/t4553.scala
@@ -0,0 +1,11 @@
+trait VectorLike[+T, +V[A] <: Vector[A]] {
+ def +[S, VResult[S] >: V[S]](v: VResult[S])
+}
+
+trait Vector[+T] extends VectorLike[T, Vector]
+trait ImmutableVector[T] extends Vector[T] with VectorLike[T, ImmutableVector]
+trait MutableVector[T] extends Vector[T] with VectorLike[T, MutableVector]
+
+object Test {
+ def f = (null: MutableVector[Int]) + (null: ImmutableVector[Int])
+}
diff --git a/test/files/pos/t4593.scala b/test/files/pos/t4593.scala
new file mode 100644
index 0000000000..250f68216a
--- /dev/null
+++ b/test/files/pos/t4593.scala
@@ -0,0 +1,20 @@
+// ticket #4593
+trait A {
+
+ class B
+ case object D extends B
+
+ class C {
+
+ var x: B = D
+
+ def y = synchronized {
+ x match {
+ case D => {}
+ }
+ }
+
+ }
+
+}
+
diff --git a/test/files/pos/t460.scala b/test/files/pos/t460.scala
new file mode 100644
index 0000000000..466d06c2ad
--- /dev/null
+++ b/test/files/pos/t460.scala
@@ -0,0 +1,9 @@
+object Bug460 {
+ def testFun(x : Int, y : Int) = x + y
+ val fn = testFun _
+
+ fn(1, 2) // Ok
+ (testFun(_, _))(1, 2) // Ok
+ (testFun _).apply(1, 2)
+ (testFun _)(1, 2) // Error! (but no longer)
+}
diff --git a/test/files/pos/t4603/J.java b/test/files/pos/t4603/J.java
new file mode 100644
index 0000000000..0c3f6b2bf2
--- /dev/null
+++ b/test/files/pos/t4603/J.java
@@ -0,0 +1,7 @@
+// J.java
+public class J<T> {
+ public static void f(java.lang.Class<? extends J> cls) { }
+ // correctly it should be like this, and then it would work.
+ // unfortunately that doesn't mean we don't have to deal with it.
+ // public static void f(java.lang.Class<? extends J<?>> cls) { }
+}
diff --git a/test/files/pos/t4603/S.scala b/test/files/pos/t4603/S.scala
new file mode 100644
index 0000000000..9e228195a4
--- /dev/null
+++ b/test/files/pos/t4603/S.scala
@@ -0,0 +1,8 @@
+// S.scala
+class S extends J[AnyRef]
+
+object Test {
+ def main(args:Array[String]) {
+ J.f(classOf[S])
+ }
+}
diff --git a/test/files/pos/t464.scala b/test/files/pos/t464.scala
new file mode 100644
index 0000000000..45521335c3
--- /dev/null
+++ b/test/files/pos/t464.scala
@@ -0,0 +1,13 @@
+class A {
+ protected[this] def f() {}
+}
+class B extends A {
+ f()
+ super.f()
+}
+class C extends A {
+ override protected[this] def f() = super.f()
+}
+class D extends C {
+ override protected def f() = super.f()
+} \ No newline at end of file
diff --git a/test/files/pos/t4692.scala b/test/files/pos/t4692.scala
new file mode 100644
index 0000000000..409daf2257
--- /dev/null
+++ b/test/files/pos/t4692.scala
@@ -0,0 +1,27 @@
+class TypeAliasVsImplicitTest {
+
+ class For[m[_], a](x: m[a]) {
+ def map[b](y: a => b): m[b] = throw new Error
+ }
+ implicit def toFor[m[_], a](x: m[a]): For[m, a] = new For[m, a](x)
+
+ trait MyList[A]
+
+ def foo(xs: MyList[Int]) = xs.map(x => x) // compiles fine.
+
+ type MyListOfInt = MyList[Int]
+ def bar(xs: MyListOfInt) = xs.map(x => x) // doesn't compile: value map is not a member of TypeAliasVsImplicitTest.this.MyListOfInt
+}
+
+// minimal case -- the bug was in type constructor inference where `xs.type` needed to be widened *and* dealiased
+// in 2.8.1 implicit conversion search started with a widened type, so that combo never came up
+// object Test {
+// class For[m[_], a](x: m[a])
+// def toFor[m[_], a](x: m[a]): For[m, a] = new For[m, a](x)
+//
+// trait MyList[A]
+// type MyListOfInt = MyList[Int]
+//
+// val xs: MyListOfInt = error("")
+// toFor(xs : xs.type)
+// } \ No newline at end of file
diff --git a/test/files/pos/t4716.scala b/test/files/pos/t4716.scala
new file mode 100644
index 0000000000..d4bd55c55b
--- /dev/null
+++ b/test/files/pos/t4716.scala
@@ -0,0 +1,10 @@
+
+
+
+
+trait Bug2[@specialized(Int) +A] extends TraversableOnce[A] {
+ def ++[B >: A](that: TraversableOnce[B]) = {
+ lazy val it = that.toIterator
+ it
+ }
+}
diff --git a/test/files/pos/t4731.scala b/test/files/pos/t4731.scala
new file mode 100644
index 0000000000..d457543c1f
--- /dev/null
+++ b/test/files/pos/t4731.scala
@@ -0,0 +1,14 @@
+import java.util.Comparator
+
+trait Trait1[T] { def foo(arg: Comparator[T]): Unit }
+
+trait Trait2[T] extends Trait1[T] { def foo(arg: Comparator[String]): Int = 0 }
+
+class Class1 extends Trait2[String] { }
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ val c = new Class1
+ c.foo(Ordering[String])
+ }
+}
diff --git a/test/files/pos/t4737/J_1.java b/test/files/pos/t4737/J_1.java
new file mode 100644
index 0000000000..284afd6c10
--- /dev/null
+++ b/test/files/pos/t4737/J_1.java
@@ -0,0 +1,9 @@
+package j;
+
+public class J_1 {
+ protected class JavaInnerClass {
+ }
+ public void method(JavaInnerClass javaInnerclass) {
+ System.out.println("hello");
+ }
+}
diff --git a/test/files/pos/t4737/S_2.scala b/test/files/pos/t4737/S_2.scala
new file mode 100644
index 0000000000..8598466557
--- /dev/null
+++ b/test/files/pos/t4737/S_2.scala
@@ -0,0 +1,10 @@
+package s
+
+import j.J_1
+
+class ScalaSubClass extends J_1 {
+ override def method(javaInnerClass: J_1#JavaInnerClass) {
+ println("world")
+ }
+}
+
diff --git a/test/files/pos/t4757/A_2.scala b/test/files/pos/t4757/A_2.scala
new file mode 100644
index 0000000000..63106a6179
--- /dev/null
+++ b/test/files/pos/t4757/A_2.scala
@@ -0,0 +1,4 @@
+object A {
+ def ss = P.x(3)(Nil)
+}
+
diff --git a/test/files/pos/t4757/B_3.scala b/test/files/pos/t4757/B_3.scala
new file mode 100644
index 0000000000..b50d1cd834
--- /dev/null
+++ b/test/files/pos/t4757/B_3.scala
@@ -0,0 +1,3 @@
+object C {
+ def x: Seq[S[_]] = A.ss
+}
diff --git a/test/files/pos/t4757/P_1.scala b/test/files/pos/t4757/P_1.scala
new file mode 100644
index 0000000000..8f01a4b669
--- /dev/null
+++ b/test/files/pos/t4757/P_1.scala
@@ -0,0 +1,6 @@
+trait S[T]
+
+object P {
+ def x(t: Int)(ss: Seq[S[_]]): Seq[S[_]] = ss
+}
+
diff --git a/test/files/pos/t4758.scala b/test/files/pos/t4758.scala
new file mode 100644
index 0000000000..627dfd7a23
--- /dev/null
+++ b/test/files/pos/t4758.scala
@@ -0,0 +1,17 @@
+// /scala/trac/4758/a.scala
+// Fri Dec 2 13:41:54 PST 2011
+
+package bar {
+ // works
+ trait M[F[_]]
+ class S[X[_] <: M[X], A](val x:X[A])
+ object S {
+ def apply[X[_] <: M[X], A](x: X[A]): S[X, A] = new S[X, A](x)
+ def unapply[X[_] <: M[X], A](p: S[X, A]) = Some(p.x)
+ }
+}
+package foo {
+ // seemingly equivalent, doesn't work
+ trait M[F[_]]
+ case class S[X[_] <: M[X], A](x: X[A])
+}
diff --git a/test/files/pos/t4840.flags b/test/files/pos/t4840.flags
new file mode 100644
index 0000000000..eb4d19bcb9
--- /dev/null
+++ b/test/files/pos/t4840.flags
@@ -0,0 +1 @@
+-optimise \ No newline at end of file
diff --git a/test/files/pos/t4840.scala b/test/files/pos/t4840.scala
new file mode 100644
index 0000000000..eefa3b2dee
--- /dev/null
+++ b/test/files/pos/t4840.scala
@@ -0,0 +1,13 @@
+class Crashy {
+ def g(): Option[Any] = None
+
+ def crashy() = {
+ for (_ <- g()) {
+ (null: Any) match {
+ case Some(_) => 5
+ case None => sys.error("")
+ }
+ }
+ }
+}
+
diff --git a/test/files/pos/t4853.scala b/test/files/pos/t4853.scala
new file mode 100644
index 0000000000..ed9b320434
--- /dev/null
+++ b/test/files/pos/t4853.scala
@@ -0,0 +1,12 @@
+object Animal {
+ def main(args: Array[String]) { new Animal[Awake].goToSleep }
+}
+
+class Animal[A <: AwakeOrAsleep] {
+ def goToSleep[B >: A <: Awake]: Animal[Asleep] = new Animal[Asleep]
+ def wakeUp[B >: A <: Asleep]: Animal[Awake] = new Animal[Awake]
+}
+
+sealed trait AwakeOrAsleep
+trait Awake extends AwakeOrAsleep
+trait Asleep extends AwakeOrAsleep
diff --git a/test/files/pos/t4938.scala b/test/files/pos/t4938.scala
new file mode 100644
index 0000000000..6e41312851
--- /dev/null
+++ b/test/files/pos/t4938.scala
@@ -0,0 +1,4 @@
+class A {
+ import scala.collection.mutable._
+ val xs = List(Set(), Seq())
+}
diff --git a/test/files/pos/t4957.scala b/test/files/pos/t4957.scala
new file mode 100644
index 0000000000..7f037ee25d
--- /dev/null
+++ b/test/files/pos/t4957.scala
@@ -0,0 +1,89 @@
+// a.scala
+// Sat Oct 29 10:06:51 PDT 2011
+
+package simple
+
+import scala.{Double=>double, Int=>int}
+
+/**
+ * @author Christoph Radig
+ */
+
+trait Vector {
+
+ def xd: double
+ def yd: double
+}
+
+object Vector {
+
+ def apply(x: double, y: double) = Double(x, y)
+ def apply(x: int, y: int) = Int(x, y)
+
+ trait Companion[@specialized(double, int) T] {
+
+ type I <: Instance[T]
+
+ def apply(x: T, y: T): I // I (= this.type#I) or this.I?
+
+ lazy val zero: I = apply(numeric.zero, numeric.zero)
+
+ val numeric: Numeric[T]
+ }
+
+ trait Instance[@specialized(double, int) T] extends Vector {
+
+ type C <: Companion[T]
+ def companion: C
+
+ def numeric: Numeric[T] = companion.numeric
+
+ val x: T
+ val y: T
+
+ def xd = numeric.toDouble(x)
+ def yd = numeric.toDouble(y)
+
+ def + (that: C#I): C#I = companion(numeric.plus(this.x, that.x), numeric.plus(this.y, that.y))
+ def - (that: C#I): C#I = companion(numeric.minus(this.x, that.x), numeric.minus(this.y, that.y))
+
+ /**
+ * scalar multiplication
+ */
+ def * (scalar: T): C#I = companion(numeric.times(this.x, scalar), numeric.times(this.y, scalar))
+ }
+
+ object Double extends Companion[double] {
+
+ type I = Double
+
+ def apply(x: double, y: double) = new Double(x, y)
+
+ val numeric = Numeric.DoubleIsFractional
+ }
+
+ final class Double(val x: double, val y: double) extends Instance[double] {
+
+ type C = Double.type
+ def companion = Double
+
+ @inline override def xd = x
+ @inline override def yd = y
+ }
+
+
+ object Int extends Companion[int] {
+
+ type I = Int
+
+ def apply(x: int, y: int) = new Int(x, y)
+
+ val numeric = Numeric.IntIsIntegral
+ }
+
+ final class Int(val x: int, val y: int) extends Instance[int] {
+
+ type C = Int.type
+ def companion = Int
+ }
+}
diff --git a/test/files/pos/t4970.scala b/test/files/pos/t4970.scala
new file mode 100644
index 0000000000..f2f284f919
--- /dev/null
+++ b/test/files/pos/t4970.scala
@@ -0,0 +1,13 @@
+trait OuterClass[V <: OuterClass[V]#InnerClass] {
+ trait InnerClass {self: V =>
+ def method = ()
+ }
+}
+
+trait SubOuterClass[T <: SubOuterClass[T]#SubInnerClass] extends OuterClass[T] {
+ class SubInnerClass extends super.InnerClass {self: T => }
+}
+
+trait SubOuterClass2[T <: SubOuterClass2[T]#SubInnerClass2] extends OuterClass[T] {
+ class SubInnerClass2 extends super.InnerClass {self: InnerClass with T => }
+}
diff --git a/test/files/pos/t5012.scala b/test/files/pos/t5012.scala
new file mode 100644
index 0000000000..772b8f4486
--- /dev/null
+++ b/test/files/pos/t5012.scala
@@ -0,0 +1,12 @@
+class D {
+ object p // (program point 1)
+}
+
+class C {
+ def m: D = {
+ if("abc".length == 0) {
+ object p // (program point 2)
+ }
+ null
+ }
+}
diff --git a/test/files/pos/t5013/Bar_2.scala b/test/files/pos/t5013/Bar_2.scala
new file mode 100644
index 0000000000..9eac556a23
--- /dev/null
+++ b/test/files/pos/t5013/Bar_2.scala
@@ -0,0 +1,5 @@
+package b
+
+class Bar extends a.Foo {
+ println(x) // Error: Not found: value x
+}
diff --git a/test/files/pos/t5013/Foo_1.scala b/test/files/pos/t5013/Foo_1.scala
new file mode 100644
index 0000000000..ee21112a3e
--- /dev/null
+++ b/test/files/pos/t5013/Foo_1.scala
@@ -0,0 +1,5 @@
+package a
+
+class Foo {
+ protected[Foo] var x = 0
+}
diff --git a/test/files/pos/t5033.scala b/test/files/pos/t5033.scala
new file mode 100644
index 0000000000..c4c3334852
--- /dev/null
+++ b/test/files/pos/t5033.scala
@@ -0,0 +1,15 @@
+trait Eater {
+ type Food[T]
+}
+
+trait Fruit {
+ type Seed
+}
+
+trait PipExtractor {
+ def extract(a: Fruit)(b: Eater): b.Food[a.Seed]
+}
+
+trait LaserGuidedPipExtractor extends PipExtractor {
+ def extract(f: Fruit)(g: Eater): g.Food[f.Seed]
+} \ No newline at end of file
diff --git a/test/files/pos/t5071.scala b/test/files/pos/t5071.scala
new file mode 100644
index 0000000000..44ad6276f2
--- /dev/null
+++ b/test/files/pos/t5071.scala
@@ -0,0 +1,18 @@
+// abstract
+trait Foo[@specialized A, Repr] {
+ self: Repr =>
+}
+trait Bar[A] extends Foo[A, Object] { }
+class Baz extends Foo[Int, Baz] { }
+
+// concrete
+trait Bippy {
+ def f(x: Int) = 5
+}
+trait FooC[@specialized A] {
+ self: Bippy =>
+
+ f(10)
+}
+
+class BazC extends FooC[Int] with Bippy { }
diff --git a/test/files/pos/t5084.scala b/test/files/pos/t5084.scala
new file mode 100644
index 0000000000..17d0a68adf
--- /dev/null
+++ b/test/files/pos/t5084.scala
@@ -0,0 +1,5 @@
+case class Search(tpe: Search.Value)
+
+object Search {
+ type Value = String
+}
diff --git a/test/files/pos/t5099.scala b/test/files/pos/t5099.scala
new file mode 100644
index 0000000000..178151259f
--- /dev/null
+++ b/test/files/pos/t5099.scala
@@ -0,0 +1,14 @@
+class LazyValVsFunctionType[a] {
+ val f: a => a = x => {
+ lazy val _x: a = throw new java.lang.Error("todo")
+ _x // error: type mismatch
+/*
+[error] found : a => => a
+[error] required: a => a
+[error] val f: a => a = x => {
+[error] ^
+[error] one error found
+*/
+ // _x: a // ok
+ }
+} \ No newline at end of file
diff --git a/test/files/pos/t5127.scala b/test/files/pos/t5127.scala
new file mode 100644
index 0000000000..e90b8d00a0
--- /dev/null
+++ b/test/files/pos/t5127.scala
@@ -0,0 +1,8 @@
+package foo {
+ trait Abstract1[C <: Abstract2[C]]
+ trait Abstract2[C <: Abstract2[C]] extends Abstract1[C]
+ class Parametrized1[T] extends Abstract1[Parametrized2[T]] {
+ def bar(a: AnyRef) { a match { case d: Parametrized1[_] => println("ok") } }
+ }
+ class Parametrized2[T] extends Parametrized1[T] with Abstract2[Parametrized2[T]]
+}
diff --git a/test/files/pos/t514.scala b/test/files/pos/t514.scala
new file mode 100644
index 0000000000..188e4f2e56
--- /dev/null
+++ b/test/files/pos/t514.scala
@@ -0,0 +1,7 @@
+object Test extends App {
+ object Truc {
+ override def toString() = "oui"
+ def toString(bool: Boolean) = "chaispas"
+ }
+ val tata: String = Truc.toString
+}
diff --git a/test/files/pos/t5156.scala b/test/files/pos/t5156.scala
new file mode 100644
index 0000000000..e7912ef35c
--- /dev/null
+++ b/test/files/pos/t5156.scala
@@ -0,0 +1,21 @@
+sealed trait HList
+final case class HCons[H, T <: HList](head : H, tail : T) extends HList
+case object HNil extends HList
+
+object HList {
+ type ::[H, T <: HList] = HCons[H, T]
+ type HNil = HNil.type
+
+ implicit def hlistOps[L <: HList](l : L) = new {
+ def ::[H](h : H) : H :: L = HCons(h, l)
+ def last(implicit last : Last[L]) {}
+ }
+
+ class Last[L <: HList]
+ implicit def hsingleLast[H] = new Last[H :: HNil]
+ implicit def hlistLast[H, T <: HList](implicit lt : Last[T]) = new Last[H :: T]
+
+ type III = Int :: Int :: Int :: HNil
+ val iii : III = 0 :: 0 :: 0 :: HNil
+ val l = iii.last
+}
diff --git a/test/files/pos/t516.scala b/test/files/pos/t516.scala
new file mode 100644
index 0000000000..735b259436
--- /dev/null
+++ b/test/files/pos/t516.scala
@@ -0,0 +1,15 @@
+import scala.collection.mutable._;
+import scala.collection.script._;
+
+class Members;
+
+object subscriber extends Subscriber[Message[String] with Undoable, Members] {
+ def notify(pub: Members, event: Message[String] with Undoable): Unit =
+ (event: Message[String]) match {
+ case Include(l, elem) => Console.println("ADD: " + elem);
+ case Remove(l, elem) => Console.println("REM: " + elem);
+ //case i : Include[HasTree] with Undoable =>
+ //case r : Remove [HasTree] with Undoable =>
+ }
+ }
+
diff --git a/test/files/pos/t5178.scala b/test/files/pos/t5178.scala
new file mode 100644
index 0000000000..26c008d66f
--- /dev/null
+++ b/test/files/pos/t5178.scala
@@ -0,0 +1,11 @@
+abstract class FileOps {
+ def withLock[R](start: Long = 0): Option[R]
+}
+
+trait DefaultFileOps {
+ self: DefaultPath =>
+
+ override def withLock[R](start: Long = 5): Option[R] = None
+}
+
+class DefaultPath extends FileOps with DefaultFileOps { }
diff --git a/test/files/pos/bug522.scala b/test/files/pos/t522.scala
index e6eb25b6c3..e6eb25b6c3 100644
--- a/test/files/pos/bug522.scala
+++ b/test/files/pos/t522.scala
diff --git a/test/files/pos/t5223.scala b/test/files/pos/t5223.scala
new file mode 100644
index 0000000000..51682e9254
--- /dev/null
+++ b/test/files/pos/t5223.scala
@@ -0,0 +1,6 @@
+import scala.reflect._
+
+object Foo extends App {
+ Code.lift{def printf(format: String, args: Any*): String = null }
+ Code.lift{def printf(format: String, args: Any*): String = ("abc": @cloneable)}
+}
diff --git a/test/files/pos/t5245.scala b/test/files/pos/t5245.scala
new file mode 100644
index 0000000000..3a4b4d286e
--- /dev/null
+++ b/test/files/pos/t5245.scala
@@ -0,0 +1,3 @@
+object Foo {
+ def bar = { var x = (); def foo() = x }
+} \ No newline at end of file
diff --git a/test/files/pos/bug530.scala b/test/files/pos/t530.scala
index 6c887d6821..6c887d6821 100644
--- a/test/files/pos/bug530.scala
+++ b/test/files/pos/t530.scala
diff --git a/test/files/pos/t531.scala b/test/files/pos/t531.scala
new file mode 100644
index 0000000000..02763e08f1
--- /dev/null
+++ b/test/files/pos/t531.scala
@@ -0,0 +1,10 @@
+object Test extends App {
+ import scala.reflect._;
+ def titi = {
+ var truc = 0
+ val tata: Code[()=>Unit] = () => {
+ truc = 6
+ }
+ ()
+ }
+}
diff --git a/test/files/pos/t532.scala b/test/files/pos/t532.scala
new file mode 100644
index 0000000000..32649b1629
--- /dev/null
+++ b/test/files/pos/t532.scala
@@ -0,0 +1,10 @@
+object Test extends App {
+ import scala.reflect._;
+ def titi: Unit = {
+ var truc = 0
+ val tata: Code[()=>Unit] = () => {
+ truc = truc + 6
+ }
+ ()
+ }
+}
diff --git a/test/files/pos/bug533.scala b/test/files/pos/t533.scala
index 0a6515fed3..0a6515fed3 100644
--- a/test/files/pos/bug533.scala
+++ b/test/files/pos/t533.scala
diff --git a/test/files/pos/bug566.scala b/test/files/pos/t566.scala
index 6a2a0a3621..6a2a0a3621 100644
--- a/test/files/pos/bug566.scala
+++ b/test/files/pos/t566.scala
diff --git a/test/files/pos/t573.scala b/test/files/pos/t573.scala
new file mode 100644
index 0000000000..7b9d377cd1
--- /dev/null
+++ b/test/files/pos/t573.scala
@@ -0,0 +1,43 @@
+package lampion.collections;
+
+object DirX {
+ abstract class Dir {
+ def reverse : Dir;
+ }
+ object BEFORE extends Dir {
+ def reverse = AFTER;
+ }
+ object AFTER extends Dir {
+ def reverse = BEFORE;
+ }
+}
+
+import DirX._;
+
+abstract class Linked {
+ type Node <: Node0;
+
+ abstract class Node0 {
+ self: Node =>
+
+ var next : Node = _;
+ var prev : Node = _;
+
+ def get(dir : Dir) = if (dir == BEFORE) prev; else next;
+ private def set(dir : Dir, node : Node) =
+ if (dir == BEFORE) prev = node; else next = node;
+
+ def link(dir : Dir, node : Node) = {
+ assert(get(dir) == null);
+ assert(node.get(dir.reverse) == null);
+ set(dir, node);
+ node.set(dir.reverse, self);
+ }
+
+
+ def end(dir : Dir) : Node = {
+ if (get(dir) == null) this;
+ else get(dir).end(dir);
+ }
+ }
+}
diff --git a/test/files/pos/t577.scala b/test/files/pos/t577.scala
new file mode 100644
index 0000000000..236c1395e2
--- /dev/null
+++ b/test/files/pos/t577.scala
@@ -0,0 +1,21 @@
+trait PriorityTree {
+ type Node <: BasicTreeNode;
+
+ val top = initTree;
+ top.next = (initTree);
+ top.next.prev = (top);
+
+ def initTree : Node;
+
+
+
+
+ trait BasicTreeNode {
+ private[PriorityTree] var next : Node = _;
+ private[PriorityTree] var prev : Node = _;
+ private[PriorityTree] var chld : Node = _;
+ //var next : Node = _;
+ //var prev : Node = _;
+ //var chld : Node = _;
+ }
+}
diff --git a/test/files/pos/t578.scala b/test/files/pos/t578.scala
new file mode 100644
index 0000000000..6f95dd8cea
--- /dev/null
+++ b/test/files/pos/t578.scala
@@ -0,0 +1,7 @@
+object Test {
+ val x = Nil
+ val x2: Nil.type = x
+ val y = None
+ val y2: None.type = y
+ Console.println("Okay")
+}
diff --git a/test/files/pos/bug592.scala b/test/files/pos/t592.scala
index 6a941ef51a..6a941ef51a 100644
--- a/test/files/pos/bug592.scala
+++ b/test/files/pos/t592.scala
diff --git a/test/files/pos/bug595.scala b/test/files/pos/t595.scala
index 44124c90c9..44124c90c9 100644
--- a/test/files/pos/bug595.scala
+++ b/test/files/pos/t595.scala
diff --git a/test/files/pos/bug596.scala b/test/files/pos/t596.scala
index b1b5471b2f..b1b5471b2f 100644
--- a/test/files/pos/bug596.scala
+++ b/test/files/pos/t596.scala
diff --git a/test/files/pos/t599.scala b/test/files/pos/t599.scala
new file mode 100644
index 0000000000..53f205a26b
--- /dev/null
+++ b/test/files/pos/t599.scala
@@ -0,0 +1,19 @@
+abstract class FooA {
+ type A <: AxA;
+ abstract class AxA;
+ abstract class InnerA {
+ type B <: A;
+ def doB : B;
+ }
+ }
+ trait FooB extends FooA {
+ type A <: AxB;
+ trait AxB extends AxA { def xxx : Int; }
+ abstract class InnerB extends InnerA {
+ // type B <: A;
+ val a : A = doB;
+ a.xxx;
+ val aaa: InnerB.this.B = doB
+ aaa.xxx;
+ }
+ }
diff --git a/test/files/pos/t602.scala b/test/files/pos/t602.scala
new file mode 100644
index 0000000000..6062b976b6
--- /dev/null
+++ b/test/files/pos/t602.scala
@@ -0,0 +1,14 @@
+package com.mosol.sl
+
+case class Span[K <: Ordered[K]](low: Option[K], high: Option[K]) extends Function1[K, Boolean] {
+ override def equals(x$1: Any): Boolean = x$1 match {
+ case Span((low$0 @ _), (high$0 @ _)) if low$0.equals(low).$amp$amp(high$0.equals(high)) => true
+ case _ => false
+ }
+ def apply(k: K): Boolean = this match {
+ case Span(Some(low), Some(high)) => (k >= low && k <= high)
+ case Span(Some(low), None) => (k >= low)
+ case Span(None, Some(high)) => (k <= high)
+ case _ => false
+ }
+}
diff --git a/test/files/pos/bug604.scala b/test/files/pos/t604.scala
index fb90d5ae31..fb90d5ae31 100644
--- a/test/files/pos/bug604.scala
+++ b/test/files/pos/t604.scala
diff --git a/test/files/pos/bug607.scala b/test/files/pos/t607.scala
index 42c3a15a85..42c3a15a85 100644
--- a/test/files/pos/bug607.scala
+++ b/test/files/pos/t607.scala
diff --git a/test/files/pos/bug611.scala b/test/files/pos/t611.scala
index 40ad28db4b..40ad28db4b 100644
--- a/test/files/pos/bug611.scala
+++ b/test/files/pos/t611.scala
diff --git a/test/files/pos/t613.scala b/test/files/pos/t613.scala
new file mode 100644
index 0000000000..6e3841dada
--- /dev/null
+++ b/test/files/pos/t613.scala
@@ -0,0 +1,17 @@
+class Outer extends App {
+ val y: Int = 1
+ abstract class C {
+ val x: Int
+ }
+ val foo = new C {
+ class I {
+ val z = y
+ }
+ val x = (new I).z
+ }
+}
+
+object Test extends App {
+ val o = new Outer
+ println(o.foo.x)
+}
diff --git a/test/files/pos/bug615.scala b/test/files/pos/t615.scala
index 8fefc952e0..8fefc952e0 100644
--- a/test/files/pos/bug615.scala
+++ b/test/files/pos/t615.scala
diff --git a/test/files/pos/t616.scala b/test/files/pos/t616.scala
new file mode 100644
index 0000000000..074ad190da
--- /dev/null
+++ b/test/files/pos/t616.scala
@@ -0,0 +1,11 @@
+object testImplicit {
+ implicit def foo2bar(foo: Foo): Bar = foo.bar
+ class Foo(val bar: Bar) {
+ def testCoercion = {val a = this; a.baz} // here, foo2bar is inferred by the compiler, as expected
+ //def testCoercionThisImplicit = baz // --> error: not found: value baz
+ def testCoercionThisExplicit: Any = this.baz // --> error: value baz is not a member of Foo
+ }
+ trait Bar { def baz: Unit }
+}
+// mentioned before: http://thread.gmane.org/gmane.comp.lang.scala/2038,
+// but couldn't find a bug report
diff --git a/test/files/pos/bug628.scala b/test/files/pos/t628.scala
index f32c1cad0f..f32c1cad0f 100644
--- a/test/files/pos/bug628.scala
+++ b/test/files/pos/t628.scala
diff --git a/test/files/pos/bug640.scala b/test/files/pos/t640.scala
index 55f61df8af..55f61df8af 100644
--- a/test/files/pos/bug640.scala
+++ b/test/files/pos/t640.scala
diff --git a/test/files/pos/t651.scala b/test/files/pos/t651.scala
new file mode 100644
index 0000000000..44d20ad580
--- /dev/null
+++ b/test/files/pos/t651.scala
@@ -0,0 +1,15 @@
+package test;
+
+trait Test3 {
+ trait MatchableImpl {
+ trait MatchImpl;
+ }
+
+ trait BracePairImpl {
+ trait BraceImpl extends MatchableImpl {
+ private object MyMatch1 extends MatchImpl;
+ protected def match0 : MatchImpl = MyMatch1;
+
+ }
+ }
+}
diff --git a/test/files/pos/bug661.scala b/test/files/pos/t661.scala
index 3a447241fe..3a447241fe 100644
--- a/test/files/pos/bug661.scala
+++ b/test/files/pos/t661.scala
diff --git a/test/files/pos/t675.scala b/test/files/pos/t675.scala
new file mode 100644
index 0000000000..c284c0e202
--- /dev/null
+++ b/test/files/pos/t675.scala
@@ -0,0 +1,19 @@
+package test;
+
+trait T {
+ abstract class Foo;
+ private object FOO_0 extends Foo {
+ Console.println("FOO_0 initialized")
+ }
+ trait X {
+ def foo : Foo = FOO_0;
+ }
+}
+
+object Test extends App {
+ val t = new T{}
+ val x = new t.X{}
+ Console.println(x.foo)
+}
+
+
diff --git a/test/files/pos/bug684.scala b/test/files/pos/t684.scala
index fb5cac3a1a..fb5cac3a1a 100644
--- a/test/files/pos/bug684.scala
+++ b/test/files/pos/t684.scala
diff --git a/test/files/pos/t690.scala b/test/files/pos/t690.scala
new file mode 100644
index 0000000000..3fcdca785d
--- /dev/null
+++ b/test/files/pos/t690.scala
@@ -0,0 +1,14 @@
+package test;
+trait test {
+ type T;
+ trait Manager {
+ type T <: test.this.T;
+ def foo(t : T) = {};
+ }
+ object M0 extends Manager {
+ override type T = test.this.T;
+ override def foo(t : T) = super.foo(t);
+ }
+ def t : T;
+ M0.foo(t);
+}
diff --git a/test/files/pos/bug694.scala b/test/files/pos/t694.scala
index ebabc658ce..ebabc658ce 100644
--- a/test/files/pos/bug694.scala
+++ b/test/files/pos/t694.scala
diff --git a/test/files/pos/bug697.scala b/test/files/pos/t697.scala
index 6caea418d5..6caea418d5 100644
--- a/test/files/pos/bug697.scala
+++ b/test/files/pos/t697.scala
diff --git a/test/files/pos/t698.scala b/test/files/pos/t698.scala
new file mode 100644
index 0000000000..00b3707976
--- /dev/null
+++ b/test/files/pos/t698.scala
@@ -0,0 +1,12 @@
+abstract class Foo
+{
+ val x : Bar
+}
+
+abstract class Bar
+
+object Test
+ extends Foo with App
+{
+ object x extends Bar
+}
diff --git a/test/files/pos/bug703.scala b/test/files/pos/t703.scala
index b24d70c929..b24d70c929 100644
--- a/test/files/pos/bug703.scala
+++ b/test/files/pos/t703.scala
diff --git a/test/files/pos/bug704.scala b/test/files/pos/t704.scala
index e77a54a58e..e77a54a58e 100644
--- a/test/files/pos/bug704.scala
+++ b/test/files/pos/t704.scala
diff --git a/test/files/pos/t711.scala b/test/files/pos/t711.scala
new file mode 100644
index 0000000000..10b410e54e
--- /dev/null
+++ b/test/files/pos/t711.scala
@@ -0,0 +1,14 @@
+abstract class Component
+
+class Button extends Component {
+ def sayHey: Unit = Console.println("Hey, I'm a button") }
+
+abstract class Origin {
+ val delegate: Component }
+
+object main extends Origin with App {
+ val delegate: Component {
+ def sayHey: Unit
+ } = new Button
+ delegate.sayHey
+}
diff --git a/test/files/pos/t715.cmds b/test/files/pos/t715.cmds
new file mode 100644
index 0000000000..2836967fca
--- /dev/null
+++ b/test/files/pos/t715.cmds
@@ -0,0 +1,2 @@
+scalac meredith_1.scala
+scalac runner_2.scala
diff --git a/test/files/pos/bug715/meredith_1.scala b/test/files/pos/t715/meredith_1.scala
index 4be7b48908..3ed2e57d7a 100644
--- a/test/files/pos/bug715/meredith_1.scala
+++ b/test/files/pos/t715/meredith_1.scala
@@ -9,7 +9,7 @@ trait XMLRenderer {
classOf[java.lang.Boolean],
classOf[java.lang.Integer],
classOf[java.lang.Float],
- classOf[java.lang.String]
+ classOf[java.lang.String]
// more to come
)
@@ -21,14 +21,14 @@ trait XMLRenderer {
value match {
case null => Text( "null" )
case vUnmatched =>
- if (value.isInstanceOf[java.lang.Boolean])
+ if (value.isInstanceOf[java.lang.Boolean])
Text( value.asInstanceOf[java.lang.Boolean].toString )
- else if (value.isInstanceOf[java.lang.Integer])
+ else if (value.isInstanceOf[java.lang.Integer])
Text( value.asInstanceOf[java.lang.Integer].toString )
- else if (value.isInstanceOf[java.lang.Float])
+ else if (value.isInstanceOf[java.lang.Float])
Text( value.asInstanceOf[java.lang.Float].toString )
- // else if (value.isInstanceOf[T])
- // pojo2XML( value.asInstanceOf[T] )
+ // else if (value.isInstanceOf[T])
+ // pojo2XML( value.asInstanceOf[T] )
else
<unmatchedType>
<theType>
@@ -57,7 +57,7 @@ trait XMLRenderer {
null,
field.getName,
null,
- TopScope,
+ TopScope,
fldValXML
)
}
@@ -73,7 +73,7 @@ trait XMLRenderer {
null,
TopScope,
progeny.asInstanceOf[Array[scala.xml.Node]] : _*
- )
+ )
}
}
diff --git a/test/files/pos/bug715/runner_2.scala b/test/files/pos/t715/runner_2.scala
index 1e4f40d654..1e4f40d654 100644
--- a/test/files/pos/bug715/runner_2.scala
+++ b/test/files/pos/t715/runner_2.scala
diff --git a/test/files/pos/t720.scala b/test/files/pos/t720.scala
new file mode 100644
index 0000000000..ef04d01bec
--- /dev/null
+++ b/test/files/pos/t720.scala
@@ -0,0 +1,9 @@
+trait Conv
+object Conv {
+ implicit def one2two (one: One): Two = new Two }
+class One extends Conv
+class Two
+object Test2 extends App {
+ def fun (two: Two) = ()
+ fun(new One)
+}
diff --git a/test/files/pos/bug756.scala b/test/files/pos/t756.scala
index a3c790c654..a3c790c654 100644
--- a/test/files/pos/bug756.scala
+++ b/test/files/pos/t756.scala
diff --git a/test/files/pos/t757.scala b/test/files/pos/t757.scala
new file mode 100644
index 0000000000..7513910d8d
--- /dev/null
+++ b/test/files/pos/t757.scala
@@ -0,0 +1,13 @@
+package foo {
+ object C {
+ def foo {
+ Console.println("foo")
+ }
+ }
+}
+
+package bar {
+ object Main extends App {
+ foo.C.foo
+ }
+}
diff --git a/test/files/pos/bug757a.scala b/test/files/pos/t757a.scala
index f52652b1ba..f52652b1ba 100644
--- a/test/files/pos/bug757a.scala
+++ b/test/files/pos/t757a.scala
diff --git a/test/files/pos/t758.scala b/test/files/pos/t758.scala
new file mode 100644
index 0000000000..44769d54f1
--- /dev/null
+++ b/test/files/pos/t758.scala
@@ -0,0 +1,7 @@
+trait A { type T; type M >: T }
+trait B extends A {
+ val x : String;
+ val u : A { type T = B.this.T } ;
+ type T = x.type;
+ type M = u.M
+}
diff --git a/test/files/pos/t759.scala b/test/files/pos/t759.scala
new file mode 100644
index 0000000000..4fa0ca0b22
--- /dev/null
+++ b/test/files/pos/t759.scala
@@ -0,0 +1,6 @@
+object Test extends App {
+
+ def f[A](x : => A) = x
+
+ Console.println(f(Array(42))(0))
+}
diff --git a/test/files/pos/bug762.scala b/test/files/pos/t762.scala
index 76860272ea..76860272ea 100644
--- a/test/files/pos/bug762.scala
+++ b/test/files/pos/t762.scala
diff --git a/test/files/pos/t767.scala b/test/files/pos/t767.scala
new file mode 100644
index 0000000000..d4d7eae870
--- /dev/null
+++ b/test/files/pos/t767.scala
@@ -0,0 +1,18 @@
+abstract class AbsCell {
+ type T = Node
+ val init: T
+ private var value: T = init
+ def get: T = value
+ def set (x: T) { value = x }
+
+ class Node {
+ val foo = 1
+ }
+}
+
+object inner {
+ def main(args: Array[String]) {
+ val cell = new AbsCell { val init = new Node() }
+ cell.set(new cell.type#T()) // nullpointer exception
+ }
+}
diff --git a/test/files/pos/bug780.scala b/test/files/pos/t780.scala
index 7ed6745d9f..7ed6745d9f 100644
--- a/test/files/pos/bug780.scala
+++ b/test/files/pos/t780.scala
diff --git a/test/files/pos/t788.scala b/test/files/pos/t788.scala
new file mode 100644
index 0000000000..3da88a2d26
--- /dev/null
+++ b/test/files/pos/t788.scala
@@ -0,0 +1,19 @@
+package test;
+
+trait Test {
+ type Node <: NodeImpl;
+ trait NodeImpl;
+ type Expression <: Node with ExpressionImpl;
+ trait ExpressionImpl extends NodeImpl {
+ def self : Expression;
+ }
+ type Named <: Node with NamedImpl;
+ trait NamedImpl extends NodeImpl {
+ def self : Named;
+ }
+ def asExpression(e : ExpressionImpl) : Named = {
+ e match {
+ case f : NamedImpl => f.self;
+ }
+ }
+}
diff --git a/test/files/pos/bug789.scala b/test/files/pos/t789.scala
index 7a17f10b0e..7a17f10b0e 100644
--- a/test/files/pos/bug789.scala
+++ b/test/files/pos/t789.scala
diff --git a/test/files/pos/t796.scala b/test/files/pos/t796.scala
new file mode 100644
index 0000000000..066625179e
--- /dev/null
+++ b/test/files/pos/t796.scala
@@ -0,0 +1,26 @@
+/** I know what I am doing is wrong -- since I am about to look into
+ * this bug, I add a test in pending/pos... however, I am afraid that
+ * once this bug is fixed, this test case might go into test/pos
+ * there it adds to the huge number of tiny little test cases.
+ *
+ * Ideally, an option in the bugtracking system would automatically
+ * handle "pos" bugs.
+ */
+object Test extends App {
+
+ object Twice {
+ def apply(x: Int) = x * 2
+ def unapply(x: Int): Option[Tuple1[Int]] =
+ if (x % 2 == 0) Some(Tuple1(x / 2))
+ else None
+ }
+
+ def test(x: Int) = x match {
+ case Twice(y) => "x is two times "+y
+ case _ => "x is odd"
+ }
+
+ Console.println(test(3))
+ Console.println(test(4))
+
+}
diff --git a/test/files/pos/t802.scala b/test/files/pos/t802.scala
new file mode 100644
index 0000000000..124d4915bc
--- /dev/null
+++ b/test/files/pos/t802.scala
@@ -0,0 +1,27 @@
+package test;
+trait Test {
+ abstract class BracesImpl {
+ type Singleton;
+ type Brace <: Singleton with BraceImpl;
+ trait BraceImpl;
+ trait ForFile;
+ }
+ abstract class ParensImpl extends BracesImpl {
+ type Brace <: Singleton with BraceImpl;
+ trait BraceImpl extends super.BraceImpl;
+ }
+ val parens : ParensImpl;
+ abstract class BracksImpl extends BracesImpl {
+ type Brace <: Singleton with BraceImpl;
+ trait BraceImpl extends super.BraceImpl;
+ }
+ val bracks : BracksImpl;
+ trait File {
+ def parens0 : parens.BraceImpl;
+ def bracks0 : bracks.BraceImpl;
+ def braces(b : BracesImpl) = b match {
+ case b if b == parens => parens0;
+ case b if b == bracks => bracks0;
+ }
+ }
+}
diff --git a/test/files/pos/bug803.scala b/test/files/pos/t803.scala
index 066abecffa..066abecffa 100644
--- a/test/files/pos/bug803.scala
+++ b/test/files/pos/t803.scala
diff --git a/test/files/pos/bug805.scala b/test/files/pos/t805.scala
index 37bf6b5ef8..37bf6b5ef8 100644
--- a/test/files/pos/bug805.scala
+++ b/test/files/pos/t805.scala
diff --git a/test/files/pos/t807.scala b/test/files/pos/t807.scala
new file mode 100644
index 0000000000..ed73fe3f97
--- /dev/null
+++ b/test/files/pos/t807.scala
@@ -0,0 +1,45 @@
+trait Matcher {
+ trait Link {
+ type Self <: Link;
+ type Match <: Link { type Match = Link.this.Self; }
+ }
+ trait HasLinks {
+ def link(b : Boolean) : Link = null;
+ }
+
+}
+trait BraceMatcher extends Matcher {
+ trait BracePair {
+ trait BraceLink extends Link;
+ trait OpenLink extends BraceLink {
+ type Self = OpenLink;
+ type Match = CloseLink;
+ }
+ trait CloseLink extends BraceLink {
+ type Self = CloseLink;
+ type Match = OpenLink;
+ }
+ }
+}
+trait IfElseMatcher extends BraceMatcher {
+ trait IfElseLink extends Link;
+ trait IfLink extends IfElseLink {
+ type Self = IfLink;
+ type Match = ElseImpl;
+ }
+ trait ElseImpl extends IfElseLink with HasLinks {
+ type Self = ElseImpl;
+ type Match = IfLink;
+ override def link(b : Boolean) = this;
+ }
+ val parenPair : BracePair;
+ trait IfWithParenImpl extends HasLinks {
+ object ifLink extends IfLink;
+ object openParen extends parenPair.OpenLink;
+ override def link(b : Boolean): Link = b match {
+ case true => ifLink;
+ case false => openParen;
+ }
+ }
+}
+
diff --git a/test/files/pos/t812.scala b/test/files/pos/t812.scala
new file mode 100644
index 0000000000..709b59c194
--- /dev/null
+++ b/test/files/pos/t812.scala
@@ -0,0 +1,7 @@
+package test;
+import scala.{App => Main};
+class Test extends Main {
+ import test.{Test => Hello}
+ super[App].main(Array("test"));
+ private[Test] def xxx = 10;
+}
diff --git a/test/files/pos/t839.scala b/test/files/pos/t839.scala
new file mode 100644
index 0000000000..72f6ca0ec9
--- /dev/null
+++ b/test/files/pos/t839.scala
@@ -0,0 +1,26 @@
+// see pending/pos/t112606A.scala
+package test;
+trait Test {
+ trait Global {
+ type Tree;
+ def get : Tree;
+ }
+ trait TreeBuilder {
+ val global : Global;
+ def set(tree : global.Tree) = {}
+ }
+ val nsc : Global;
+ trait FileImpl {
+ object treeBuilder extends TreeBuilder {
+ val global : nsc.type = nsc;
+ }
+ // OK
+ treeBuilder.set(nsc.get);
+ }
+ val file0 : FileImpl;
+ // OK
+ file0.treeBuilder.set(nsc.get);
+ def file : FileImpl;
+ // type mismatch
+ file.treeBuilder.set(nsc.get);
+}
diff --git a/test/files/pos/bug851.scala b/test/files/pos/t851.scala
index afe4b79d3c..afe4b79d3c 100644
--- a/test/files/pos/bug851.scala
+++ b/test/files/pos/t851.scala
diff --git a/test/files/pos/bug873.scala b/test/files/pos/t873.scala
index b8c50afd35..b8c50afd35 100644
--- a/test/files/pos/bug873.scala
+++ b/test/files/pos/t873.scala
diff --git a/test/files/pos/bug880.scala b/test/files/pos/t880.scala
index cceb53c398..cceb53c398 100644
--- a/test/files/pos/bug880.scala
+++ b/test/files/pos/t880.scala
diff --git a/test/files/pos/bug892.scala b/test/files/pos/t892.scala
index 41da7095bd..41da7095bd 100644
--- a/test/files/pos/bug892.scala
+++ b/test/files/pos/t892.scala
diff --git a/test/files/pos/bug911.scala b/test/files/pos/t911.scala
index 224b14cda3..224b14cda3 100644
--- a/test/files/pos/bug911.scala
+++ b/test/files/pos/t911.scala
diff --git a/test/files/pos/t927.scala b/test/files/pos/t927.scala
new file mode 100644
index 0000000000..534f355045
--- /dev/null
+++ b/test/files/pos/t927.scala
@@ -0,0 +1,11 @@
+object Test {
+
+ def sum(stream: Stream[Int]): Int =
+ stream match {
+ case Stream.Empty => 0
+ case Stream.cons(hd, tl) => hd + sum(tl)
+ }
+ val str: Stream[Int] = List(1,2,3).iterator.toStream
+ assert(sum(str) == 6)
+
+}
diff --git a/test/files/pos/t946.scala b/test/files/pos/t946.scala
new file mode 100644
index 0000000000..9f4cdbc043
--- /dev/null
+++ b/test/files/pos/t946.scala
@@ -0,0 +1,8 @@
+object pmbugbounds {
+ trait Bar
+ class Foo[t <: Bar] {}
+
+ (new Foo[Bar]) match {
+ case _ : Foo[x] => null
+ }
+}
diff --git a/test/files/pos/tcpoly_boundedmonad.scala b/test/files/pos/tcpoly_boundedmonad.scala
index ef02507b66..24a911769b 100644
--- a/test/files/pos/tcpoly_boundedmonad.scala
+++ b/test/files/pos/tcpoly_boundedmonad.scala
@@ -1,19 +1,19 @@
trait Monad[T <: Bound[T], MyType[x <: Bound[x]], Bound[_]] {
- def map[S <: Bound[S]](f: T => S): MyType[S]
+ def map[S <: Bound[S]](f: T => S): MyType[S]
- def flatMap[S <: RBound[S], RContainer[x <: RBound[x]], RBound[_],
+ def flatMap[S <: RBound[S], RContainer[x <: RBound[x]], RBound[_],
Result[x <: RBound[x]] <: Monad[x, RContainer, RBound]]
- (f: T => Result[S]): Result[S]
+ (f: T => Result[S]): Result[S]
def filter(p: T => Boolean): MyType[T]
}
class Set[T <: Ordered[T]] extends Monad[T, Set, Ordered] {
- def map[S <: Ordered[S]](f: T => S): Set[S] = error("TODO")
-
- def flatMap[S <: RBound[S], RContainer[x <: RBound[x]], RBound[_],
+ def map[S <: Ordered[S]](f: T => S): Set[S] = error("TODO")
+
+ def flatMap[S <: RBound[S], RContainer[x <: RBound[x]], RBound[_],
Result[x <: RBound[x]] <: Monad[x, RContainer, RBound]]
- (f: T => Result[S]): Result[S] = error("TODO")
-
- def filter(p: T => Boolean): Set[T] = error("TODO")
+ (f: T => Result[S]): Result[S] = error("TODO")
+
+ def filter(p: T => Boolean): Set[T] = error("TODO")
}
diff --git a/test/files/pos/tcpoly_bounds1.scala b/test/files/pos/tcpoly_bounds1.scala
index 5874cc664d..142c0b7b7f 100644
--- a/test/files/pos/tcpoly_bounds1.scala
+++ b/test/files/pos/tcpoly_bounds1.scala
@@ -1,6 +1,6 @@
-class Foo[t[x]<: Pair[Int, x]]
+class Foo[t[x]<: Pair[Int, x]]
-//
+//
class MyPair[z](a: Int, b: z) extends Pair[Int, z](a,b)
object foo extends Foo[MyPair]
diff --git a/test/files/pos/tcpoly_checkkinds_mix.scala b/test/files/pos/tcpoly_checkkinds_mix.scala
index 3734405f8b..2d265da6b9 100644
--- a/test/files/pos/tcpoly_checkkinds_mix.scala
+++ b/test/files/pos/tcpoly_checkkinds_mix.scala
@@ -2,9 +2,9 @@ trait Iterable[A <: Bound[A], Bound[_]] {
type MyType[x <: Bound[x]] <: Iterable[x, Bound]
def map[B <: Bound[B]](f: A => B): MyType[B]
def flatMap[B <: Bound[B]](f: A => MyType[B]): MyType[B]
- def filter(p: A => Boolean): MyType[A]
+ def filter(p: A => Boolean): MyType[A]
}
-trait OrderedSet[T <: Ordered[T]] extends Iterable[T, Ordered] {
+trait OrderedSet[T <: Ordered[T]] extends Iterable[T, Ordered] {
type MyType[x <: Ordered[x]] = OrderedSet[x]
-}
+}
diff --git a/test/files/pos/tcpoly_gm.scala b/test/files/pos/tcpoly_gm.scala
index 95361e0dac..ecaeef9679 100644
--- a/test/files/pos/tcpoly_gm.scala
+++ b/test/files/pos/tcpoly_gm.scala
@@ -1,4 +1,4 @@
-trait Rep[a] {
+trait Rep[a] {
def rep[m[x]]: m[a] // typedTypeApply must use asSeenFrom to adapt the return type
// since rep is called on x: Rep[t]
// a must become t
@@ -9,7 +9,7 @@ case class ShowBin[b](app: b => String)
object foo {
def showBin[t](x: Rep[t], y: t): String = {
val r: ShowBin[t] = x.rep[ShowBin]
- r.app(y)
+ r.app(y)
}
}
-
+
diff --git a/test/files/pos/tcpoly_higherorder_bound_method.scala b/test/files/pos/tcpoly_higherorder_bound_method.scala
index 3905b3b96d..090bb8fcf3 100644
--- a/test/files/pos/tcpoly_higherorder_bound_method.scala
+++ b/test/files/pos/tcpoly_higherorder_bound_method.scala
@@ -1,3 +1,3 @@
trait SkolemisationOfHigherOrderBoundInMethod {
def method[A, N[X <: A], M[X <: N[A]]]: Unit
-}
+}
diff --git a/test/files/pos/tcpoly_infer_explicit_tuple_wrapper.scala b/test/files/pos/tcpoly_infer_explicit_tuple_wrapper.scala
index de31efd565..97594d506d 100644
--- a/test/files/pos/tcpoly_infer_explicit_tuple_wrapper.scala
+++ b/test/files/pos/tcpoly_infer_explicit_tuple_wrapper.scala
@@ -7,9 +7,9 @@ class IterableOps[CC[+B] <: Iterable[B] with GenericTraversableTemplate[B, CC],
object Test {
- implicit def tupleOfIterableWrapper[CC[+B] <: Iterable[B] with GenericTraversableTemplate[B, CC], A1, A2](tuple: (CC[A1], Iterable[A2]))
+ implicit def tupleOfIterableWrapper[CC[+B] <: Iterable[B] with GenericTraversableTemplate[B, CC], A1, A2](tuple: (CC[A1], Iterable[A2]))
= new IterableOps[CC, A1, A2](tuple)
-
+
val t = (List(1, 2, 3), List(6, 5, 4))
tupleOfIterableWrapper(t) unzip
diff --git a/test/files/pos/tcpoly_infer_ticket1864.scala b/test/files/pos/tcpoly_infer_ticket1864.scala
index 587483287d..77d20234d5 100644
--- a/test/files/pos/tcpoly_infer_ticket1864.scala
+++ b/test/files/pos/tcpoly_infer_ticket1864.scala
@@ -9,7 +9,7 @@ class RichBuffer[T, B[U] <: Buffer[U]](buffer: Buffer[T]) {
}
}
-object Application {
+object App {
def mymap2[T, B[U] <: Buffer[U], S](buffer: B[T], f: T => S)(implicit rv: B[S]): B[S] = {
buffer.foreach{ e =>
rv += f(e)
diff --git a/test/files/pos/tcpoly_infer_ticket716.scala b/test/files/pos/tcpoly_infer_ticket716.scala
index cfba07fa43..24e8f663bc 100644
--- a/test/files/pos/tcpoly_infer_ticket716.scala
+++ b/test/files/pos/tcpoly_infer_ticket716.scala
@@ -18,9 +18,9 @@ object Functor{
//implicit def liftListtoOO[A](arg:List[A]):OOFunctor[List,A] = new OOFunctor[List,A](arg)
}
-object GeneralLiftingDemo extends Application {
+object GeneralLiftingDemo extends App {
import Functor._
val l = List(1,2,3)
val res = l fmap( 1+) // TODO: should not need explicit call to lifttoOO
println("OO : " + res )
-} \ No newline at end of file
+}
diff --git a/test/files/pos/tcpoly_late_method_params.scala b/test/files/pos/tcpoly_late_method_params.scala
index e2f0bcffb3..c9298918a0 100644
--- a/test/files/pos/tcpoly_late_method_params.scala
+++ b/test/files/pos/tcpoly_late_method_params.scala
@@ -1,5 +1,5 @@
trait Foo {
- def flatMap[RT <: RBound[RT], RBound[_], Result[x <: RBound[x]]]: Result[RT]
+ def flatMap[RT <: RBound[RT], RBound[_], Result[x <: RBound[x]]]: Result[RT]
// bounds for RT& = >: scala.this.Nothing <: RBound&[RT&]
// bounds for x = >: scala.this.Nothing <: RBound&[x]
}
diff --git a/test/files/pos/tcpoly_method.scala b/test/files/pos/tcpoly_method.scala
index 294b53b915..80dc0482fd 100644
--- a/test/files/pos/tcpoly_method.scala
+++ b/test/files/pos/tcpoly_method.scala
@@ -1,6 +1,6 @@
trait Iterable[m[+x], +t] {
def flatMap[resColl[+x] <: Iterable[resColl, x], s](f: t => resColl[s]): resColl[s]
-
+
def foo[a[x]] = "a"
val x = foo[List]
}
diff --git a/test/files/pos/tcpoly_overloaded.scala b/test/files/pos/tcpoly_overloaded.scala
index f67e4a9fef..4240074d85 100644
--- a/test/files/pos/tcpoly_overloaded.scala
+++ b/test/files/pos/tcpoly_overloaded.scala
@@ -1,10 +1,10 @@
trait Monad[T <: Bound[T], MyType[x <: Bound[x]], Bound[_]] {
- def flatMap[S <: RBound[S], RContainer[x <: RBound[x]], RBound[_],
+ def flatMap[S <: RBound[S], RContainer[x <: RBound[x]], RBound[_],
Result[x <: RBound[x]] <: Monad[x, RContainer, RBound]]
- (f: T => Result[S]): Result[S]
- def flatMap[S <: RBound[S], RContainer[x <: RBound[x]], RBound[_],
+ (f: T => Result[S]): Result[S]
+ def flatMap[S <: RBound[S], RContainer[x <: RBound[x]], RBound[_],
Result[x <: RBound[x]] <: Monad[x, RContainer, RBound]]
- (f: T => Result[S], foo: String): Result[S]
+ (f: T => Result[S], foo: String): Result[S]
def flatMap[S <: Bound[S]]
(f: T => MyType[S], foo: Int): MyType[S]
}
@@ -12,14 +12,14 @@ trait Monad[T <: Bound[T], MyType[x <: Bound[x]], Bound[_]] {
trait Test {
def moo: MList[Int]
class MList[T](el: T) extends Monad[T, List, Any] {
- def flatMap[S <: RBound[S], RContainer[x <: RBound[x]], RBound[_],
+ def flatMap[S <: RBound[S], RContainer[x <: RBound[x]], RBound[_],
Result[x <: RBound[x]] <: Monad[x, RContainer, RBound]]
(f: T => Result[S]): Result[S] = error("foo")
- def flatMap[S <: RBound[S], RContainer[x <: RBound[x]], RBound[_],
+ def flatMap[S <: RBound[S], RContainer[x <: RBound[x]], RBound[_],
Result[x <: RBound[x]] <: Monad[x, RContainer, RBound]]
(f: T => Result[S], foo: String): Result[S] = error("foo")
def flatMap[S]
- (f: T => List[S], foo: Int): List[S] = error("foo")
+ (f: T => List[S], foo: Int): List[S] = error("foo")
}
val l: MList[String] = moo.flatMap[String, List, Any, MList]((x: Int) => new MList("String"))
}
diff --git a/test/files/pos/tcpoly_poly.scala b/test/files/pos/tcpoly_poly.scala
index 1ba04e29df..50ffc7837f 100644
--- a/test/files/pos/tcpoly_poly.scala
+++ b/test/files/pos/tcpoly_poly.scala
@@ -1,3 +1,3 @@
-class Monad[m[x]]
+class Monad[m[x]]
object ml extends Monad[List]
diff --git a/test/files/pos/tcpoly_return_overriding.scala b/test/files/pos/tcpoly_return_overriding.scala
index 57ec8da76c..0814e73fa4 100644
--- a/test/files/pos/tcpoly_return_overriding.scala
+++ b/test/files/pos/tcpoly_return_overriding.scala
@@ -2,7 +2,7 @@ trait Generic[g[x]] {
def unit: g[Unit]
}
-trait Rep[t] {
+trait Rep[t] {
def rep[m[x]](implicit gen: Generic[m]): m[t]
}
diff --git a/test/files/pos/tcpoly_seq.scala b/test/files/pos/tcpoly_seq.scala
index 48b3e1ce52..b5f46f6b6b 100644
--- a/test/files/pos/tcpoly_seq.scala
+++ b/test/files/pos/tcpoly_seq.scala
@@ -6,40 +6,40 @@ trait HOSeq {
// values implementing this interface, in order to provide more performant ways of building that structure
trait Accumulator[+coll[x], elT] {
def += (el: elT): Unit
- def result: coll[elT]
+ def result: coll[elT]
}
-
-
+
+
// Iterable abstracts over the type of its structure as well as its elements (see PolyP's Bifunctor)
- // m[x] is intentionally unbounded: fold can then be defined nicely
- // variance: if we write m[+x] instead of +m[+x], x is an invariant position because its enclosing type
+ // m[x] is intentionally unbounded: fold can then be defined nicely
+ // variance: if we write m[+x] instead of +m[+x], x is an invariant position because its enclosing type
// is an invariant position -- should probably rule that out?
trait Iterable[+m[+x], +t] {
//def unit[a](orig: a): m[a]
def iterator: Iterator[t]
-
+
// construct an empty accumulator that will produce the same structure as this iterable, with elements of type t
def accumulator[t]: Accumulator[m, t]
-
+
def filter(p: t => Boolean): m[t] = {
val buf = accumulator[t]
val elems = iterator
while (elems.hasNext) { val x = elems.next; if (p(x)) buf += x }
buf.result
}
-
+
def map[s](f: t => s): m[s] = {
val buf = accumulator[s]
val elems = iterator
while (elems.hasNext) buf += f(elems.next)
buf.result
}
-
+
// flatMap is a more specialized map, it only works if the mapped function produces Iterable values,
// which are then added to the result one by one
// the compiler should be able to find the right accumulator (implicit buf) to build the result
// to get concat, resColl = SingletonIterable, f = unit for SingletonIterable
- def flatMap[resColl[+x] <: Iterable[resColl, x], s](f: t => resColl[s])(implicit buf: Accumulator[resColl, s]): resColl[s] = {
+ def flatMap[resColl[+x] <: Iterable[resColl, x], s](f: t => resColl[s])(implicit buf: Accumulator[resColl, s]): resColl[s] = {
// TODO: would a viewbound for resColl[x] be better?
// -- 2nd-order type params are not yet in scope in view bound
val elems = iterator
@@ -48,9 +48,9 @@ trait HOSeq {
while (elemss.hasNext) buf += elemss.next
}
buf.result
- }
+ }
}
-
+
final class ListBuffer[A] {
private var start: List[A] = Nil
private var last: ::[A] = _
@@ -78,7 +78,7 @@ trait HOSeq {
exported = !start.isEmpty
start
}
-
+
/** Clears the buffer contents.
*/
def clear {
@@ -97,13 +97,13 @@ trait HOSeq {
}
}
}
-
+
implicit def listAccumulator[elT]: Accumulator[List, elT] = new Accumulator[List, elT] {
private[this] val buff = new ListBuffer[elT]
def += (el: elT): Unit = buff += el
def result: List[elT] = buff.toList
}
-
+
trait List[+t] extends Iterable[List, t] {
def head: t
def tail: List[t]
@@ -121,14 +121,14 @@ trait HOSeq {
// construct an empty accumulator that will produce the same structure as this iterable, with elements of type t
def accumulator[t]: Accumulator[List, t] = listAccumulator[t]
}
-
+
// TODO: the var tl approach does not seem to work because subtyping isn't fully working yet
final case class ::[+b](hd: b, private val tl: List[b]) extends List[b] {
def head = hd
def tail = if(tl==null) this else tl // hack
override def isEmpty: Boolean = false
}
-
+
case object Nil extends List[Nothing] {
def isEmpty = true
def head: Nothing =
@@ -157,18 +157,18 @@ trait HOSeq {
def filter(f: T=>Boolean): FilterResult
def subseq(from: Int, to: Int): Subseq
def flatMap[S <: Seq[K], K](f: T => S): S#Concat // legal?
- def concat(others: Seq[T]): Concat
+ def concat(others: Seq[T]): Concat
*/
-
+
/*trait Iterator[t] {
// @post hasAdvanced implies hasNext
// model def hasAdvanced: Boolean
-
+
def hasNext: Boolean // pure
-
+
// @pre hasAdvanced
def current: t // pure
-
+
// @pre hasNext
// @post hasAdvanced
def advance: Unit
diff --git a/test/files/pos/tcpoly_seq_typealias.scala b/test/files/pos/tcpoly_seq_typealias.scala
index fb48126ce6..0651ad9760 100644
--- a/test/files/pos/tcpoly_seq_typealias.scala
+++ b/test/files/pos/tcpoly_seq_typealias.scala
@@ -6,42 +6,42 @@ trait HOSeq {
// values implementing this interface, in order to provide more performant ways of building that structure
trait Accumulator[+coll[x], elT] {
def += (el: elT): Unit
- def result: coll[elT]
+ def result: coll[elT]
}
-
-
+
+
// Iterable abstracts over the type of its structure as well as its elements (see PolyP's Bifunctor)
- // m[x] is intentionally unbounded: fold can then be defined nicely
- // variance: if we write m[+x] instead of +m[+x], x is an invariant position because its enclosing type
+ // m[x] is intentionally unbounded: fold can then be defined nicely
+ // variance: if we write m[+x] instead of +m[+x], x is an invariant position because its enclosing type
// is an invariant position -- should probably rule that out?
trait Iterable[+t] {
- type m[+x]
-
+ type m[+x]
+
//def unit[a](orig: a): m[a]
def iterator: Iterator[t]
-
+
// construct an empty accumulator that will produce the same structure as this iterable, with elements of type t
def accumulator[t]: Accumulator[m, t]
-
+
def filter(p: t => Boolean): m[t] = {
val buf = accumulator[t]
val elems = iterator
while (elems.hasNext) { val x = elems.next; if (p(x)) buf += x }
buf.result
}
-
+
def map[s](f: t => s): m[s] = {
val buf = accumulator[s]
val elems = iterator
while (elems.hasNext) buf += f(elems.next)
buf.result
}
-
+
// flatMap is a more specialized map, it only works if the mapped function produces Iterable values,
// which are then added to the result one by one
// the compiler should be able to find the right accumulator (implicit buf) to build the result
// to get concat, resColl = SingletonIterable, f = unit for SingletonIterable
- def flatMap[resColl[+x] <: Iterable[x], s](f: t => resColl[s])(implicit buf: Accumulator[resColl, s]): resColl[s] = {
+ def flatMap[resColl[+x] <: Iterable[x], s](f: t => resColl[s])(implicit buf: Accumulator[resColl, s]): resColl[s] = {
// TODO: would a viewbound for resColl[x] be better?
// -- 2nd-order type params are not yet in scope in view bound
val elems = iterator
@@ -50,9 +50,9 @@ trait HOSeq {
while (elemss.hasNext) buf += elemss.next
}
buf.result
- }
+ }
}
-
+
final class ListBuffer[A] {
private var start: List[A] = Nil
private var last: ::[A] = _
@@ -80,7 +80,7 @@ trait HOSeq {
exported = !start.isEmpty
start
}
-
+
/** Clears the buffer contents.
*/
def clear {
@@ -99,16 +99,16 @@ trait HOSeq {
}
}
}
-
+
implicit def listAccumulator[elT]: Accumulator[List, elT] = new Accumulator[List, elT] {
private[this] val buff = new ListBuffer[elT]
def += (el: elT): Unit = buff += el
def result: List[elT] = buff.toList
}
-
+
trait List[+t] extends Iterable[t] {
type m[+x] = List[x]
-
+
def head: t
def tail: List[t]
def isEmpty: Boolean
@@ -125,14 +125,14 @@ trait HOSeq {
// construct an empty accumulator that will produce the same structure as this iterable, with elements of type t
def accumulator[t]: Accumulator[List, t] = listAccumulator[t]
}
-
+
// TODO: the var tl approach does not seem to work because subtyping isn't fully working yet
final case class ::[+b](hd: b, private val tl: List[b]) extends List[b] {
def head = hd
def tail = if(tl==null) this else tl // hack
override def isEmpty: Boolean = false
}
-
+
case object Nil extends List[Nothing] {
def isEmpty = true
def head: Nothing =
diff --git a/test/files/pos/tcpoly_variance.scala b/test/files/pos/tcpoly_variance_pos.scala
index b641716d50..b641716d50 100644
--- a/test/files/pos/tcpoly_variance.scala
+++ b/test/files/pos/tcpoly_variance_pos.scala
diff --git a/test/files/pos/ted.scala b/test/files/pos/ted.scala
index 314f109328..d8ae64f29b 100644
--- a/test/files/pos/ted.scala
+++ b/test/files/pos/ted.scala
@@ -9,7 +9,7 @@ object App
case (b, e) => b * exponentiate(b, e - 1)
}
-
+
def main(args : Array[String]) =
System.out.println(exponentiate(2, 2))
diff --git a/test/files/pos/test2.scala b/test/files/pos/test2.scala
deleted file mode 100644
index 0dcc16ffab..0000000000
--- a/test/files/pos/test2.scala
+++ /dev/null
@@ -1,5 +0,0 @@
-import scala._;
-object test2 {
- def f(x: Int): Int = 'a';
- def g(x: Int) = f(f(x));
-}
diff --git a/test/files/pos/test5.scala b/test/files/pos/test5.scala
index 4dbafc9ac3..b04de5d613 100644
--- a/test/files/pos/test5.scala
+++ b/test/files/pos/test5.scala
@@ -53,7 +53,7 @@ object test {
// Check type j.P
j.chk_ip(val_mp);
- j.chk_ip(val_np);
+ j.chk_ip(val_np);
// Check type i.X
i.chk_ix(i.val_ix);
@@ -63,6 +63,6 @@ object test {
// Check j.X
j.chk_ix(j.val_ix);
j.chk_ix(j.val_jx);
- j.chk_ix(val_njx);
+ j.chk_ix(val_njx);
}
}
diff --git a/test/files/pos/test5refine.scala b/test/files/pos/test5refine.scala
index 5459b3b975..290449c3ed 100644
--- a/test/files/pos/test5refine.scala
+++ b/test/files/pos/test5refine.scala
@@ -60,7 +60,7 @@ object test {
// Check type j.P
j.chk_ip(val_mp);
- j.chk_ip(val_np);
+ j.chk_ip(val_np);
// Check type i.X
i.chk_ix(i.val_ix);
@@ -70,6 +70,6 @@ object test {
// Check j.X
j.chk_ix(j.val_ix);
j.chk_ix(j.val_jx);
- j.chk_ix(val_njx);
+ j.chk_ix(val_njx);
}
}
diff --git a/test/files/pos/testCoercionThis.scala b/test/files/pos/testCoercionThis.scala
new file mode 100644
index 0000000000..8bbfdcd684
--- /dev/null
+++ b/test/files/pos/testCoercionThis.scala
@@ -0,0 +1,19 @@
+object Test {
+ implicit def foo2bar(foo: Foo): Bar = foo.bar
+
+ class Foo(val bar: Bar) {
+ def testCoercion = {
+ val a: this.type = this
+ a.baz /* here, foo2bar is inferred by the compiler, as expected */
+ }
+ // def testCoercionThis0 = baz
+ // --> error: not found: value baz
+ // PP: is that something we really want to work? Seems like sketchville.
+ //
+ // These work, so I moved this out of pending.
+ def testCoercionThis1 = this.baz
+ def testCoercionThis2 = (this: Foo).baz
+ }
+
+ class Bar { def baz = System.out.println("baz") }
+}
diff --git a/test/files/pos/thistypes.scala b/test/files/pos/thistypes.scala
index 7319cc1ecb..26339e07c4 100644
--- a/test/files/pos/thistypes.scala
+++ b/test/files/pos/thistypes.scala
@@ -5,4 +5,4 @@ trait B {
trait C extends B {
def foo: C.this.I;
-}
+}
diff --git a/test/files/pos/ticket0137.scala b/test/files/pos/ticket0137.scala
index 94ef8e49fc..72f955fe5e 100644
--- a/test/files/pos/ticket0137.scala
+++ b/test/files/pos/ticket0137.scala
@@ -1,7 +1,7 @@
-trait AbsM {
- abstract class MonadCompanion[M[_]]
+trait AbsM {
+ abstract class MonadCompanion[M[_]]
abstract class AbsMonadCompanion extends MonadCompanion[AM] {
- def newTag: Int
+ def newTag: Int
}
type AM[_] // to trigger the bug, this must be an abstract type member that comes after the reference to it
diff --git a/test/pending/pos/ticket2251.scala b/test/files/pos/ticket2251.scala
index 7b6efb0ea0..b3afee4ea9 100644
--- a/test/pending/pos/ticket2251.scala
+++ b/test/files/pos/ticket2251.scala
@@ -1,6 +1,6 @@
// Martin: I am not sure this is a solvable problem right now. I'll leave it in pending.
-// derived from pos/bug1001
+// derived from pos/t1001
class A
trait B[T <: B[T]] extends A
class C extends B[C]
diff --git a/test/files/pos/traits.scala b/test/files/pos/traits.scala
index 8dcd9c0b5f..bd64d7215a 100644
--- a/test/files/pos/traits.scala
+++ b/test/files/pos/traits.scala
@@ -20,8 +20,8 @@ object Test {
trait BorderedColoredShape extends Shape with Bordered with Colored {
override def equals(other: Any) = other match {
case that: BorderedColoredShape => (
- super.equals(that) &&
- super[Bordered].equals(that) &&
+ super.equals(that) &&
+ super[Bordered].equals(that) &&
super[Colored].equals(that))
case _ => false
}
diff --git a/test/files/pos/typealias_dubious.scala b/test/files/pos/typealias_dubious.scala
index de6bb67fe3..587453a037 100644
--- a/test/files/pos/typealias_dubious.scala
+++ b/test/files/pos/typealias_dubious.scala
@@ -1,8 +1,8 @@
class MailBox {
- //class Message
+ //class Message
type Message = AnyRef
-}
-
+}
+
abstract class Actor {
private val in = new MailBox
@@ -10,6 +10,6 @@ abstract class Actor {
def unstable: Actor = error("foo")
- def dubiousSend(msg: MailBox#Message) =
+ def dubiousSend(msg: MailBox#Message) =
unstable.send(msg) // in.Message becomes unstable.Message, but that's ok since Message is a concrete type member
-}
+}
diff --git a/test/files/pos/typealiases.scala b/test/files/pos/typealiases.scala
index d03b521f77..5974921ed3 100644
--- a/test/files/pos/typealiases.scala
+++ b/test/files/pos/typealiases.scala
@@ -3,18 +3,18 @@ package foo
trait Test[T] {
type Check[T] = Array[T] => Unit;
type MyPair[S] = (T, S)
-
+
val pair1: (T, Int)
val pair: MyPair[Int] = pair1
-
+
def check(xs: Array[T], c: Check[T]) = c(xs)
- def check2[S](xs: Array[S], c: Check[S]) = c(xs)
-}
+ def check2[S](xs: Array[S], c: Check[S]) = c(xs)
+}
-object main extends Test[Int] {
- val pair1 = (1,1)
+object main extends Test[Int] {
+ val pair1 = (1,1)
implicit def topair(x: Int): Pair[Int, Int] = (x,x)
- val pair2: MyPair[Int] = 1
+ val pair2: MyPair[Int] = 1
val x: Short = 1
}
diff --git a/test/files/pos/typerep-stephane.scala b/test/files/pos/typerep-stephane.scala
index 1061212369..2cb899591a 100644
--- a/test/files/pos/typerep-stephane.scala
+++ b/test/files/pos/typerep-stephane.scala
@@ -41,7 +41,7 @@ object typerep {
}
-object test extends Application {
+object test extends App {
import typerep._
println(3.getType)
println(List(3).getType)
diff --git a/test/files/pos/typerep.scala b/test/files/pos/typerep.scala
deleted file mode 100644
index 7faa8a1928..0000000000
--- a/test/files/pos/typerep.scala
+++ /dev/null
@@ -1,21 +0,0 @@
-object typerep extends Application {
- class TypeRep[T] {}
- case object IntRep extends TypeRep[Int] {
- override def toString = "Int"
- }
- case object BooleanRep extends TypeRep[Boolean] {
- override def toString = "Boolean"
- }
- case class ListRep[T](elemrep: TypeRep[T]) extends TypeRep[List[T]] {
- override def toString = "List"
- }
-
- implicit def intRep: TypeRep[Int] = IntRep
- implicit def booleanRep: TypeRep[Boolean] = BooleanRep
- implicit def listRep[T](implicit elemrep: TypeRep[T]): TypeRep[List[T]] = ListRep(elemrep)
-
- def getType[T](x: T)(implicit rep: TypeRep[T]): TypeRep[T] = rep
-
- println(getType(1))
- println(getType(List(1)))
-}
diff --git a/test/files/pos/typerep_pos.scala b/test/files/pos/typerep_pos.scala
new file mode 100644
index 0000000000..ebb643d321
--- /dev/null
+++ b/test/files/pos/typerep_pos.scala
@@ -0,0 +1,21 @@
+object typerep extends App {
+ class TypeRep[T] {}
+ case object IntRep extends TypeRep[Int] {
+ override def toString = "Int"
+ }
+ case object BooleanRep extends TypeRep[Boolean] {
+ override def toString = "Boolean"
+ }
+ case class ListRep[T](elemrep: TypeRep[T]) extends TypeRep[List[T]] {
+ override def toString = "List"
+ }
+
+ implicit def intRep: TypeRep[Int] = IntRep
+ implicit def booleanRep: TypeRep[Boolean] = BooleanRep
+ implicit def listRep[T](implicit elemrep: TypeRep[T]): TypeRep[List[T]] = ListRep(elemrep)
+
+ def getType[T](x: T)(implicit rep: TypeRep[T]): TypeRep[T] = rep
+
+ println(getType(1))
+ println(getType(List(1)))
+}
diff --git a/test/files/pos/unapplyComplex.scala b/test/files/pos/unapplyComplex.scala
index 70158348c3..148fcc1bb6 100644
--- a/test/files/pos/unapplyComplex.scala
+++ b/test/files/pos/unapplyComplex.scala
@@ -14,14 +14,14 @@ object ComplexRect {
def unapply(z:Complex): Option[Complex] = {
if(z.isInstanceOf[ComplexRect]) Some(z) else z match {
case ComplexPolar(mod, arg) =>
- Some(new ComplexRect(mod*Math.cos(arg), mod*Math.sin(arg)))
+ Some(new ComplexRect(mod*math.cos(arg), mod*math.sin(arg)))
} } }
object ComplexPolar {
def unapply(z:Complex): Option[Complex] = {
if(z.isInstanceOf[ComplexPolar]) Some(z) else z match {
case ComplexRect(re,im) =>
- Some(new ComplexPolar(Math.sqrt(re*re + im*im), Math.atan(re/im)))
+ Some(new ComplexPolar(math.sqrt(re*re + im*im), math.atan(re/im)))
} } }
object Test {
@@ -31,7 +31,7 @@ object Test {
Console.println("mod"+mod+"arg"+arg)
}
val Komplex = ComplexRect
- new ComplexPolar(Math.sqrt(2),Math.Pi / 4.0) match {
+ new ComplexPolar(math.sqrt(2),math.Pi / 4.0) match {
case Komplex(re,im) => // z @ ???
Console.println("re"+re+" im"+im)
}
diff --git a/test/files/pos/unapplyNeedsMemberType.scala b/test/files/pos/unapplyNeedsMemberType.scala
index b423257e04..2581512a7b 100644
--- a/test/files/pos/unapplyNeedsMemberType.scala
+++ b/test/files/pos/unapplyNeedsMemberType.scala
@@ -8,7 +8,7 @@ trait Gunk[a] {
def unapply(s: Seq) = unapply_Cons(s)
}
def unapply_Cons(s: Any): Option[Tuple2[a, Seq]]
-}
+}
class Join[a] extends Gunk[a] {
type Seq = JoinSeq
diff --git a/test/files/pos/unapplySeq.scala b/test/files/pos/unapplySeq.scala
index 6d13cc8b52..4d5409c6f7 100644
--- a/test/files/pos/unapplySeq.scala
+++ b/test/files/pos/unapplySeq.scala
@@ -4,7 +4,7 @@ object FooSeq {
val y = x.asInstanceOf[Bar]
Some(y.size, y.name)
} else None
- }
+ }
def main(args:Array[String]) = {
val b = new Bar
diff --git a/test/files/pos/unapplyVal.scala b/test/files/pos/unapplyVal.scala
index 338cdb1839..0d6394a90f 100644
--- a/test/files/pos/unapplyVal.scala
+++ b/test/files/pos/unapplyVal.scala
@@ -10,7 +10,7 @@ class Buffer {
def joinPat(x: Any): Unit = {
x match {
- case Put =>
+ case Put =>
case Put(y) =>
println("returning "+y)
}
@@ -18,7 +18,7 @@ class Buffer {
}
-object unapplyJoins extends Application { // bug #1257
+object unapplyJoins extends App { // bug #1257
class Sync {
def apply(): Int = 42
@@ -29,7 +29,7 @@ object unapplyJoins extends Application { // bug #1257
object Get extends Sync
val jp: PartialFunction[Any, Any] = {
- case Get() =>
+ case Get() =>
}
}
diff --git a/test/files/pos/variances.scala b/test/files/pos/variances_pos.scala
index 7dc56b0225..7dc56b0225 100644
--- a/test/files/pos/variances.scala
+++ b/test/files/pos/variances_pos.scala
diff --git a/test/files/pos/virtpatmat_castbinder.flags b/test/files/pos/virtpatmat_castbinder.flags
new file mode 100644
index 0000000000..9769db9257
--- /dev/null
+++ b/test/files/pos/virtpatmat_castbinder.flags
@@ -0,0 +1 @@
+ -Yvirtpatmat -Xexperimental
diff --git a/test/files/pos/virtpatmat_castbinder.scala b/test/files/pos/virtpatmat_castbinder.scala
new file mode 100644
index 0000000000..53e937e866
--- /dev/null
+++ b/test/files/pos/virtpatmat_castbinder.scala
@@ -0,0 +1,15 @@
+class IntMap[+V]
+case class Bin[+T](m: IntMap[T]) extends IntMap[T]
+case class Tip[+T](x: T) extends IntMap[T]
+
+trait IntMapIterator[V, T] {
+ def valueOf(tip: Tip[V]): T
+ def pop: IntMap[V]
+
+ def next: T =
+ pop match {
+ case Bin(t@Tip(_)) => {
+ valueOf(t)
+ }
+ }
+} \ No newline at end of file
diff --git a/test/files/pos/virtpatmat_exist1.flags b/test/files/pos/virtpatmat_exist1.flags
new file mode 100644
index 0000000000..9769db9257
--- /dev/null
+++ b/test/files/pos/virtpatmat_exist1.flags
@@ -0,0 +1 @@
+ -Yvirtpatmat -Xexperimental
diff --git a/test/files/pos/virtpatmat_exist1.scala b/test/files/pos/virtpatmat_exist1.scala
new file mode 100644
index 0000000000..ccb91299db
--- /dev/null
+++ b/test/files/pos/virtpatmat_exist1.scala
@@ -0,0 +1,24 @@
+import annotation.unchecked.{ uncheckedVariance=> uV }
+import scala.collection.immutable.{ListMap, HashMap, ListSet, HashSet}
+
+object Test {
+ class HashMapCollision1[A, +B](var hash: Int, var kvs: ListMap[A, B @uV]) extends HashMap[A, B @uV]
+ class HashSetCollision1[A](var hash: Int, var ks: ListSet[A]) extends HashSet[A]
+
+ def splitArray[T](ad: Array[Iterable[T]]): Any =
+ ad(0) match {
+ case _: HashMapCollision1[_, _] | _: HashSetCollision1[_] => null
+ }
+
+ // without type ascription for the one in the body of the last flatmap of each alternative, type inference borks on the existentials
+ // def splitArray[T >: Nothing <: Any](ad: Array[Iterable[T]]): Any = { import OptionMatching._
+ // runOrElse(ad.apply(0))(((x1: Iterable[T]) => (
+ // or(((x4: Iterable[T]) => one(null)),
+ // guard(x1.isInstanceOf[Iterable[T] with Test.HashMapCollision1[_,_]], x1.asInstanceOf[Iterable[T] with Test.HashMapCollision1[_,_]]).flatMap(((x2: Iterable[T] with Test.HashMapCollision1[_,_]) => one(x2))),
+ // guard(x1.isInstanceOf[Test.HashSetCollision1[_]], x1.asInstanceOf[Iterable[T] with Test.HashSetCollision1[_]]).flatMap(((x3: Iterable[T] with Test.HashSetCollision1[_]) => one(x3)))): Option[Any]).orElse(
+ // (zero: Option[Any])))
+ // )
+ // }
+
+}
+
diff --git a/test/files/pos/virtpatmat_exist2.flags b/test/files/pos/virtpatmat_exist2.flags
new file mode 100644
index 0000000000..9769db9257
--- /dev/null
+++ b/test/files/pos/virtpatmat_exist2.flags
@@ -0,0 +1 @@
+ -Yvirtpatmat -Xexperimental
diff --git a/test/files/pos/virtpatmat_exist2.scala b/test/files/pos/virtpatmat_exist2.scala
new file mode 100644
index 0000000000..b0e4c667b7
--- /dev/null
+++ b/test/files/pos/virtpatmat_exist2.scala
@@ -0,0 +1,20 @@
+class ParseResult[+T]
+case class MemoEntry[+T](var r: Either[Nothing,ParseResult[_]])
+
+object Test {
+ def grow[T]: ParseResult[T] = (null: MemoEntry[T]) match {
+ case MemoEntry(Right(x: ParseResult[_])) => x.asInstanceOf[ParseResult[T]]
+ }
+
+ // what's the _$1 doing there?
+ // def grow[T >: Nothing <: Any]: ParseResult[T] = {
+ // import OptionMatching._
+ // runOrElse[MemoEntry[T], ParseResult[T]]((null: MemoEntry[T]))(((x1: MemoEntry[T]) =>
+ // (MemoEntry.unapply[T](x1).flatMap[ParseResult[T]](((x4: Either[Nothing,ParseResult[_]]) =>
+ // guard[Right[Nothing,ParseResult[_]]](x4.isInstanceOf[Right[Nothing,ParseResult[_]]], x4.asInstanceOf[Right[Nothing,ParseResult[_]]]).flatMap[ParseResult[T]](((cp3: Right[Nothing,ParseResult[_]]) =>
+ // scala.Right.unapply[Nothing, ParseResult[_]](cp3).flatMap[ParseResult[T]](((x5: ParseResult[_]) =>
+ // guard[ParseResult[_$1]](x5.ne(null), x5.asInstanceOf[ParseResult[_]]).flatMap[ParseResult[T]](((x6: ParseResult[_]) =>
+ // one[ParseResult[T]](x6.asInstanceOf[ParseResult[T]]))))))))): Option[ParseResult[T]]
+ // ).orElse[ParseResult[T]]((zero: Option[ParseResult[T]]))))
+ // }
+} \ No newline at end of file
diff --git a/test/files/pos/virtpatmat_exist3.flags b/test/files/pos/virtpatmat_exist3.flags
new file mode 100644
index 0000000000..9769db9257
--- /dev/null
+++ b/test/files/pos/virtpatmat_exist3.flags
@@ -0,0 +1 @@
+ -Yvirtpatmat -Xexperimental
diff --git a/test/files/pos/virtpatmat_exist3.scala b/test/files/pos/virtpatmat_exist3.scala
new file mode 100644
index 0000000000..c8f873878f
--- /dev/null
+++ b/test/files/pos/virtpatmat_exist3.scala
@@ -0,0 +1,12 @@
+class ReferenceQueue[T] {
+ def wrapper(jref: ReferenceQueue[_]): ReferenceQueue[T] =
+ jref match {
+ case null => null
+ }
+
+ // def wrapper(jref: ReferenceQueue[_]): ReferenceQueue[T] = OptionMatching.runOrElse(jref)(((x1: ReferenceQueue[_]) =>
+ // (OptionMatching.guard(null.==(x1), x1.asInstanceOf[ReferenceQueue[_]]).flatMap(((x2: ReferenceQueue[_]) =>
+ // OptionMatching.one(null))): Option[ReferenceQueue[T]]).orElse(
+ // (OptionMatching.zero: Option[ReferenceQueue[T]])))
+ // )
+} \ No newline at end of file
diff --git a/test/files/pos/virtpatmat_gadt_array.flags b/test/files/pos/virtpatmat_gadt_array.flags
new file mode 100644
index 0000000000..9769db9257
--- /dev/null
+++ b/test/files/pos/virtpatmat_gadt_array.flags
@@ -0,0 +1 @@
+ -Yvirtpatmat -Xexperimental
diff --git a/test/files/pos/virtpatmat_gadt_array.scala b/test/files/pos/virtpatmat_gadt_array.scala
new file mode 100644
index 0000000000..27e72aa03e
--- /dev/null
+++ b/test/files/pos/virtpatmat_gadt_array.scala
@@ -0,0 +1,15 @@
+import scala.collection.mutable._
+object Test {
+ def genericArrayOps[T](xs: Array[T]): ArrayOps[T] = xs match {
+ case x: Array[AnyRef] => refArrayOps[AnyRef](x).asInstanceOf[ArrayOps[T]]
+ case null => null
+ }
+ // def genericArrayOps[T >: Nothing <: Any](xs: Array[T]): scala.collection.mutable.ArrayOps[T]
+ // = OptionMatching.runOrElse(xs)(((x1: Array[T]) =>
+ // ((OptionMatching.guard(x1.isInstanceOf[Array[AnyRef]], x1.asInstanceOf[Array[T] with Array[AnyRef]]).flatMap(((x2: Array[T] with Array[AnyRef]) =>
+ // OptionMatching.one(Test.this.refArrayOps[AnyRef](x2).asInstanceOf[scala.collection.mutable.ArrayOps[T]]))): Option[scala.collection.mutable.ArrayOps[T]]).orElse(
+ // (OptionMatching.guard(null.==(x1), x1.asInstanceOf[Array[T]]).flatMap(((x3: Array[T]) =>
+ // OptionMatching.one(null))): Option[scala.collection.mutable.ArrayOps[T]])): Option[scala.collection.mutable.ArrayOps[T]]).orElse((OptionMatching.zero: Option[scala.collection.mutable.ArrayOps[T]]))))
+
+ def refArrayOps[T <: AnyRef](xs: Array[T]): ArrayOps[T] = new ArrayOps.ofRef[T](xs)
+} \ No newline at end of file
diff --git a/test/files/pos/virtpatmat_infer_single_1.flags b/test/files/pos/virtpatmat_infer_single_1.flags
new file mode 100644
index 0000000000..9769db9257
--- /dev/null
+++ b/test/files/pos/virtpatmat_infer_single_1.flags
@@ -0,0 +1 @@
+ -Yvirtpatmat -Xexperimental
diff --git a/test/files/pos/virtpatmat_infer_single_1.scala b/test/files/pos/virtpatmat_infer_single_1.scala
new file mode 100644
index 0000000000..b42af956cc
--- /dev/null
+++ b/test/files/pos/virtpatmat_infer_single_1.scala
@@ -0,0 +1,7 @@
+case class TypeBounds(a: Type, b: Type)
+class Type {
+ def bounds: TypeBounds = bounds match {
+ case TypeBounds(_: this.type, _: this.type) => TypeBounds(this, this)
+ case oftp => oftp
+ }
+} \ No newline at end of file
diff --git a/test/files/pos/virtpatmat_obj_in_case.flags b/test/files/pos/virtpatmat_obj_in_case.flags
new file mode 100644
index 0000000000..9769db9257
--- /dev/null
+++ b/test/files/pos/virtpatmat_obj_in_case.flags
@@ -0,0 +1 @@
+ -Yvirtpatmat -Xexperimental
diff --git a/test/files/pos/virtpatmat_obj_in_case.scala b/test/files/pos/virtpatmat_obj_in_case.scala
new file mode 100644
index 0000000000..496de4c12e
--- /dev/null
+++ b/test/files/pos/virtpatmat_obj_in_case.scala
@@ -0,0 +1,5 @@
+class ObjInCase {
+ 0 match {
+ case _ => object o
+ }
+} \ No newline at end of file
diff --git a/test/files/pos/widen-existential.scala b/test/files/pos/widen-existential.scala
new file mode 100644
index 0000000000..d7fa3cc1d8
--- /dev/null
+++ b/test/files/pos/widen-existential.scala
@@ -0,0 +1,7 @@
+class A {
+ { val x = classOf[List[_]] }
+ def f = {
+ val g = classOf[List[_]]
+ List(g, g)
+ }
+} \ No newline at end of file
diff --git a/test/files/positions/Anon.scala b/test/files/positions/Anon.scala
index 940fff035a..65eb7ae477 100644
--- a/test/files/positions/Anon.scala
+++ b/test/files/positions/Anon.scala
@@ -2,7 +2,7 @@ object Anon {
trait Foo {
val bar : Int
}
-
+
def foo = new Foo {
override val bar = 23
}
diff --git a/test/files/positions/Enclosing1.scala b/test/files/positions/Enclosing1.scala
index e170187d60..7c8fbaf4a0 100644
--- a/test/files/positions/Enclosing1.scala
+++ b/test/files/positions/Enclosing1.scala
@@ -1,5 +1,5 @@
object Enclosing1 {
do {
-
+
} while (true)
}
diff --git a/test/files/positions/ExcludedPrefix1.scala b/test/files/positions/ExcludedPrefix1.scala
index f3562c37f0..72d9756b2a 100644
--- a/test/files/positions/ExcludedPrefix1.scala
+++ b/test/files/positions/ExcludedPrefix1.scala
@@ -5,16 +5,16 @@ object ExcludedPrefix1 {
case
object
BLAH
-
+
val
a = 1
-
+
var
b = 2
-
+
def
c = 23
-
+
private
def
d = 23
@@ -22,19 +22,19 @@ object ExcludedPrefix1 {
lazy
val
e = 23
-
+
private
type
f = Int
-
+
val
g,
h = 23
-
+
val
(i,
j) = (0, 0)
-
+
val Pair(
k,
l) = (0, 0)
diff --git a/test/files/positions/New1.scala b/test/files/positions/New1.scala
new file mode 100644
index 0000000000..bd17c0d523
--- /dev/null
+++ b/test/files/positions/New1.scala
@@ -0,0 +1,3 @@
+class New1 {
+ val a = new
+}
diff --git a/test/files/positions/Overlap3.scala b/test/files/positions/Overlap3.scala
index 4c5f8af9d1..657c12d4fd 100644
--- a/test/files/positions/Overlap3.scala
+++ b/test/files/positions/Overlap3.scala
@@ -1,3 +1,3 @@
object Overlap3 {
- val (a, b) = (0, 0)
+ val (a, b) = (0, 0)
}
diff --git a/test/files/positions/Overlap7.scala b/test/files/positions/Overlap7.scala
new file mode 100644
index 0000000000..b3dc0d10e2
--- /dev/null
+++ b/test/files/positions/Overlap7.scala
@@ -0,0 +1,3 @@
+import java.lang.String, java.lang.Object
+
+class Overlap7
diff --git a/test/files/positions/Scaladoc2.scala b/test/files/positions/Scaladoc2.scala
index e52263d86c..78bc4acb28 100644
--- a/test/files/positions/Scaladoc2.scala
+++ b/test/files/positions/Scaladoc2.scala
@@ -4,13 +4,13 @@ object Scaladoc2 {
* Foo
*/
def g {}
-
+
/*
* Blah blah
*/
def h{}
h
}
-
+
def h {}
}
diff --git a/test/files/positions/Scaladoc3.scala b/test/files/positions/Scaladoc3.scala
index c331b7e396..bb9d66fdb4 100644
--- a/test/files/positions/Scaladoc3.scala
+++ b/test/files/positions/Scaladoc3.scala
@@ -3,6 +3,6 @@ object Scaladoc3 {
* Foo
*/
import scala.collection.mutable.ArrayBuffer
-
+
def f {}
}
diff --git a/test/files/positions/Scaladoc4.scala b/test/files/positions/Scaladoc4.scala
index 133cde1c85..f613dda7f5 100644
--- a/test/files/positions/Scaladoc4.scala
+++ b/test/files/positions/Scaladoc4.scala
@@ -3,6 +3,6 @@ object Scaladoc4 {
* Foo
*/
2+2
-
+
def f {}
}
diff --git a/test/files/positions/Scaladoc6.scala b/test/files/positions/Scaladoc6.scala
new file mode 100644
index 0000000000..5c230edeb2
--- /dev/null
+++ b/test/files/positions/Scaladoc6.scala
@@ -0,0 +1,10 @@
+object Scaladoc6 {
+ {
+ /**
+ * Foo
+ */
+ val i = 23
+ }
+
+ def f {}
+}
diff --git a/test/files/positions/Scaladoc7.scala b/test/files/positions/Scaladoc7.scala
new file mode 100644
index 0000000000..6175222e3f
--- /dev/null
+++ b/test/files/positions/Scaladoc7.scala
@@ -0,0 +1,6 @@
+object Scaladoc7 {
+ /**
+ * Foo
+ */
+ val Pair(i, j) = (1, 2)
+}
diff --git a/test/files/positions/Scaladoc8.scala b/test/files/positions/Scaladoc8.scala
new file mode 100644
index 0000000000..519d6ca06c
--- /dev/null
+++ b/test/files/positions/Scaladoc8.scala
@@ -0,0 +1,6 @@
+/**
+ * Foo
+ */
+object Scaladoc8 {
+
+}
diff --git a/test/files/positions/Unpositioned1.scala b/test/files/positions/Unpositioned1.scala
index 7fc520e93c..174db901da 100644
--- a/test/files/positions/Unpositioned1.scala
+++ b/test/files/positions/Unpositioned1.scala
@@ -1,3 +1,3 @@
object Unpositioned1 {
- for (a <- Some("foo") ; val b = true) {}
+ for (a <- Some("foo") ; b = true) {}
}
diff --git a/test/files/positions/Unsupported2.scala b/test/files/positions/Unsupported2.scala
new file mode 100644
index 0000000000..e21df5ef0e
--- /dev/null
+++ b/test/files/positions/Unsupported2.scala
@@ -0,0 +1,5 @@
+object Unsupported2 {
+ for (k <- 0 until xs.xize)
+ for(i = 0 until (xs.size)) {
+ }
+}
diff --git a/test/files/presentation/callcc-interpreter.check b/test/files/presentation/callcc-interpreter.check
new file mode 100644
index 0000000000..ca99a5afc5
--- /dev/null
+++ b/test/files/presentation/callcc-interpreter.check
@@ -0,0 +1,94 @@
+reload: CallccInterpreter.scala
+
+askTypeCompletion at CallccInterpreter.scala(51,38)
+================================================================================
+[response] aksTypeCompletion at (51,38)
+retrieved 64 members
+`class AddcallccInterpreter.Add`
+`class AppcallccInterpreter.App`
+`class CcccallccInterpreter.Ccc`
+`class ConcallccInterpreter.Con`
+`class FuncallccInterpreter.Fun`
+`class LamcallccInterpreter.Lam`
+`class McallccInterpreter.M`
+`class NumcallccInterpreter.Num`
+`class VarcallccInterpreter.Var`
+`method !=(x$1: Any)Boolean`
+`method !=(x$1: AnyRef)Boolean`
+`method ##()Int`
+`method +(other: String)String`
+`method ->[B](y: B)(callccInterpreter.type, B)`
+`method ==(x$1: Any)Boolean`
+`method ==(x$1: AnyRef)Boolean`
+`method add(a: callccInterpreter.Value, b: callccInterpreter.Value)callccInterpreter.M[_ >: callccInterpreter.Num with callccInterpreter.Wrong.type <: Product with Serializable with callccInterpreter.Value]`
+`method apply(a: callccInterpreter.Value, b: callccInterpreter.Value)callccInterpreter.M[callccInterpreter.Value]`
+`method asInstanceOf[T0]=> T0`
+`method callCC[A](h: A => callccInterpreter.M[A] => callccInterpreter.M[A])callccInterpreter.M[A]`
+`method clone()Object`
+`method ensuring(cond: Boolean)callccInterpreter.type`
+`method ensuring(cond: Boolean, msg: => Any)callccInterpreter.type`
+`method ensuring(cond: callccInterpreter.type => Boolean)callccInterpreter.type`
+`method ensuring(cond: callccInterpreter.type => Boolean, msg: => Any)callccInterpreter.type`
+`method eq(x$1: AnyRef)Boolean`
+`method equals(x$1: Any)Boolean`
+`method finalize()Unit`
+`method formatted(fmtstr: String)String`
+`method hashCode()Int`
+`method id[A]=> A => A`
+`method interp(t: callccInterpreter.Term, e: callccInterpreter.Environment)callccInterpreter.M[callccInterpreter.Value]`
+`method isInstanceOf[T0]=> Boolean`
+`method lookup(x: callccInterpreter.Name, e: callccInterpreter.Environment)callccInterpreter.M[callccInterpreter.Value]`
+`method main(args: Array[String])Unit`
+`method ne(x$1: AnyRef)Boolean`
+`method notify()Unit`
+`method notifyAll()Unit`
+`method showM(m: callccInterpreter.M[callccInterpreter.Value])String`
+`method synchronized[T0](x$1: T0)T0`
+`method test(t: callccInterpreter.Term)String`
+`method toString()String`
+`method unitM[A](a: A)callccInterpreter.M[A]`
+`method wait()Unit`
+`method wait(x$1: Long)Unit`
+`method wait(x$1: Long, x$2: Int)Unit`
+`method x=> callccInterpreter.type`
+`method →[B](y: B)(callccInterpreter.type, B)`
+`object Wrongobject callccInterpreter.Wrong`
+`trait TermcallccInterpreter.Term`
+`trait ValuecallccInterpreter.Value`
+`type AnswercallccInterpreter.Answer`
+`type EnvironmentcallccInterpreter.Environment`
+`type NamecallccInterpreter.Name`
+`value __leftOfArrowcallccInterpreter.type`
+`value __resultOfEnsuringcallccInterpreter.type`
+`value selfAny`
+`value term0callccInterpreter.App`
+`value term1callccInterpreter.App`
+`value term2callccInterpreter.Add`
+================================================================================
+
+askType at CallccInterpreter.scala(14,21)
+================================================================================
+[response] askTypeAt at (14,21)
+def unitM[A >: Nothing <: Any](a: A): callccInterpreter.M[A] = callccInterpreter.this.M.apply[A](((c: A => callccInterpreter.Answer) => c.apply(a)))
+================================================================================
+
+askType at CallccInterpreter.scala(16,12)
+================================================================================
+[response] askTypeAt at (16,12)
+def id[A >: Nothing <: Any]: A => A = ((x: A) => x)
+================================================================================
+
+askType at CallccInterpreter.scala(17,25)
+================================================================================
+[response] askTypeAt at (17,25)
+def showM(m: callccInterpreter.M[callccInterpreter.Value]): String = m.in.apply(callccInterpreter.this.id[callccInterpreter.Value]).toString()
+================================================================================
+
+askType at CallccInterpreter.scala(50,30)
+================================================================================
+[response] askTypeAt at (50,30)
+def add(a: callccInterpreter.Value, b: callccInterpreter.Value): callccInterpreter.M[_ >: callccInterpreter.Num with callccInterpreter.Wrong.type <: Product with Serializable with callccInterpreter.Value] = scala.this.Predef.Pair.apply[callccInterpreter.Value, callccInterpreter.Value](a, b) match {
+ case scala.this.Predef.Pair.unapply[callccInterpreter.Value, callccInterpreter.Value](<unapply-selector>) <unapply> ((n: Int)callccInterpreter.Num((m @ _)), (n: Int)callccInterpreter.Num((n @ _))) => this.unitM[callccInterpreter.Num](callccInterpreter.this.Num.apply(m.+(n)))
+ case _ => callccInterpreter.this.unitM[callccInterpreter.Wrong.type](callccInterpreter.this.Wrong)
+}
+================================================================================
diff --git a/test/files/presentation/callcc-interpreter/Runner.scala b/test/files/presentation/callcc-interpreter/Runner.scala
new file mode 100644
index 0000000000..1ef3cf9025
--- /dev/null
+++ b/test/files/presentation/callcc-interpreter/Runner.scala
@@ -0,0 +1,3 @@
+import scala.tools.nsc.interactive.tests._
+
+object Test extends InteractiveTest \ No newline at end of file
diff --git a/test/files/presentation/callcc-interpreter/src/CallccInterpreter.scala b/test/files/presentation/callcc-interpreter/src/CallccInterpreter.scala
new file mode 100644
index 0000000000..0e96dfaa05
--- /dev/null
+++ b/test/files/presentation/callcc-interpreter/src/CallccInterpreter.scala
@@ -0,0 +1,86 @@
+object callccInterpreter {
+
+ type Answer = Value
+
+ /**
+ * A continuation monad.
+ */
+ case class M[A](in: (A => Answer) => Answer) {
+ def bind[B](k: A => M[B]) = M[B](c => in (a => k(a) in c))
+ def map[B](f: A => B): M[B] = bind(x => unitM(f(x)))
+ def flatMap[B](f: A => M[B]): M[B] = bind(f)
+ }
+
+ def unitM[A](a: A) /*?*/ = M[A](c => c(a))
+
+ def id[A] /*?*/ = (x: A) => x
+ def showM(m: M[Value]) /*?*/ = (m in id).toString()
+
+ def callCC[A](h: (A => M[A]) => M[A]) =
+ M[A](c => h(a => M[A](d => c(a))) in c)
+
+ type Name = String
+
+ trait Term
+ case class Var(x: Name) extends Term
+ case class Con(n: int) extends Term
+ case class Add(l: Term, r: Term) extends Term
+ case class Lam(x: Name, body: Term) extends Term
+ case class App(fun: Term, arg: Term) extends Term
+ case class Ccc(x: Name, t: Term) extends Term
+
+ trait Value
+ case object Wrong extends Value {
+ override def toString() = "wrong"
+ }
+ case class Num(n: Int) extends Value {
+ override def toString() = n.toString()
+ }
+ case class Fun(f: Value => M[Value]) extends Value {
+ override def toString() = "<function>"
+ }
+
+ type Environment = List[Pair[Name, Value]]
+
+ def lookup(x: Name, e: Environment): M[Value] = e match {
+ case List() => unitM(Wrong)
+ case Pair(y, b) :: e1 => if (x == y) unitM(b) else lookup(x, e1)
+ }
+
+ def add(a: Value, b: Value) /*?*/ = Pair(a, b) match {
+ case Pair(Num(m), Num(n)) => this./*!*/unitM(Num(m + n))
+ case _ => unitM(Wrong)
+ }
+
+ def apply(a: Value, b: Value): M[Value] = a match {
+ case Fun(k) => k(b)
+ case _ => unitM(Wrong)
+ }
+
+ def interp(t: Term, e: Environment): M[Value] = t match {
+ case Var(x) => lookup(x, e)
+ case Con(n) => unitM(Num(n))
+ case Add(l, r) => for (val a <- interp(l, e);
+ val b <- interp(r, e);
+ val c <- add(a, b))
+ yield c
+ case Lam(x, t) => unitM(Fun(a => interp(t, Pair(x, a) :: e)))
+ case App(f, t) => for (val a <- interp(f, e);
+ val b <- interp(t, e);
+ val c <- apply(a, b))
+ yield c
+ case Ccc(x, t) => callCC(k => interp(t, Pair(x, Fun(k)) :: e))
+ }
+
+ def test(t: Term): String = showM(interp(t, List()))
+
+ val term0 = App(Lam("x", Add(Var("x"), Var("x"))), Add(Con(10), Con(11)))
+ val term1 = App(Con(1), Con(2))
+ val term2 = Add(Con(1), Ccc("k", Add(Con(2), App(Var("k"), Con(4)))))
+
+ def main(args: Array[String]) {
+ println(test(term0))
+ println(test(term1))
+ println(test(term2))
+ }
+} \ No newline at end of file
diff --git a/test/files/presentation/ide-bug-1000349.check b/test/files/presentation/ide-bug-1000349.check
new file mode 100644
index 0000000000..9c070ef24e
--- /dev/null
+++ b/test/files/presentation/ide-bug-1000349.check
@@ -0,0 +1,40 @@
+reload: CompletionOnEmptyArgMethod.scala
+
+askTypeCompletion at CompletionOnEmptyArgMethod.scala(2,17)
+================================================================================
+[response] aksTypeCompletion at (2,17)
+retrieved 37 members
+`method !=(x$1: Any)Boolean`
+`method !=(x$1: AnyRef)Boolean`
+`method ##()Int`
+`method +(other: String)String`
+`method ->[B](y: B)(Foo, B)`
+`method ==(x$1: Any)Boolean`
+`method ==(x$1: AnyRef)Boolean`
+`method asInstanceOf[T0]=> T0`
+`method clone()Object`
+`method ensuring(cond: Boolean)Foo`
+`method ensuring(cond: Boolean, msg: => Any)Foo`
+`method ensuring(cond: Foo => Boolean)Foo`
+`method ensuring(cond: Foo => Boolean, msg: => Any)Foo`
+`method eq(x$1: AnyRef)Boolean`
+`method equals(x$1: Any)Boolean`
+`method finalize()Unit`
+`method foo=> Foo`
+`method formatted(fmtstr: String)String`
+`method hashCode()Int`
+`method isInstanceOf[T0]=> Boolean`
+`method ne(x$1: AnyRef)Boolean`
+`method notify()Unit`
+`method notifyAll()Unit`
+`method synchronized[T0](x$1: T0)T0`
+`method toString()String`
+`method wait()Unit`
+`method wait(x$1: Long)Unit`
+`method wait(x$1: Long, x$2: Int)Unit`
+`method x=> Foo`
+`method →[B](y: B)(Foo, B)`
+`value __leftOfArrowFoo`
+`value __resultOfEnsuringFoo`
+`value selfAny`
+================================================================================ \ No newline at end of file
diff --git a/test/files/presentation/ide-bug-1000349/Runner.scala b/test/files/presentation/ide-bug-1000349/Runner.scala
new file mode 100644
index 0000000000..1ef3cf9025
--- /dev/null
+++ b/test/files/presentation/ide-bug-1000349/Runner.scala
@@ -0,0 +1,3 @@
+import scala.tools.nsc.interactive.tests._
+
+object Test extends InteractiveTest \ No newline at end of file
diff --git a/test/files/presentation/ide-bug-1000349/src/CompletionOnEmptyArgMethod.scala b/test/files/presentation/ide-bug-1000349/src/CompletionOnEmptyArgMethod.scala
new file mode 100644
index 0000000000..a3d8e8f067
--- /dev/null
+++ b/test/files/presentation/ide-bug-1000349/src/CompletionOnEmptyArgMethod.scala
@@ -0,0 +1,7 @@
+object Foo {
+ new Foo().foo. /*!*/
+}
+
+class Foo {
+ def foo = this
+} \ No newline at end of file
diff --git a/test/files/presentation/ide-bug-1000469.check b/test/files/presentation/ide-bug-1000469.check
new file mode 100644
index 0000000000..cdc4e7d989
--- /dev/null
+++ b/test/files/presentation/ide-bug-1000469.check
@@ -0,0 +1 @@
+reload: EventHandler.scala, JavaEventHandler.java
diff --git a/test/files/presentation/ide-bug-1000469/Runner.scala b/test/files/presentation/ide-bug-1000469/Runner.scala
new file mode 100644
index 0000000000..c53533fddd
--- /dev/null
+++ b/test/files/presentation/ide-bug-1000469/Runner.scala
@@ -0,0 +1,5 @@
+import scala.tools.nsc.interactive.tests._
+
+object Test extends InteractiveTest {
+ override val runRandomTests = false
+}
diff --git a/test/files/presentation/ide-bug-1000469/src/java/JavaEventHandler.java b/test/files/presentation/ide-bug-1000469/src/java/JavaEventHandler.java
new file mode 100644
index 0000000000..010edef79a
--- /dev/null
+++ b/test/files/presentation/ide-bug-1000469/src/java/JavaEventHandler.java
@@ -0,0 +1,3 @@
+package java;
+
+import scala.EventHandler; \ No newline at end of file
diff --git a/test/files/presentation/ide-bug-1000469/src/scala/EventHandler.scala b/test/files/presentation/ide-bug-1000469/src/scala/EventHandler.scala
new file mode 100644
index 0000000000..02e836ef0d
--- /dev/null
+++ b/test/files/presentation/ide-bug-1000469/src/scala/EventHandler.scala
@@ -0,0 +1,5 @@
+package scala
+
+class EventHandler {
+ @transient private val foo = 2
+} \ No newline at end of file
diff --git a/test/files/presentation/ide-bug-1000475.check b/test/files/presentation/ide-bug-1000475.check
new file mode 100644
index 0000000000..1718119385
--- /dev/null
+++ b/test/files/presentation/ide-bug-1000475.check
@@ -0,0 +1,115 @@
+reload: Foo.scala
+
+askTypeCompletion at Foo.scala(3,7)
+================================================================================
+[response] aksTypeCompletion at (3,7)
+retrieved 36 members
+`method !=(x$1: Any)Boolean`
+`method !=(x$1: AnyRef)Boolean`
+`method ##()Int`
+`method +(other: String)String`
+`method ->[B](y: B)(Object, B)`
+`method ==(x$1: Any)Boolean`
+`method ==(x$1: AnyRef)Boolean`
+`method asInstanceOf[T0]=> T0`
+`method clone()Object`
+`method ensuring(cond: Boolean)Object`
+`method ensuring(cond: Boolean, msg: => Any)Object`
+`method ensuring(cond: Object => Boolean)Object`
+`method ensuring(cond: Object => Boolean, msg: => Any)Object`
+`method eq(x$1: AnyRef)Boolean`
+`method equals(x$1: Any)Boolean`
+`method finalize()Unit`
+`method formatted(fmtstr: String)String`
+`method hashCode()Int`
+`method isInstanceOf[T0]=> Boolean`
+`method ne(x$1: AnyRef)Boolean`
+`method notify()Unit`
+`method notifyAll()Unit`
+`method synchronized[T0](x$1: T0)T0`
+`method toString()String`
+`method wait()Unit`
+`method wait(x$1: Long)Unit`
+`method wait(x$1: Long, x$2: Int)Unit`
+`method x=> Object`
+`method →[B](y: B)(Object, B)`
+`value __leftOfArrowObject`
+`value __resultOfEnsuringObject`
+`value selfAny`
+================================================================================
+
+askTypeCompletion at Foo.scala(6,10)
+================================================================================
+[response] aksTypeCompletion at (6,10)
+retrieved 36 members
+`method !=(x$1: Any)Boolean`
+`method !=(x$1: AnyRef)Boolean`
+`method ##()Int`
+`method +(other: String)String`
+`method ->[B](y: B)(Object, B)`
+`method ==(x$1: Any)Boolean`
+`method ==(x$1: AnyRef)Boolean`
+`method asInstanceOf[T0]=> T0`
+`method clone()Object`
+`method ensuring(cond: Boolean)Object`
+`method ensuring(cond: Boolean, msg: => Any)Object`
+`method ensuring(cond: Object => Boolean)Object`
+`method ensuring(cond: Object => Boolean, msg: => Any)Object`
+`method eq(x$1: AnyRef)Boolean`
+`method equals(x$1: Any)Boolean`
+`method finalize()Unit`
+`method formatted(fmtstr: String)String`
+`method hashCode()Int`
+`method isInstanceOf[T0]=> Boolean`
+`method ne(x$1: AnyRef)Boolean`
+`method notify()Unit`
+`method notifyAll()Unit`
+`method synchronized[T0](x$1: T0)T0`
+`method toString()String`
+`method wait()Unit`
+`method wait(x$1: Long)Unit`
+`method wait(x$1: Long, x$2: Int)Unit`
+`method x=> Object`
+`method →[B](y: B)(Object, B)`
+`value __leftOfArrowObject`
+`value __resultOfEnsuringObject`
+`value selfAny`
+================================================================================
+
+askTypeCompletion at Foo.scala(7,7)
+================================================================================
+[response] aksTypeCompletion at (7,7)
+retrieved 36 members
+`method !=(x$1: Any)Boolean`
+`method !=(x$1: AnyRef)Boolean`
+`method ##()Int`
+`method +(other: String)String`
+`method ->[B](y: B)(Object, B)`
+`method ==(x$1: Any)Boolean`
+`method ==(x$1: AnyRef)Boolean`
+`method asInstanceOf[T0]=> T0`
+`method clone()Object`
+`method ensuring(cond: Boolean)Object`
+`method ensuring(cond: Boolean, msg: => Any)Object`
+`method ensuring(cond: Object => Boolean)Object`
+`method ensuring(cond: Object => Boolean, msg: => Any)Object`
+`method eq(x$1: AnyRef)Boolean`
+`method equals(x$1: Any)Boolean`
+`method finalize()Unit`
+`method formatted(fmtstr: String)String`
+`method hashCode()Int`
+`method isInstanceOf[T0]=> Boolean`
+`method ne(x$1: AnyRef)Boolean`
+`method notify()Unit`
+`method notifyAll()Unit`
+`method synchronized[T0](x$1: T0)T0`
+`method toString()String`
+`method wait()Unit`
+`method wait(x$1: Long)Unit`
+`method wait(x$1: Long, x$2: Int)Unit`
+`method x=> Object`
+`method →[B](y: B)(Object, B)`
+`value __leftOfArrowObject`
+`value __resultOfEnsuringObject`
+`value selfAny`
+================================================================================
diff --git a/test/files/presentation/ide-bug-1000475/Runner.scala b/test/files/presentation/ide-bug-1000475/Runner.scala
new file mode 100644
index 0000000000..1ef3cf9025
--- /dev/null
+++ b/test/files/presentation/ide-bug-1000475/Runner.scala
@@ -0,0 +1,3 @@
+import scala.tools.nsc.interactive.tests._
+
+object Test extends InteractiveTest \ No newline at end of file
diff --git a/test/files/presentation/ide-bug-1000475/src/Foo.scala b/test/files/presentation/ide-bug-1000475/src/Foo.scala
new file mode 100644
index 0000000000..b963bb7a88
--- /dev/null
+++ b/test/files/presentation/ide-bug-1000475/src/Foo.scala
@@ -0,0 +1,9 @@
+class Foo {
+ val v = new Object
+ v.toS/*!*/
+
+ val m = Map(1 -> new Object)
+ m(1).toS/*!*/
+ m(1)./*!*/
+ println()
+} \ No newline at end of file
diff --git a/test/files/presentation/ide-bug-1000531.check b/test/files/presentation/ide-bug-1000531.check
new file mode 100644
index 0000000000..04cea738f5
--- /dev/null
+++ b/test/files/presentation/ide-bug-1000531.check
@@ -0,0 +1,126 @@
+reload: CrashOnLoad.scala
+
+askTypeCompletion at CrashOnLoad.scala(6,12)
+================================================================================
+[response] aksTypeCompletion at (6,12)
+retrieved 123 members
+`class GroupedIteratorIterator[B]#GroupedIterator`
+`method !=(x$1: Any)Boolean`
+`method !=(x$1: AnyRef)Boolean`
+`method ##()Int`
+`method +(other: String)String`
+`method ++[B >: B](that: => scala.collection.GenTraversableOnce[B])Iterator[B]`
+`method ->[B](y: B)(java.util.Iterator[B], B)`
+`method /:[B](z: B)(op: (B, B) => B)B`
+`method /:\[A1 >: B](z: A1)(op: (A1, A1) => A1)A1`
+`method :\[B](z: B)(op: (B, B) => B)B`
+`method ==(x$1: Any)Boolean`
+`method ==(x$1: AnyRef)Boolean`
+`method addString(b: StringBuilder)StringBuilder`
+`method addString(b: StringBuilder, sep: String)StringBuilder`
+`method addString(b: StringBuilder, start: String, sep: String, end: String)StringBuilder`
+`method aggregate[B](z: B)(seqop: (B, B) => B, combop: (B, B) => B)B`
+`method asInstanceOf[T0]=> T0`
+`method buffered=> scala.collection.BufferedIterator[B]`
+`method clone()Object`
+`method collectFirst[B](pf: PartialFunction[B,B])Option[B]`
+`method collect[B](pf: PartialFunction[B,B])Iterator[B]`
+`method contains(elem: Any)Boolean`
+`method copyToArray[B >: B](xs: Array[B])Unit`
+`method copyToArray[B >: B](xs: Array[B], start: Int)Unit`
+`method copyToArray[B >: B](xs: Array[B], start: Int, len: Int)Unit`
+`method copyToBuffer[B >: B](dest: scala.collection.mutable.Buffer[B])Unit`
+`method count(p: B => Boolean)Int`
+`method drop(n: Int)Iterator[B]`
+`method dropWhile(p: B => Boolean)Iterator[B]`
+`method duplicate=> (Iterator[B], Iterator[B])`
+`method ensuring(cond: Boolean)java.util.Iterator[B]`
+`method ensuring(cond: Boolean, msg: => Any)java.util.Iterator[B]`
+`method ensuring(cond: java.util.Iterator[B] => Boolean)java.util.Iterator[B]`
+`method ensuring(cond: java.util.Iterator[B] => Boolean, msg: => Any)java.util.Iterator[B]`
+`method eq(x$1: AnyRef)Boolean`
+`method equals(x$1: Any)Boolean`
+`method exists(p: B => Boolean)Boolean`
+`method filter(p: B => Boolean)Iterator[B]`
+`method filterNot(p: B => Boolean)Iterator[B]`
+`method finalize()Unit`
+`method find(p: B => Boolean)Option[B]`
+`method flatMap[B](f: B => scala.collection.GenTraversableOnce[B])Iterator[B]`
+`method foldLeft[B](z: B)(op: (B, B) => B)B`
+`method foldRight[B](z: B)(op: (B, B) => B)B`
+`method fold[A1 >: B](z: A1)(op: (A1, A1) => A1)A1`
+`method forall(p: B => Boolean)Boolean`
+`method foreach[U](f: B => U)Unit`
+`method formatted(fmtstr: String)String`
+`method grouped[B >: B](size: Int)Iterator[B]#GroupedIterator[B]`
+`method hasDefiniteSize=> Boolean`
+`method hasNext()Boolean`
+`method hashCode()Int`
+`method indexOf[B >: B](elem: B)Int`
+`method indexWhere(p: B => Boolean)Int`
+`method isEmpty=> Boolean`
+`method isInstanceOf[T0]=> Boolean`
+`method isTraversableAgain=> Boolean`
+`method length=> Int`
+`method map[B](f: B => B)Iterator[B]`
+`method maxBy[B](f: B => B)(implicit cmp: Ordering[B])B`
+`method max[B >: B](implicit cmp: Ordering[B])B`
+`method minBy[B](f: B => B)(implicit cmp: Ordering[B])B`
+`method min[B >: B](implicit cmp: Ordering[B])B`
+`method mkString(sep: String)String`
+`method mkString(start: String, sep: String, end: String)String`
+`method mkString=> String`
+`method ne(x$1: AnyRef)Boolean`
+`method next()B`
+`method nonEmpty=> Boolean`
+`method notify()Unit`
+`method notifyAll()Unit`
+`method padTo[A1 >: B](len: Int, elem: A1)Iterator[A1]`
+`method partition(p: B => Boolean)(Iterator[B], Iterator[B])`
+`method patch[B >: B](from: Int, patchElems: Iterator[B], replaced: Int)Iterator[B]`
+`method product[B >: B](implicit num: Numeric[B])B`
+`method reduceLeftOption[B >: B](op: (B, B) => B)Option[B]`
+`method reduceLeft[B >: B](op: (B, B) => B)B`
+`method reduceOption[A1 >: B](op: (A1, A1) => A1)Option[A1]`
+`method reduceRightOption[B >: B](op: (B, B) => B)Option[B]`
+`method reduceRight[B >: B](op: (B, B) => B)B`
+`method reduce[A1 >: B](op: (A1, A1) => A1)A1`
+`method remove()Unit`
+`method reversed=> List[B]`
+`method sameElements(that: Iterator[_])Boolean`
+`method scanLeft[B](z: B)(op: (B, B) => B)Iterator[B]`
+`method scanRight[B](z: B)(op: (B, B) => B)Iterator[B]`
+`method seq=> Iterator[B]`
+`method size=> Int`
+`method slice(from: Int, until: Int)Iterator[B]`
+`method sliding[B >: B](size: Int, step: Int)Iterator[B]#GroupedIterator[B]`
+`method span(p: B => Boolean)(Iterator[B], Iterator[B])`
+`method sum[B >: B](implicit num: Numeric[B])B`
+`method synchronized[T0](x$1: T0)T0`
+`method take(n: Int)Iterator[B]`
+`method takeWhile(p: B => Boolean)Iterator[B]`
+`method toArray[B >: B](implicit evidence$1: ClassManifest[B])Array[B]`
+`method toBuffer[B >: B]=> scala.collection.mutable.Buffer[B]`
+`method toIndexedSeq[B >: B]=> scala.collection.immutable.IndexedSeq[B]`
+`method toIterable=> Iterable[B]`
+`method toIterator=> Iterator[B]`
+`method toList=> List[B]`
+`method toMap[T, U](implicit ev: <:<[B,(T, U)])scala.collection.immutable.Map[T,U]`
+`method toSeq=> Seq[B]`
+`method toSet[B >: B]=> scala.collection.immutable.Set[B]`
+`method toStream=> scala.collection.immutable.Stream[B]`
+`method toString()String`
+`method toTraversable=> Traversable[B]`
+`method wait()Unit`
+`method wait(x$1: Long)Unit`
+`method wait(x$1: Long, x$2: Int)Unit`
+`method withFilter(p: B => Boolean)Iterator[B]`
+`method x=> java.util.Iterator[B]`
+`method zipAll[B, A1 >: B, B1 >: B](that: Iterator[B], thisElem: A1, thatElem: B1)Iterator[(A1, B1)]`
+`method zipWithIndex=> Iterator[(B, Int)]`
+`method zip[B](that: Iterator[B])Iterator[(B, B)]`
+`method →[B](y: B)(java.util.Iterator[B], B)`
+`value __leftOfArrowjava.util.Iterator[B]`
+`value __resultOfEnsuringjava.util.Iterator[B]`
+`value selfAny`
+================================================================================
diff --git a/test/files/presentation/ide-bug-1000531.flags b/test/files/presentation/ide-bug-1000531.flags
new file mode 100644
index 0000000000..56d026a62d
--- /dev/null
+++ b/test/files/presentation/ide-bug-1000531.flags
@@ -0,0 +1,18 @@
+# This file contains command line options that are passed to the presentation compiler
+# Lines starting with # are stripped, and you can split arguments on several lines.
+
+# The -bootclasspath option is treated specially by the test framework: if it's not specified
+# in this file, the presentation compiler will pick up the scala-library/compiler that's on the
+# java classpath used to run this test (usually build/pack)
+
+# Any option can be passed this way, like presentation debug
+# -Ypresentation-debug -Ypresentation-verbose
+
+# the classpath is relative to the current working directory. That means it depends where you're
+# running partest from. Run it from the root scala checkout for these files to resolve correctly
+# (by default when running 'ant test', or 'test/partest'). Paths use Unix separators, the test
+# framework translates them to the platform dependent representation.
+# -bootclasspath lib/scala-compiler.jar:lib/scala-library.jar:lib/fjbg.jar
+
+# the following line would test using the quick compiler
+# -bootclasspath build/quick/classes/compiler:build/quick/classes/library:lib/fjbg.jar
diff --git a/test/files/presentation/ide-bug-1000531/Runner.scala b/test/files/presentation/ide-bug-1000531/Runner.scala
new file mode 100644
index 0000000000..1ef3cf9025
--- /dev/null
+++ b/test/files/presentation/ide-bug-1000531/Runner.scala
@@ -0,0 +1,3 @@
+import scala.tools.nsc.interactive.tests._
+
+object Test extends InteractiveTest \ No newline at end of file
diff --git a/test/files/presentation/ide-bug-1000531/src/CrashOnLoad.scala b/test/files/presentation/ide-bug-1000531/src/CrashOnLoad.scala
new file mode 100644
index 0000000000..21d39c8923
--- /dev/null
+++ b/test/files/presentation/ide-bug-1000531/src/CrashOnLoad.scala
@@ -0,0 +1,7 @@
+/** When this files is opened within the IDE, a typing error is reported. */
+class A[B] extends java.lang.Iterable[B] {
+ import scala.collection.JavaConversions._
+ def iterator = Iterator.empty
+
+ iterator. /*!*/
+} \ No newline at end of file
diff --git a/test/files/presentation/ide-t1000609.check b/test/files/presentation/ide-t1000609.check
new file mode 100644
index 0000000000..1094dbdcbf
--- /dev/null
+++ b/test/files/presentation/ide-t1000609.check
@@ -0,0 +1,6 @@
+reload: NoHyperlinking.scala
+
+askHyperlinkPos for `foo` at (7,10) NoHyperlinking.scala
+================================================================================
+[response] found askHyperlinkPos for `foo` at (2,7) NoHyperlinking.scala
+================================================================================ \ No newline at end of file
diff --git a/test/files/presentation/ide-t1000609/Runner.scala b/test/files/presentation/ide-t1000609/Runner.scala
new file mode 100644
index 0000000000..1ef3cf9025
--- /dev/null
+++ b/test/files/presentation/ide-t1000609/Runner.scala
@@ -0,0 +1,3 @@
+import scala.tools.nsc.interactive.tests._
+
+object Test extends InteractiveTest \ No newline at end of file
diff --git a/test/files/presentation/ide-t1000609/src/NoHyperlinking.scala b/test/files/presentation/ide-t1000609/src/NoHyperlinking.scala
new file mode 100644
index 0000000000..d4bedaf9ee
--- /dev/null
+++ b/test/files/presentation/ide-t1000609/src/NoHyperlinking.scala
@@ -0,0 +1,8 @@
+class Foo {
+ def foo(a: Int) = a
+}
+
+object Test {
+ val a = new Foo
+ a.foo() /*#*/
+} \ No newline at end of file
diff --git a/test/files/presentation/implicit-member.check b/test/files/presentation/implicit-member.check
new file mode 100644
index 0000000000..e8e656f12a
--- /dev/null
+++ b/test/files/presentation/implicit-member.check
@@ -0,0 +1,42 @@
+reload: ImplicitMember.scala
+
+askTypeCompletion at ImplicitMember.scala(7,7)
+================================================================================
+[response] aksTypeCompletion at (7,7)
+retrieved 39 members
+`class AppliedImplicitImplicit.AppliedImplicit`
+`method !=(x$1: Any)Boolean`
+`method !=(x$1: AnyRef)Boolean`
+`method ##()Int`
+`method +(other: String)String`
+`method ->[B](y: B)(Implicit.type, B)`
+`method ==(x$1: Any)Boolean`
+`method ==(x$1: AnyRef)Boolean`
+`method AppliedImplicit[A](x: A)Implicit.AppliedImplicit[A]`
+`method asInstanceOf[T0]=> T0`
+`method clone()Object`
+`method ensuring(cond: Boolean)Implicit.type`
+`method ensuring(cond: Boolean, msg: => Any)Implicit.type`
+`method ensuring(cond: Implicit.type => Boolean)Implicit.type`
+`method ensuring(cond: Implicit.type => Boolean, msg: => Any)Implicit.type`
+`method eq(x$1: AnyRef)Boolean`
+`method equals(x$1: Any)Boolean`
+`method finalize()Unit`
+`method formatted(fmtstr: String)String`
+`method hashCode()Int`
+`method isInstanceOf[T0]=> Boolean`
+`method ne(x$1: AnyRef)Boolean`
+`method notify()Unit`
+`method notifyAll()Unit`
+`method synchronized[T0](x$1: T0)T0`
+`method toString()String`
+`method wait()Unit`
+`method wait(x$1: Long)Unit`
+`method wait(x$1: Long, x$2: Int)Unit`
+`method x=> Implicit.type`
+`method →[B](y: B)(Implicit.type, B)`
+`value __leftOfArrowImplicit.type`
+`value __resultOfEnsuringImplicit.type`
+`value selfAny`
+`value xImplicit.type`
+================================================================================
diff --git a/test/files/presentation/implicit-member/Runner.scala b/test/files/presentation/implicit-member/Runner.scala
new file mode 100644
index 0000000000..1c03e3d5ba
--- /dev/null
+++ b/test/files/presentation/implicit-member/Runner.scala
@@ -0,0 +1,3 @@
+import scala.tools.nsc.interactive.tests._
+
+object Test extends InteractiveTest
diff --git a/test/files/presentation/implicit-member/src/ImplicitMember.scala b/test/files/presentation/implicit-member/src/ImplicitMember.scala
new file mode 100644
index 0000000000..06732f6dc6
--- /dev/null
+++ b/test/files/presentation/implicit-member/src/ImplicitMember.scala
@@ -0,0 +1,8 @@
+object Implicit {
+
+ final class AppliedImplicit[A](val x: A)
+
+ implicit def AppliedImplicit[A](x: A): AppliedImplicit[A] = new AppliedImplicit(x)
+
+ this./*!*/x
+} \ No newline at end of file
diff --git a/test/files/presentation/ping-pong.check b/test/files/presentation/ping-pong.check
new file mode 100644
index 0000000000..38040bdacf
--- /dev/null
+++ b/test/files/presentation/ping-pong.check
@@ -0,0 +1,102 @@
+reload: PingPong.scala
+
+askTypeCompletion at PingPong.scala(10,23)
+================================================================================
+[response] aksTypeCompletion at (10,23)
+retrieved 40 members
+`method !=(x$1: Any)Boolean`
+`method !=(x$1: AnyRef)Boolean`
+`method ##()Int`
+`method +(other: String)String`
+`method ->[B](y: B)(Pong, B)`
+`method ==(x$1: Any)Boolean`
+`method ==(x$1: AnyRef)Boolean`
+`method asInstanceOf[T0]=> T0`
+`method clone()Object`
+`method ensuring(cond: Boolean)Pong`
+`method ensuring(cond: Boolean, msg: => Any)Pong`
+`method ensuring(cond: Pong => Boolean)Pong`
+`method ensuring(cond: Pong => Boolean, msg: => Any)Pong`
+`method eq(x$1: AnyRef)Boolean`
+`method equals(x$1: Any)Boolean`
+`method finalize()Unit`
+`method formatted(fmtstr: String)String`
+`method hashCode()Int`
+`method isInstanceOf[T0]=> Boolean`
+`method ne(x$1: AnyRef)Boolean`
+`method notify()Unit`
+`method notifyAll()Unit`
+`method poke()Unit`
+`method synchronized[T0](x$1: T0)T0`
+`method toString()String`
+`method wait()Unit`
+`method wait(x$1: Long)Unit`
+`method wait(x$1: Long, x$2: Int)Unit`
+`method x=> Pong`
+`method →[B](y: B)(Pong, B)`
+`value __leftOfArrowPong`
+`value __resultOfEnsuringPong`
+`value nameString`
+`value pingPing`
+`value selfAny`
+================================================================================
+
+askTypeCompletion at PingPong.scala(19,20)
+================================================================================
+[response] aksTypeCompletion at (19,20)
+retrieved 40 members
+`method !=(x$1: Any)Boolean`
+`method !=(x$1: AnyRef)Boolean`
+`method ##()Int`
+`method +(other: String)String`
+`method ->[B](y: B)(Ping, B)`
+`method ==(x$1: Any)Boolean`
+`method ==(x$1: AnyRef)Boolean`
+`method asInstanceOf[T0]=> T0`
+`method clone()Object`
+`method ensuring(cond: Boolean)Ping`
+`method ensuring(cond: Boolean, msg: => Any)Ping`
+`method ensuring(cond: Ping => Boolean)Ping`
+`method ensuring(cond: Ping => Boolean, msg: => Any)Ping`
+`method eq(x$1: AnyRef)Boolean`
+`method equals(x$1: Any)Boolean`
+`method finalize()Unit`
+`method formatted(fmtstr: String)String`
+`method hashCode()Int`
+`method isInstanceOf[T0]=> Boolean`
+`method loop=> Unit`
+`method name=> String`
+`method ne(x$1: AnyRef)Boolean`
+`method notify()Unit`
+`method notifyAll()Unit`
+`method poke=> Unit`
+`method synchronized[T0](x$1: T0)T0`
+`method toString()String`
+`method wait()Unit`
+`method wait(x$1: Long)Unit`
+`method wait(x$1: Long, x$2: Int)Unit`
+`method x=> Ping`
+`method →[B](y: B)(Ping, B)`
+`value __leftOfArrowPing`
+`value __resultOfEnsuringPing`
+`value pongPong`
+`value selfAny`
+================================================================================
+
+askType at PingPong.scala(8,10)
+================================================================================
+[response] askTypeAt at (8,10)
+def loop: Unit = Ping.this.poke()
+================================================================================
+
+askType at PingPong.scala(10,10)
+================================================================================
+[response] askTypeAt at (10,10)
+def poke: Unit = Ping.this.pong.poke()
+================================================================================
+
+askType at PingPong.scala(17,10)
+================================================================================
+[response] askTypeAt at (17,10)
+private[this] val name: String = "pong"
+================================================================================
diff --git a/test/files/presentation/ping-pong/Runner.scala b/test/files/presentation/ping-pong/Runner.scala
new file mode 100644
index 0000000000..1c03e3d5ba
--- /dev/null
+++ b/test/files/presentation/ping-pong/Runner.scala
@@ -0,0 +1,3 @@
+import scala.tools.nsc.interactive.tests._
+
+object Test extends InteractiveTest
diff --git a/test/files/presentation/ping-pong/src/PingPong.scala b/test/files/presentation/ping-pong/src/PingPong.scala
new file mode 100644
index 0000000000..08bb4e3f2d
--- /dev/null
+++ b/test/files/presentation/ping-pong/src/PingPong.scala
@@ -0,0 +1,22 @@
+
+class Ping {
+
+ val pong = new Pong(this)
+
+ def name = "ping"
+
+ def loop/*?*/ { poke() }
+
+ def poke/*?*/ { pong./*!*/poke() }
+
+ override def toString = name
+}
+
+class Pong(ping: Ping) {
+
+ val name/*?*/ = "pong"
+
+ def poke() { ping./*!*/poke() }
+
+ override def toString = name
+} \ No newline at end of file
diff --git a/test/files/presentation/random.check b/test/files/presentation/random.check
new file mode 100644
index 0000000000..fce4b69fb3
--- /dev/null
+++ b/test/files/presentation/random.check
@@ -0,0 +1,27 @@
+reload: Random.scala
+
+askType at Random.scala(18,14)
+================================================================================
+[response] askTypeAt at (18,14)
+val filter: Int => Boolean = try {
+ java.this.lang.Integer.parseInt(args.apply(0)) match {
+ case 1 => ((x: Int) => x.%(2).!=(0))
+ case 2 => ((x: Int) => x.%(2).==(0))
+ case _ => ((x: Int) => x.!=(0))
+ }
+} catch {
+ case _ => ((x: Int) => x.<(100))
+}
+================================================================================
+
+askType at Random.scala(19,30)
+================================================================================
+[response] askTypeAt at (19,30)
+0
+================================================================================
+
+askType at Random.scala(26,12)
+================================================================================
+[response] askTypeAt at (26,12)
+_
+================================================================================
diff --git a/test/files/presentation/random/Runner.scala b/test/files/presentation/random/Runner.scala
new file mode 100644
index 0000000000..1c03e3d5ba
--- /dev/null
+++ b/test/files/presentation/random/Runner.scala
@@ -0,0 +1,3 @@
+import scala.tools.nsc.interactive.tests._
+
+object Test extends InteractiveTest
diff --git a/test/files/presentation/random/src/Random.scala b/test/files/presentation/random/src/Random.scala
new file mode 100644
index 0000000000..4fff783fa4
--- /dev/null
+++ b/test/files/presentation/random/src/Random.scala
@@ -0,0 +1,106 @@
+package examples
+
+import java.io._
+import java.net.{InetAddress,ServerSocket,Socket,SocketException}
+import java.util.Random
+
+/**
+ * Simple client/server application using Java sockets.
+ *
+ * The server simply generates random integer values and
+ * the clients provide a filter function to the server
+ * to get only values they interested in (eg. even or
+ * odd values, and so on).
+ */
+object randomclient {
+
+ def main(args: Array[String]) {
+ val filter/*?*/ = try {
+ Integer.parseInt(args(0)/*?*/) match {
+ case 1 => x: Int => x % 2 != 0
+ case 2 => x: Int => x % 2 == 0
+ case _ => x: Int => x != 0
+ }
+ }
+ catch {
+ case _/*?*/ => x: Int => x < 100
+ }
+
+ try {
+ val ia = InetAddress.getByName("localhost")
+ val socket = new Socket(ia, 9999)
+ val out = new ObjectOutputStream(
+ new DataOutputStream(socket.getOutputStream()))
+ val in = new DataInputStream(socket.getInputStream())
+
+ out.writeObject(filter)
+ out.flush()
+
+ while (true) {
+ val x = in.readInt()
+ println("x = " + x)
+ }
+ out.close()
+ in.close()
+ socket.close()
+ }
+ catch {
+ case e: IOException =>
+ e.printStackTrace()
+ }
+ }
+
+}
+
+object randomserver {
+
+ def main(args: Array[String]): Unit = {
+ try {
+ val listener = new ServerSocket(9999);
+ while (true)
+ new ServerThread(listener.accept()).start();
+ listener.close()
+ }
+ catch {
+ case e: IOException =>
+ System.err.println("Could not listen on port: 9999.");
+ System.exit(-1)
+ }
+ }
+
+}
+
+case class ServerThread(socket: Socket) extends Thread("ServerThread") {
+
+ override def run(): Unit = {
+ val rand = new Random(System.currentTimeMillis());
+ try {
+ val out = new DataOutputStream(socket.getOutputStream());
+ val in = new ObjectInputStream(
+ new DataInputStream(socket.getInputStream()));
+
+ val filter = in.readObject().asInstanceOf[Int => Boolean];
+
+ while (true) {
+ var succeeded = false;
+ do {
+ val x = rand.nextInt(1000);
+ succeeded = filter(x);
+ if (succeeded) out.writeInt(x)
+ } while (! succeeded);
+ Thread.sleep(100)
+ }
+
+ out.close();
+ in.close();
+ socket.close()
+ }
+ catch {
+ case e: SocketException =>
+ () // avoid stack trace when stopping a client with Ctrl-C
+ case e: IOException =>
+ e.printStackTrace();
+ }
+ }
+
+} \ No newline at end of file
diff --git a/test/files/res/bug597.res b/test/files/res/bug597.res
deleted file mode 100644
index 0db355cd0f..0000000000
--- a/test/files/res/bug597.res
+++ /dev/null
@@ -1,2 +0,0 @@
-bug597/Test.scala
-bug597/Main.scala
diff --git a/test/files/res/bug597/Test.scala b/test/files/res/bug597/Test.scala
deleted file mode 100644
index 2f63f46c3d..0000000000
--- a/test/files/res/bug597/Test.scala
+++ /dev/null
@@ -1,27 +0,0 @@
-package test;
-
-abstract class Base {
- type A <: Ax;
-
- abstract class Ax {
- def a = null;
- def string = "A";
- }
-}
-trait ExtB extends Base {
- type A <: Ax;
- trait Ax extends super.Ax {
- def c = null;
- override def string = super.string + "C";
- }
-}
-
-trait ExtC extends /*ExtA with*/ ExtB {
- type A <: Ax;
- trait Ax extends super.Ax {
- a
- c
- def d = null;
- override def string = super.string + "D";
- }
-}
diff --git a/test/files/res/bug687.check b/test/files/res/bug687.check
deleted file mode 100644
index ee9520d1ea..0000000000
--- a/test/files/res/bug687.check
+++ /dev/null
@@ -1,11 +0,0 @@
-
-nsc>
-nsc> bug687/QueryB.scala:3: error: name clash between defined and inherited member:
-method equals:(o: java.lang.Object)Boolean and
-method equals:(x$1: Any)Boolean in class Any
-have same type after erasure: (o: java.lang.Object)Boolean
- override def equals(o : Object) = false;
- ^
-
-nsc>
-nsc>
diff --git a/test/files/res/bug687.res b/test/files/res/bug687.res
deleted file mode 100644
index ba8ba76995..0000000000
--- a/test/files/res/bug687.res
+++ /dev/null
@@ -1,3 +0,0 @@
-bug687/QueryA.scala
-bug687/QueryB.scala
-bug687/QueryA.scala
diff --git a/test/files/res/bug722.res b/test/files/res/bug722.res
deleted file mode 100644
index dbc785c171..0000000000
--- a/test/files/res/bug722.res
+++ /dev/null
@@ -1,2 +0,0 @@
-bug722/Parser.scala bug722/IfElse.scala
-bug722/Parser.scala bug722/IfElse.scala
diff --git a/test/files/res/bug722/Parser.scala b/test/files/res/bug722/Parser.scala
deleted file mode 100644
index 6d9739ed04..0000000000
--- a/test/files/res/bug722/Parser.scala
+++ /dev/null
@@ -1,8 +0,0 @@
-
-package bug722;
-trait Parser {
- trait Link {
- def foo = {}
- }
-}
-
diff --git a/test/files/res/bug722/ScanBased.scala b/test/files/res/bug722/ScanBased.scala
deleted file mode 100644
index fcb853f96d..0000000000
--- a/test/files/res/bug722/ScanBased.scala
+++ /dev/null
@@ -1,10 +0,0 @@
-package bug722;
-trait ScanBased extends Parser {
- trait AdjacentLink extends Link {
- override def foo = super.foo;
- }
- trait WhitespaceLink extends AdjacentLink {
- override def foo = super.foo;
- }
-}
-
diff --git a/test/files/res/bug735.res b/test/files/res/bug735.res
deleted file mode 100644
index d477e6fd47..0000000000
--- a/test/files/res/bug735.res
+++ /dev/null
@@ -1,2 +0,0 @@
-bug735/ScalaTyper.scala
-bug735/ScalaTyper.scala
diff --git a/test/files/res/bug743.res b/test/files/res/bug743.res
deleted file mode 100644
index f1dd2462e4..0000000000
--- a/test/files/res/bug743.res
+++ /dev/null
@@ -1,2 +0,0 @@
-bug743/ParserXXX.scala
-bug743/BracesXXX.scala
diff --git a/test/files/res/bug743/BracesXXX.scala b/test/files/res/bug743/BracesXXX.scala
deleted file mode 100644
index 8a2416caa8..0000000000
--- a/test/files/res/bug743/BracesXXX.scala
+++ /dev/null
@@ -1,6 +0,0 @@
-package bug743;
-trait BracesXXX extends ParserXXX {
- trait Matchable extends IsLinked {
- def foo : NodeImpl = null;
- }
-}
diff --git a/test/files/res/bug743/ParserXXX.scala b/test/files/res/bug743/ParserXXX.scala
deleted file mode 100644
index 6ecf13c1e1..0000000000
--- a/test/files/res/bug743/ParserXXX.scala
+++ /dev/null
@@ -1,15 +0,0 @@
-package bug743;
-trait ParserXXX {
- val foo = null;
- trait NodeImpl {
- trait Link extends ParserXXX.this.Link {
- val from = null;
- }
- }
- trait Link {
- val to0 = null;
- }
- trait IsLinked extends NodeImpl {
- trait Link extends super.Link;
- }
-}
diff --git a/test/files/res/bug785.res b/test/files/res/bug785.res
deleted file mode 100644
index 7e5da1c453..0000000000
--- a/test/files/res/bug785.res
+++ /dev/null
@@ -1,2 +0,0 @@
-bug785/ScalaTrees.scala
-bug785/ScalaTrees.scala
diff --git a/test/files/res/bug785/ScalaNewTyper.scala b/test/files/res/bug785/ScalaNewTyper.scala
deleted file mode 100644
index fb955572ed..0000000000
--- a/test/files/res/bug785/ScalaNewTyper.scala
+++ /dev/null
@@ -1,10 +0,0 @@
-package bug785;
-trait ScalaNewTyper {
- private var typed : String = null;
- trait HasSymbol {
- protected def foo : Unit = {}
- }
- trait HasArgsTypeParametersImpl extends HasSymbol {
- private var argss : List[List[String]] = Nil;
- }
-}
diff --git a/test/files/res/bug831.res b/test/files/res/bug831.res
deleted file mode 100644
index 0cc6c398ab..0000000000
--- a/test/files/res/bug831.res
+++ /dev/null
@@ -1,2 +0,0 @@
-bug831/NewScalaTestXXX.scala
-bug831/NewScalaTestXXX.scala
diff --git a/test/files/res/bug597.check b/test/files/res/t597.check
index 6cf64f734b..6cf64f734b 100644
--- a/test/files/res/bug597.check
+++ b/test/files/res/t597.check
diff --git a/test/files/res/t597.res b/test/files/res/t597.res
new file mode 100644
index 0000000000..1081b59b8b
--- /dev/null
+++ b/test/files/res/t597.res
@@ -0,0 +1,2 @@
+t597/Test.scala
+t597/Main.scala
diff --git a/test/files/res/bug597/Main.scala b/test/files/res/t597/Main.scala
index 24d1327135..24d1327135 100644
--- a/test/files/res/bug597/Main.scala
+++ b/test/files/res/t597/Main.scala
diff --git a/test/files/res/t597/Test.scala b/test/files/res/t597/Test.scala
new file mode 100644
index 0000000000..45b90bb17d
--- /dev/null
+++ b/test/files/res/t597/Test.scala
@@ -0,0 +1,27 @@
+package test;
+
+abstract class Base {
+ type A <: Ax;
+
+ abstract class Ax {
+ def a = null;
+ def string = "A";
+ }
+}
+trait ExtB extends Base {
+ type A <: Ax;
+ trait Ax extends super.Ax {
+ def c = null;
+ override def string = super.string + "C";
+ }
+}
+
+trait ExtC extends /*ExtA with*/ ExtB {
+ type A <: Ax;
+ trait Ax extends super.Ax {
+ a
+ c
+ def d = null;
+ override def string = super.string + "D";
+ }
+}
diff --git a/test/files/res/t687.check b/test/files/res/t687.check
new file mode 100644
index 0000000000..b741b262b9
--- /dev/null
+++ b/test/files/res/t687.check
@@ -0,0 +1,8 @@
+
+nsc>
+nsc> t687/QueryB.scala:3: error: name clash between defined and inherited member:
+method equals:(o: Object)Boolean and
+method equals:(x$1: Any)Boolean in class Any
+have same type after erasure: (o: Object)Boolean
+ override def equals(o : Object) = false;
+ ^
diff --git a/test/files/res/t687.res b/test/files/res/t687.res
new file mode 100644
index 0000000000..222297965a
--- /dev/null
+++ b/test/files/res/t687.res
@@ -0,0 +1,3 @@
+t687/QueryA.scala
+t687/QueryB.scala
+t687/QueryA.scala
diff --git a/test/files/res/bug687/QueryA.scala b/test/files/res/t687/QueryA.scala
index 2899f7e196..72365c7e7f 100644
--- a/test/files/res/bug687/QueryA.scala
+++ b/test/files/res/t687/QueryA.scala
@@ -1,4 +1,4 @@
-package bug687;
+package t687;
trait Query {
override def equals(o : Any) = false;
}
diff --git a/test/files/res/bug687/QueryB.scala b/test/files/res/t687/QueryB.scala
index 3e1e0b7a34..8f6f2d9ebf 100644
--- a/test/files/res/bug687/QueryB.scala
+++ b/test/files/res/t687/QueryB.scala
@@ -1,4 +1,4 @@
-package bug687;
+package t687;
trait Query {
override def equals(o : Object) = false;
}
diff --git a/test/files/res/bug722.check b/test/files/res/t722.check
index 6cf64f734b..6cf64f734b 100644
--- a/test/files/res/bug722.check
+++ b/test/files/res/t722.check
diff --git a/test/files/res/t722.res b/test/files/res/t722.res
new file mode 100644
index 0000000000..e2873a556c
--- /dev/null
+++ b/test/files/res/t722.res
@@ -0,0 +1,2 @@
+t722/Parser.scala t722/IfElse.scala
+t722/Parser.scala t722/IfElse.scala
diff --git a/test/files/res/bug722/IfElse.scala b/test/files/res/t722/IfElse.scala
index 1515ecf422..c0128deab4 100644
--- a/test/files/res/bug722/IfElse.scala
+++ b/test/files/res/t722/IfElse.scala
@@ -1,4 +1,4 @@
-package bug722;
+package t722;
trait IfEse extends ScanBased {
object condition extends WhitespaceLink;
}
diff --git a/test/files/res/t722/Parser.scala b/test/files/res/t722/Parser.scala
new file mode 100644
index 0000000000..9f54358920
--- /dev/null
+++ b/test/files/res/t722/Parser.scala
@@ -0,0 +1,8 @@
+
+package t722;
+trait Parser {
+ trait Link {
+ def foo() = {}
+ }
+}
+
diff --git a/test/files/res/t722/ScanBased.scala b/test/files/res/t722/ScanBased.scala
new file mode 100644
index 0000000000..8e55b800ac
--- /dev/null
+++ b/test/files/res/t722/ScanBased.scala
@@ -0,0 +1,10 @@
+package t722;
+trait ScanBased extends Parser {
+ trait AdjacentLink extends Link {
+ override def foo() = super.foo;
+ }
+ trait WhitespaceLink extends AdjacentLink {
+ override def foo() = super.foo;
+ }
+}
+
diff --git a/test/files/res/bug735.check b/test/files/res/t735.check
index 6cf64f734b..6cf64f734b 100644
--- a/test/files/res/bug735.check
+++ b/test/files/res/t735.check
diff --git a/test/files/res/t735.res b/test/files/res/t735.res
new file mode 100644
index 0000000000..6ef42ffef0
--- /dev/null
+++ b/test/files/res/t735.res
@@ -0,0 +1,2 @@
+t735/ScalaTyper.scala
+t735/ScalaTyper.scala
diff --git a/test/files/res/bug735/ScalaExpressions.scala b/test/files/res/t735/ScalaExpressions.scala
index aacc412b68..605ad51c08 100644
--- a/test/files/res/bug735/ScalaExpressions.scala
+++ b/test/files/res/t735/ScalaExpressions.scala
@@ -1,6 +1,6 @@
-package bug735;
+package t735;
trait ScalaExpressions {
- trait ExpressionFactory {
+ trait ExpressionFactory {
def foo = 10;
def bar : Int;
}
diff --git a/test/files/res/bug735/ScalaTyper.scala b/test/files/res/t735/ScalaTyper.scala
index 75e7a1855a..0369c5f19d 100644
--- a/test/files/res/bug735/ScalaTyper.scala
+++ b/test/files/res/t735/ScalaTyper.scala
@@ -1,5 +1,5 @@
-package bug735;
+package t735;
trait ScalaTyper extends ScalaExpressions {
val values = new ValueFactory {}
}
diff --git a/test/files/res/bug743.check b/test/files/res/t743.check
index 6cf64f734b..6cf64f734b 100644
--- a/test/files/res/bug743.check
+++ b/test/files/res/t743.check
diff --git a/test/files/res/t743.res b/test/files/res/t743.res
new file mode 100644
index 0000000000..7772a4b321
--- /dev/null
+++ b/test/files/res/t743.res
@@ -0,0 +1,2 @@
+t743/ParserXXX.scala
+t743/BracesXXX.scala
diff --git a/test/files/res/t743/BracesXXX.scala b/test/files/res/t743/BracesXXX.scala
new file mode 100644
index 0000000000..d3f6e28fe9
--- /dev/null
+++ b/test/files/res/t743/BracesXXX.scala
@@ -0,0 +1,6 @@
+package t743;
+trait BracesXXX extends ParserXXX {
+ trait Matchable extends IsLinked {
+ def foo : NodeImpl = null;
+ }
+}
diff --git a/test/files/res/t743/ParserXXX.scala b/test/files/res/t743/ParserXXX.scala
new file mode 100644
index 0000000000..fd584b972a
--- /dev/null
+++ b/test/files/res/t743/ParserXXX.scala
@@ -0,0 +1,15 @@
+package t743;
+trait ParserXXX {
+ val foo = null;
+ trait NodeImpl {
+ trait Link extends ParserXXX.this.Link {
+ val from = null;
+ }
+ }
+ trait Link {
+ val to0 = null;
+ }
+ trait IsLinked extends NodeImpl {
+ trait Link extends super.Link;
+ }
+}
diff --git a/test/files/res/bug785.check b/test/files/res/t785.check
index 6cf64f734b..6cf64f734b 100644
--- a/test/files/res/bug785.check
+++ b/test/files/res/t785.check
diff --git a/test/files/res/t785.res b/test/files/res/t785.res
new file mode 100644
index 0000000000..cfac559d4b
--- /dev/null
+++ b/test/files/res/t785.res
@@ -0,0 +1,2 @@
+t785/ScalaTrees.scala
+t785/ScalaTrees.scala
diff --git a/test/files/res/t785/ScalaNewTyper.scala b/test/files/res/t785/ScalaNewTyper.scala
new file mode 100644
index 0000000000..919e3b8d0e
--- /dev/null
+++ b/test/files/res/t785/ScalaNewTyper.scala
@@ -0,0 +1,10 @@
+package t785;
+trait ScalaNewTyper {
+ private var typed : String = null;
+ trait HasSymbol {
+ protected def foo() : Unit = {}
+ }
+ trait HasArgsTypeParametersImpl extends HasSymbol {
+ private var argss : List[List[String]] = Nil;
+ }
+}
diff --git a/test/files/res/bug785/ScalaTrees.scala b/test/files/res/t785/ScalaTrees.scala
index ade58e65c6..fdf32b5234 100644
--- a/test/files/res/bug785/ScalaTrees.scala
+++ b/test/files/res/t785/ScalaTrees.scala
@@ -1,4 +1,4 @@
-package bug785;
+package t785;
trait ScalaTrees extends ScalaNewTyper {
trait TraitClassImpl extends HasArgsTypeParametersImpl {
argss(null);
diff --git a/test/files/res/bug831.check b/test/files/res/t831.check
index 6cf64f734b..6cf64f734b 100644
--- a/test/files/res/bug831.check
+++ b/test/files/res/t831.check
diff --git a/test/files/res/t831.res b/test/files/res/t831.res
new file mode 100644
index 0000000000..9b9bd69530
--- /dev/null
+++ b/test/files/res/t831.res
@@ -0,0 +1,2 @@
+t831/NewScalaTestXXX.scala
+t831/NewScalaTestXXX.scala
diff --git a/test/files/res/bug831/NewScalaParserXXX.scala b/test/files/res/t831/NewScalaParserXXX.scala
index 88c81637f0..ed9b9d3b6f 100644
--- a/test/files/res/bug831/NewScalaParserXXX.scala
+++ b/test/files/res/t831/NewScalaParserXXX.scala
@@ -1,4 +1,4 @@
-package bug831;
+package t831;
trait ScalaNodeScannerXXX {
type Node <: NodeImpl;
@@ -7,36 +7,36 @@ trait ScalaNodeScannerXXX {
trait UnfixedImpl extends NodeImpl { def self : Unfixed; }
}
//def f = { Console.println("hello"); 42; }
-//for (val ns <-n; val i <- 0.until(ns)) yield f;
+//for (ns <-n; val i <- 0.until(ns)) yield f;
-trait NewScalaScannerXXX extends ScalaNodeScannerXXX {
+trait NewScalaScannerXXX extends ScalaNodeScannerXXX {
type Unfixed <: Node with UnfixedImpl;
trait UnfixedImpl extends super.UnfixedImpl with NodeImpl;
type Statement <: Unfixed with StatementImpl;
trait StatementImpl extends UnfixedImpl { def self : Statement; }
type NewLine <: Statement with NewLineImpl;
- trait NewLineImpl extends StatementImpl {
- def self : NewLine;
+ trait NewLineImpl extends StatementImpl {
+ def self : NewLine;
def isActive : Boolean = true;
}
object ArrowMode extends Enumeration { val Def, Case, Expr = Value }
}
-trait ScalaPrecedenceXXX extends NewScalaScannerXXX {
+trait ScalaPrecedenceXXX extends NewScalaScannerXXX {
type NewLine <: Statement with NewLineImpl;
- trait NewLineImpl extends super.NewLineImpl with StatementImpl {
- def self : NewLine;
+ trait NewLineImpl extends super.NewLineImpl with StatementImpl {
+ def self : NewLine;
override def isActive = super[NewLineImpl].isActive;
}
}
trait NewScalaParserXXX extends NewScalaScannerXXX with ScalaPrecedenceXXX {
type NewLine <: Statement with NewLineImpl;
trait MyNewLine extends super[NewScalaScannerXXX].NewLineImpl;
- trait NewLineImpl extends MyNewLine with
+ trait NewLineImpl extends MyNewLine with
super[ScalaPrecedenceXXX].NewLineImpl with
- StatementImpl {
- def self : NewLine;
+ StatementImpl {
+ def self : NewLine;
override def isActive = super[MyNewLine].isActive;
}
}
diff --git a/test/files/res/bug831/NewScalaTestXXX.scala b/test/files/res/t831/NewScalaTestXXX.scala
index a1dafa8eac..24d864f298 100644
--- a/test/files/res/bug831/NewScalaTestXXX.scala
+++ b/test/files/res/t831/NewScalaTestXXX.scala
@@ -1,2 +1,2 @@
-package bug831;
+package t831;
abstract class NewScalaTestXXX extends NewScalaParserXXX;
diff --git a/test/files/run/Course-2002-02.scala b/test/files/run/Course-2002-02.scala
index b8650108ed..56d7298aaf 100644
--- a/test/files/run/Course-2002-02.scala
+++ b/test/files/run/Course-2002-02.scala
@@ -100,7 +100,7 @@ object M4 {
def sumInts = sum(x => x)
def sumCubes = sum(x => x * x * x)
- def sumReciprocals = sum(1.0/_)
+ def sumReciprocals = sum(1.0/_)
def sumPi = { n: Int => 4 + sum(x => 4.0/(4*x+1) - 4.0/(4*x-1))(1, n) }
Console.println(sumInts(1,4))
@@ -194,7 +194,7 @@ object M8 {
//############################################################################
object M9 {
- def accumulate[t](combiner: (t, t) => t, nullValue: t, f: Int => t,
+ def accumulate[t](combiner: (t, t) => t, nullValue: t, f: Int => t,
next: Int => Int)(a: Int, b: Int): t =
if (a > b) nullValue
else combiner(f(a), accumulate(combiner, nullValue, f, next)(next(a), b))
@@ -328,9 +328,9 @@ object MD {
iter(a, zero)
}
- def plus (x:Double,y:Double) = x+y;
+ def plus (x:Double,y:Double) = x+y;
val sum: (Int => Double) => (Int, Int) => Double = reduce(plus , 0);
- def times(x:Double,y:Double) = x*y;
+ def times(x:Double,y:Double) = x*y;
val product: (Int => Double) => (Int, Int) => Double = reduce(times, 1);
def factorial(n: Int) = product(x => x)(1 , n)
diff --git a/test/files/run/Course-2002-05.scala b/test/files/run/Course-2002-05.scala
index a1d71e2818..9457fae147 100644
--- a/test/files/run/Course-2002-05.scala
+++ b/test/files/run/Course-2002-05.scala
@@ -129,7 +129,7 @@ object M3 {
else {
def isSafe(column: Int, placement: Placement): Boolean =
placement forall {
- pos => (pos._2 != column &&
+ pos => (pos._2 != column &&
abs(pos._2 - column) != row - pos._1)
}
@@ -178,9 +178,9 @@ object M4 {
isSafe(col, p.tail, delta + 1)));
for (
- val placement <- placeQueens(row - 1);
- val col <- columns;
- isSafe(col, placement, 1)
+ placement <- placeQueens(row - 1);
+ col <- columns;
+ if isSafe(col, placement, 1)
) yield {
col :: placement
}
diff --git a/test/files/run/Course-2002-08.scala b/test/files/run/Course-2002-08.scala
index 2e4b5111a9..85a83e0146 100644
--- a/test/files/run/Course-2002-08.scala
+++ b/test/files/run/Course-2002-08.scala
@@ -135,9 +135,9 @@ object M3 {
object M4 {
def test = {
- for (val i <- range(1, 4)) { Console.print(i + " ") };
+ for (i <- range(1, 4)) { Console.print(i + " ") };
Console.println;
- Console.println(for (val i <- range(1, 4)) yield i);
+ Console.println(for (i <- range(1, 4)) yield i);
Console.println;
}
}
@@ -520,7 +520,7 @@ abstract class CircuitSimulator() extends BasicCircuitSimulator() {
val w1 = new Wire();
val w2 = new Wire();
val w3 = new Wire();
-
+
andGate(in, ctrl(1), w3);
andGate(in, ctrl(1), w2);
andGate(in, ctrlN(1), w1);
@@ -561,14 +561,14 @@ class Main() extends CircuitSimulator() {
val outNum = 1 << n;
val in = new Wire();
- val ctrl = for (val x <- range(0,n)) yield { new Wire() };
- val out = for (val x <- range(0,outNum)) yield { new Wire() };
+ val ctrl = for (x <- range(0,n)) yield { new Wire() };
+ val out = for (x <- range(0,outNum)) yield { new Wire() };
demux(in, ctrl.reverse, out.reverse);
probe("in", in);
- for (val Pair(x,c) <- range(0,n) zip ctrl) { probe("ctrl" + x, c) }
- for (val Pair(x,o) <- range(0,outNum) zip out) { probe("out" + x, o) }
+ for (Pair(x,c) <- range(0,n) zip ctrl) { probe("ctrl" + x, c) }
+ for (Pair(x,o) <- range(0,outNum) zip out) { probe("out" + x, o) }
in.setSignal(true);
run;
diff --git a/test/files/run/Course-2002-09.scala b/test/files/run/Course-2002-09.scala
index fac39e0841..384a91efd8 100644
--- a/test/files/run/Course-2002-09.scala
+++ b/test/files/run/Course-2002-09.scala
@@ -81,7 +81,7 @@ class Constant(q: Quantity, v: Double) extends Constraint {
class Probe(name: String, q: Quantity) extends Constraint {
def newValue: Unit = printProbe(q.getValue);
def dropValue: Unit = printProbe(None);
- private def printProbe(v: Option[double]) {
+ private def printProbe(v: Option[Double]) {
val vstr = v match {
case Some(x) => x.toString()
case None => "?"
@@ -103,7 +103,7 @@ class Quantity() {
if (v != v1) error("Error! contradiction: " + v + " and " + v1);
case None =>
informant = setter; value = Some(v);
- for (val c <- constraints; !(c == informant)) {
+ for (c <- constraints; if !(c == informant)) {
c.newValue;
}
}
@@ -112,7 +112,7 @@ class Quantity() {
def forgetValue(retractor: Constraint): Unit = {
if (retractor == informant) {
value = None;
- for (val c <- constraints; !(c == informant)) c.dropValue;
+ for (c <- constraints; if !(c == informant)) c.dropValue;
}
}
def forgetValue: Unit = forgetValue(NoConstraint);
@@ -258,7 +258,7 @@ object M2 {
};
}
- def show(x: Option[int], y: Option[Int], z: Option[int]) = {
+ def show(x: Option[Int], y: Option[Int], z: Option[Int]) = {
Console.print("a = " +set(a,x)+ ", b = " +set(b,y)+ ", c = " +set(c,z));
Console.println(" => " + a.str + " * " + b.str + " = " + c.str);
a.forgetValue; b.forgetValue; c.forgetValue;
diff --git a/test/files/run/Course-2002-10.scala b/test/files/run/Course-2002-10.scala
index e978bc8258..4cfa1deb04 100644
--- a/test/files/run/Course-2002-10.scala
+++ b/test/files/run/Course-2002-10.scala
@@ -2,7 +2,7 @@
// Programmation IV - 2002 - Week 10
//############################################################################
-import Math.{Pi, log}
+import math.{Pi, log}
object M0 {
diff --git a/test/files/run/Course-2002-13.scala b/test/files/run/Course-2002-13.scala
index 27551b735b..c266af8c32 100644
--- a/test/files/run/Course-2002-13.scala
+++ b/test/files/run/Course-2002-13.scala
@@ -66,7 +66,7 @@ object Terms {
override def toString() =
a + (if (ts.isEmpty) "" else ts.mkString("(", ",", ")"));
def map(s: Subst): Term = Con(a, ts map (t => t map s));
- def tyvars = (ts flatMap (t => t.tyvars)).removeDuplicates;
+ def tyvars = (ts flatMap (t => t.tyvars)).distinct;
}
private var count = 0;
@@ -113,10 +113,10 @@ object Programs {
case class Clause(lhs: Term, rhs: List[Term]) {
def tyvars =
- (lhs.tyvars ::: (rhs flatMap (t => t.tyvars))).removeDuplicates;
+ (lhs.tyvars ::: (rhs flatMap (t => t.tyvars))).distinct;
def newInstance = {
var s: Subst = List();
- for (val a <- tyvars) { s = Binding(a, newVar(a)) :: s }
+ for (a <- tyvars) { s = Binding(a, newVar(a)) :: s }
Clause(lhs map s, rhs map (t => t map s))
}
override def toString() =
@@ -141,9 +141,9 @@ object Programs {
if (solve1(qs, s).isEmpty) Stream.cons(s, Stream.empty)
else Stream.empty
case q :: query1 =>
- for (val clause <- list2stream(clauses);
- val s1 <- tryClause(clause.newInstance, q, s);
- val s2 <- solve1(query1, s1)) yield s2
+ for (clause <- list2stream(clauses);
+ s1 <- tryClause(clause.newInstance, q, s);
+ s2 <- solve1(query1, s1)) yield s2
}
def solve1(query: List[Term], s: Subst): Stream[Subst] = {
@@ -154,8 +154,7 @@ object Programs {
def tryClause(c: Clause, q: Term, s: Subst): Stream[Subst] = {
if (debug) Console.println("trying " + c);
- for (val s1 <- option2stream(unify(q, c.lhs, s));
- val s2 <- solve1(c.rhs, s1)) yield s2;
+ for (s1 <- option2stream(unify(q, c.lhs, s)); s2 <- solve1(c.rhs, s1)) yield s2;
}
solve1(query, List())
diff --git a/test/files/run/OrderingTest.scala b/test/files/run/OrderingTest.scala
index fee15fc2f9..53448fbbce 100644
--- a/test/files/run/OrderingTest.scala
+++ b/test/files/run/OrderingTest.scala
@@ -1,4 +1,4 @@
-object Test extends Application {
+object Test extends App {
def test[T](t1 : T, t2 : T)(implicit ord : Ordering[T]) = {
val cmp = ord.compare(t1, t2);
val cmp2 = ord.compare(t2, t1);
@@ -6,7 +6,7 @@ object Test extends Application {
assert((cmp == 0) == (cmp2 == 0))
assert((cmp > 0) == (cmp2 < 0))
assert((cmp < 0) == (cmp2 > 0))
- }
+ }
def testAll[T](t1 : T, t2 : T)(implicit ord : Ordering[T]) = {
assert(ord.compare(t1, t2) < 0)
@@ -16,8 +16,8 @@ object Test extends Application {
}
assert(Ordering[String].compare("australopithecus", "brontausaurus") < 0)
- // assert(Ordering[Unit].compare((), ()) == 0)
-
+ // assert(Ordering[Unit].compare((), ()) == 0)
+
testAll("bar", "foo");
testAll[Byte](0, 1);
testAll(false, true)
@@ -28,7 +28,7 @@ object Test extends Application {
testAll[Iterable[Int]](List(1, 2), List(2));
testAll((1, "bar"), (1, "foo"))
testAll((1, "foo"), (2, "bar"))
-
+
// sortBy
val words = "The quick brown fox jumped over the lazy dog".split(' ')
val result = words.sortBy(x => (x.length, x.head))
diff --git a/test/files/run/ReplacementMatching.scala b/test/files/run/ReplacementMatching.scala
new file mode 100644
index 0000000000..faa46419dc
--- /dev/null
+++ b/test/files/run/ReplacementMatching.scala
@@ -0,0 +1,47 @@
+
+
+
+import util.matching._
+
+
+
+
+object Test {
+
+ def main(args: Array[String]) {
+ replacementMatching
+ groupsMatching
+ }
+
+ def replacementMatching {
+ val regex = """\$\{(.+?)\}""".r
+ val replaced = regex.replaceAllIn("Replacing: ${main}. And another method: ${foo}.",
+ (m: util.matching.Regex.Match) => {
+ val identifier = m.group(1)
+ identifier
+ })
+ assert(replaced == "Replacing: main. And another method: foo.")
+
+ val regex3 = """\$\{(.+?)\}""".r
+ val replaced3 = regex3.replaceSomeIn("Replacing: ${main}. And another: ${foo}.", (m: util.matching.Regex.Match) => {
+ val id = m.group(1)
+ if (id.startsWith("m")) Some(id) else None
+ })
+ assert(replaced3 == "Replacing: main. And another: ${foo}.")
+ }
+
+ def groupsMatching {
+ val Date = """(\d+)/(\d+)/(\d+)""".r
+ for (Regex.Groups(a, b, c) <- Date findFirstMatchIn "1/1/2001 marks the start of the millenium. 31/12/2000 doesn't.") {
+ assert(a == "1")
+ assert(b == "1")
+ assert(c == "2001")
+ }
+ for (Regex.Groups(a, b, c) <- (Date findAllIn "1/1/2001 marks the start of the millenium. 31/12/2000 doesn't.").matchData) {
+ assert(a == "1" || a == "31")
+ assert(b == "1" || b == "12")
+ assert(c == "2001" || c == "2000")
+ }
+ }
+
+}
diff --git a/test/files/run/ReverseSeqView.scala b/test/files/run/ReverseSeqView.scala
new file mode 100644
index 0000000000..517f1cc24c
--- /dev/null
+++ b/test/files/run/ReverseSeqView.scala
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+object Test extends App {
+
+ val lstv = List(1, 2, 3).view
+ val lstvr = lstv.reverse
+ assert(lstvr.iterator.toList == List(3, 2, 1))
+ assert(lstvr.reverse == List(1, 2, 3))
+ assert(lstvr.reverseIterator.toList == List(1, 2, 3))
+ assert(lstvr.reverseMap(_ + 1) == List(2, 3, 4))
+
+}
+
+
+
+
+
+
+
+
+
diff --git a/test/files/run/SymbolsTest.scala b/test/files/run/SymbolsTest.scala
new file mode 100644
index 0000000000..53caa5e62f
--- /dev/null
+++ b/test/files/run/SymbolsTest.scala
@@ -0,0 +1,283 @@
+
+
+
+
+class Slazz {
+ val s1 = 'myFirstSymbol
+ val s2 = 'mySecondSymbol
+ def s3 = 'myThirdSymbol
+ var s4: Symbol = null
+
+ s4 = 'myFourthSymbol
+}
+
+class Base {
+ val basesymbol = 'symbase
+}
+
+class Sub extends Base {
+ val subsymbol = 'symsub
+}
+
+trait Signs {
+ val ind = 'indication
+ val trace = 'trace
+}
+
+trait Lazy1 {
+ lazy val v1 = "lazy v1"
+ lazy val s1 = 'lazySymbol1
+}
+
+trait Lazy2 {
+ lazy val v2 = "lazy v2"
+ lazy val s2 = 'lazySymbol2
+}
+
+trait Lazy3 {
+ lazy val v3 = "lazy v3"
+ lazy val s3 = 'lazySymbol3
+}
+
+object SingletonOfLazyness {
+ lazy val lazysym = 'lazySymbol
+ lazy val another = 'another
+ lazy val lastone = 'lastone
+}
+
+/*
+ * Tests symbols to see if they work correct.
+ */
+object Test {
+ class Inner {
+ val simba = 'smba
+ var mfs: Symbol = null
+ mfs = Symbol("mfsa")
+ }
+
+ object InnerObject {
+ val o1 = 'aaa
+ val o2 = 'ddd
+ }
+
+ def aSymbol = 'myFirstSymbol
+ val anotherSymbol = 'mySecondSymbol
+
+ def main(args: Array[String]) {
+ testLiterals
+ testForLoop
+ testInnerClasses
+ testInnerObjects
+ testWithHashMaps
+ testLists
+ testAnonymous
+ testNestedObject
+ testInheritance
+ testTraits
+ testLazyTraits
+ testLazyObjects
+ }
+
+ def testLiterals {
+ val scl = new Slazz
+ assert(scl.s1 == aSymbol)
+ assert(scl.s2 == anotherSymbol)
+ assert(scl.s3 == 'myThirdSymbol)
+ assert(scl.s4 == Symbol.apply("myFourthSymbol"))
+ assert(scl.s1 == Symbol("myFirstSymbol"))
+ }
+
+ def testForLoop {
+ for (i <- 0 until 100) List("Val" + i)
+ }
+
+ def testInnerClasses {
+ val innerPower = new Inner
+ assert(innerPower.simba == 'smba)
+ assert(innerPower.mfs == 'mfsa)
+ }
+
+ def testInnerObjects {
+ assert(InnerObject.o1 == 'aaa)
+ assert(InnerObject.o2 == 'ddd)
+ }
+
+ def testWithHashMaps {
+ val map = new collection.mutable.HashMap[Symbol, Symbol]
+ map.put(InnerObject.o1, 'smba)
+ map.put(InnerObject.o2, 'mfsa)
+ map.put(Symbol("WeirdKey" + 1), Symbol("Weird" + "Val" + 1))
+ assert(map('aaa) == 'smba)
+ assert(map('ddd) == 'mfsa)
+ assert(map('WeirdKey1) == Symbol("WeirdVal1"))
+
+ map.clear
+ for (i <- 0 until 100) map.put(Symbol("symKey" + i), Symbol("symVal" + i))
+ assert(map(Symbol("symKey15")) == Symbol("symVal15"))
+ assert(map('symKey22) == 'symVal22)
+ assert(map('symKey73) == 'symVal73)
+ assert(map('symKey56) == 'symVal56)
+ assert(map('symKey91) == 'symVal91)
+ }
+
+ def testLists {
+ var lst: List[Symbol] = Nil
+ for (i <- 0 until 100) lst ::= Symbol("lsym" + (99 - i))
+ assert(lst(0) == 'lsym0)
+ assert(lst(10) == 'lsym10)
+ assert(lst(30) == 'lsym30)
+ assert(lst(40) == 'lsym40)
+ assert(lst(65) == 'lsym65)
+ assert(lst(90) == 'lsym90)
+ }
+
+ def testAnonymous { // TODO complaints classdef can't be found for some reason, runs fine in my case
+ // val anon = () => {
+ // val simba = 'smba
+ // simba
+ // }
+ // val an2 = () => {
+ // object nested {
+ // val m = 'mfsa
+ // }
+ // nested.m
+ // }
+ // val an3 = () => {
+ // object nested {
+ // val f = () => {
+ // 'layered
+ // }
+ // def gets = f()
+ // }
+ // nested.gets
+ // }
+ // val inner = new Inner
+ // assert(anon() == inner.simba)
+ // assert(anon().toString == "'smba")
+ // assert(an2() == 'mfsa)
+ // assert(an3() == Symbol("layered" + ""))
+ }
+
+ def testNestedObject {
+ object nested {
+ def sign = 'sign
+ def insignia = 'insignia
+ }
+ assert(nested.sign == 'sign)
+ assert(nested.insignia == 'insignia)
+ assert(('insignia).toString == "'insignia")
+ }
+
+ def testInheritance {
+ val base = new Base
+ val sub = new Sub
+ assert(base.basesymbol == 'symbase)
+ assert(sub.subsymbol == 'symsub)
+ assert(sub.basesymbol == 'symbase)
+
+ val anon = new Sub {
+ def subsubsymbol = 'symsubsub
+ }
+ assert(anon.subsubsymbol == 'symsubsub)
+ assert(anon.subsymbol == 'symsub)
+ assert(anon.basesymbol == 'symbase)
+
+ object nested extends Sub {
+ def objsymbol = 'symobj
+ }
+ assert(nested.objsymbol == 'symobj)
+ assert(nested.subsymbol == 'symsub)
+ assert(nested.basesymbol == 'symbase)
+ assert(('symbase).toString == "'symbase")
+ }
+
+ def testTraits {
+ val fromTrait = new AnyRef with Signs {
+ def traitsymbol = 'traitSymbol
+ }
+
+ assert(fromTrait.traitsymbol == 'traitSymbol)
+ assert(fromTrait.ind == 'indication)
+ assert(fromTrait.trace == 'trace)
+ assert(('trace).toString == "'trace")
+
+ trait Compl {
+ val s1 = 's1
+ def s2 = 's2
+ object inner {
+ val s3 = 's3
+ val s4 = 's4
+ }
+ }
+
+ val compl = new Sub with Signs with Compl
+ assert(compl.s1 == 's1)
+ assert(compl.s2 == 's2)
+ assert(compl.inner.s3 == 's3)
+ assert(compl.inner.s4 == 's4)
+ assert(compl.ind == 'indication)
+ assert(compl.trace == 'trace)
+ assert(compl.subsymbol == 'symsub)
+ assert(compl.basesymbol == 'symbase)
+
+ object Local extends Signs with Compl {
+ val s5 = 's5
+ def s6 = 's6
+ object inner2 {
+ val s7 = 's7
+ def s8 = 's8
+ }
+ }
+ assert(Local.s5 == 's5)
+ assert(Local.s6 == 's6)
+ assert(Local.inner2.s7 == 's7)
+ assert(Local.inner2.s8 == 's8)
+ assert(Local.inner.s3 == 's3)
+ assert(Local.inner.s4 == 's4)
+ assert(Local.s1 == 's1)
+ assert(Local.s2 == 's2)
+ assert(Local.trace == 'trace)
+ assert(Local.ind == 'indication)
+ assert(('s8).toString == "'s8")
+ }
+
+ def testLazyTraits {
+ val l1 = new AnyRef with Lazy1
+ val l2 = new AnyRef with Lazy2
+ val l3 = new AnyRef with Lazy3
+
+ l1.v1
+ l2.v2
+ l3.v3
+ assert((l1.s1).toString == "'lazySymbol1")
+ assert(l2.s2 == Symbol("lazySymbol" + 2))
+ assert(l3.s3 == 'lazySymbol3)
+ }
+
+ def testLazyObjects {
+ assert(SingletonOfLazyness.lazysym == 'lazySymbol)
+ assert(SingletonOfLazyness.another == Symbol("ano" + "ther"))
+ assert((SingletonOfLazyness.lastone).toString == "'lastone")
+
+ object nested {
+ lazy val sym1 = 'snested1
+ lazy val sym2 = 'snested2
+ }
+
+ assert(nested.sym1 == 'snested1)
+ assert(nested.sym2 == Symbol("snested" + "2"))
+ }
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/files/run/UnrolledBuffer.scala b/test/files/run/UnrolledBuffer.scala
new file mode 100644
index 0000000000..fe08e812ac
--- /dev/null
+++ b/test/files/run/UnrolledBuffer.scala
@@ -0,0 +1,125 @@
+
+
+
+
+import collection.mutable.UnrolledBuffer
+
+
+
+object Test {
+
+ def main(args: Array[String]) {
+ val u1 = new UnrolledBuffer[Int]
+ assert(u1.isEmpty)
+ assert(u1.size == 0)
+
+ u1 += 1
+ u1 += 2
+ u1 += 3
+ assert(u1 == UnrolledBuffer(1, 2, 3))
+ assert(u1.toList == List(1, 2, 3))
+ assert(u1.nonEmpty)
+ assert(u1.size == 3)
+
+ u1.clear
+ assert(u1.isEmpty)
+ assert(u1.size == 0)
+
+ u1 += 1
+ u1 += 2
+ u1 += 3
+ u1.remove(1)
+ assert(u1.nonEmpty)
+ assert(u1.size == 2)
+ assert(u1 == UnrolledBuffer(1, 3))
+ assert(u1.toList == List(1, 3))
+
+ u1 concat UnrolledBuffer(5, 7, 9)
+ assert(u1 == UnrolledBuffer(1, 3, 5, 7, 9))
+
+ val u2 = u1 map { x => (x - 1) / 2 }
+ assert(u2 == UnrolledBuffer(0, 1, 2, 3, 4))
+
+ u1.clear
+ u2.clear
+ assert(u1.size == 0)
+ assert(u2.size == 0)
+
+ for (i <- 0 until 500) u1 += i
+ for (i <- 500 until 1000) u2 += i
+ assert(u1.size == 500)
+ assert(u2.size == 500)
+ assert(u1.iterator.toList == (0 until 500).toList)
+ assert((for (elem <- u1) yield elem) sameElements (0 until 500))
+
+ u1 concat u2
+ assert(u1.size == 1000)
+ assert(u2.size == 0)
+ assertCorrect(u1)
+
+ u1 concat UnrolledBuffer()
+ assertCorrect(u1)
+
+ val u3 = u1 map { x => x }
+ var i = 0
+ for (elem <- u1) {
+ assert(elem == u3(i))
+ i += 1
+ }
+
+ u1.remove(999)
+ assert(u1.size == 999)
+ assertCorrect(u1)
+
+ u1.remove(500)
+ assert(u1.size == 998)
+ assertCorrect(u1)
+
+ u1.remove(5)
+ assert(u1.size == 997)
+ assertCorrect(u1)
+
+ u1.remove(0)
+ assert(u1.size == 996)
+ assertCorrect(u1)
+
+ u1.insert(0, 0)
+ assert(u1.size == 997)
+ assertCorrect(u1)
+
+ u1.insert(5, 5)
+ assert(u1.size == 998)
+ assertCorrect(u1)
+
+ u1.insert(500, 500)
+ assert(u1.size == 999)
+ assertCorrect(u1)
+
+ u1.insert(999, 999)
+ assert(u1.size == 1000)
+ assertCorrect(u1)
+
+ for (i <- -100 until 0) {
+ i +=: u1
+ assertCorrect(u1)
+ }
+ assert(u1.size == 1100)
+ assertCorrect(u1)
+ }
+
+ def assertCorrect(u1: UnrolledBuffer[Int]) {
+ val sz = u1.size
+ val store = new Array[Int](sz)
+ for (i <- 0 until sz) {
+ store(i) = u1(i)
+ u1(i) = sz - i
+ }
+ for (i <- 0 until sz) assert(u1(i) == (sz - i))
+ for (i <- 0 until sz) u1(i) = store(i)
+ for (i <- 0 until sz) assert(store(i) == u1(i))
+
+ assert((u1 map { x => x }) == u1)
+ assert(u1.iterator.toSeq.size == u1.size)
+ }
+
+}
diff --git a/test/files/run/absoverride.scala b/test/files/run/absoverride.scala
index a3c03df0d7..8c6de09d2a 100644
--- a/test/files/run/absoverride.scala
+++ b/test/files/run/absoverride.scala
@@ -26,16 +26,16 @@ trait SyncIterator extends AbsIterator {
}
}
trait LoggedIterator extends AbsIterator {
- abstract override def next: T = {
- val x = super.next; println("log: " + x); x
+ abstract override def next: T = {
+ val x = super.next; println("log: " + x); x
}
}
-class Iter2(s: String) extends StringIterator(s)
- with SyncIterator with LoggedIterator;
+class Iter2(s: String) extends StringIterator(s)
+ with SyncIterator with LoggedIterator;
object Test {
def main(args: Array[String]) {
class Iter extends StringIterator(args(0)) with RichIterator with SyncIterator with LoggedIterator
val iter = new Iter
- iter foreach Console.println
+ iter foreach Console.println
}
}
diff --git a/test/files/run/adding-growing-set.scala b/test/files/run/adding-growing-set.scala
new file mode 100644
index 0000000000..ab94b893b2
--- /dev/null
+++ b/test/files/run/adding-growing-set.scala
@@ -0,0 +1,11 @@
+/** This will run a loooong time if Set's builder copies a
+ * complete new Set for every element.
+ */
+object Test {
+ def main(args: Array[String]): Unit = {
+ val a = new Array[Long](1000000)
+ (1 to 10000) foreach (i => a(i) = i)
+ val s = collection.mutable.Set(a: _*)
+ assert(s.sum > 0)
+ }
+}
diff --git a/test/files/run/amp.scala b/test/files/run/amp.scala
index 367f3b31e4..a1924ef637 100644
--- a/test/files/run/amp.scala
+++ b/test/files/run/amp.scala
@@ -1,4 +1,4 @@
-object Test extends Application {
+object Test extends App {
def foo() = {
def f: Int = 1
diff --git a/test/files/run/arrayclone.scala b/test/files/run/arrayclone.scala
new file mode 100644
index 0000000000..c9f7556b47
--- /dev/null
+++ b/test/files/run/arrayclone.scala
@@ -0,0 +1,106 @@
+object Test extends App{
+ BooleanArrayClone;
+ ByteArrayClone;
+ ShortArrayClone;
+ CharArrayClone;
+ IntArrayClone;
+ LongArrayClone;
+ FloatArrayClone;
+ DoubleArrayClone;
+ ObjectArrayClone;
+ PolymorphicArrayClone;
+}
+
+object BooleanArrayClone{
+ val it : Array[Boolean] = Array(true, false);
+ val cloned = it.clone();
+ assert(cloned.sameElements(it));
+ cloned(0) = false;
+ assert(it(0) == true)
+}
+
+object ByteArrayClone{
+ val it : Array[Byte] = Array(1, 0);
+ val cloned = it.clone();
+ assert(cloned.sameElements(it));
+ cloned(0) = 0;
+ assert(it(0) == 1)
+}
+
+object ShortArrayClone{
+ val it : Array[Short] = Array(1, 0);
+ val cloned = it.clone();
+ assert(cloned.sameElements(it));
+ cloned(0) = 0;
+ assert(it(0) == 1)
+}
+
+object CharArrayClone{
+ val it : Array[Char] = Array(1, 0);
+ val cloned = it.clone();
+ assert(cloned.sameElements(it));
+ cloned(0) = 0;
+ assert(it(0) == 1)
+}
+
+object IntArrayClone{
+ val it : Array[Int] = Array(1, 0);
+ val cloned = it.clone();
+ assert(cloned.sameElements(it));
+ cloned(0) = 0;
+ assert(it(0) == 1)
+}
+
+object LongArrayClone{
+ val it : Array[Long] = Array(1, 0);
+ val cloned = it.clone();
+ assert(cloned.sameElements(it));
+ cloned(0) = 0;
+ assert(it(0) == 1)
+}
+
+object FloatArrayClone{
+ val it : Array[Float] = Array(1, 0);
+ val cloned = it.clone();
+ assert(cloned.sameElements(it));
+ cloned(0) = 0;
+ assert(it(0) == 1)
+}
+
+object DoubleArrayClone{
+ val it : Array[Double] = Array(1, 0);
+ val cloned = it.clone();
+ assert(cloned.sameElements(it));
+ cloned(0) = 0;
+ assert(it(0) == 1)
+}
+
+object ObjectArrayClone{
+ val it : Array[String] = Array("1", "0");
+ val cloned = it.clone();
+ assert(cloned.sameElements(it));
+ cloned(0) = "0";
+ assert(it(0) == "1")
+}
+
+object PolymorphicArrayClone{
+ def testIt[T](it : Array[T], one : T, zero : T) = {
+ val cloned = it.clone();
+ assert(cloned.sameElements(it));
+ cloned(0) = zero;
+ assert(it(0) == one)
+ }
+
+ testIt(Array("one", "two"), "one", "two");
+
+ class Mangler[T: Manifest](ts : T*){
+ // this will always be a BoxedAnyArray even after we've unboxed its contents.
+ val it = ts.toArray[T];
+ }
+
+ val mangled = new Mangler[Int](0, 1);
+
+ val y : Array[Int] = mangled.it; // make sure it's unboxed
+
+ testIt(mangled.it, 0, 1);
+}
diff --git a/test/files/run/arraycopy.scala b/test/files/run/arraycopy.scala
new file mode 100644
index 0000000000..82c34c23e7
--- /dev/null
+++ b/test/files/run/arraycopy.scala
@@ -0,0 +1,31 @@
+
+
+object Test {
+ def main(args: Array[String]) {
+ val a = new Array[Int](10)
+ val b = new Array[Any](10)
+ for (i <- 0 until 10) b(i) = i
+
+ Array.copy(b, 3, a, 3, 7)
+ assert(a.toSeq == List(0, 0, 0, 3, 4, 5, 6, 7, 8, 9))
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/files/run/arrays.scala b/test/files/run/arrays.scala
index cd1cf13793..ecebc78a6f 100644
--- a/test/files/run/arrays.scala
+++ b/test/files/run/arrays.scala
@@ -167,41 +167,39 @@ object Test {
//##########################################################################
// Values
- import Math._
-
val u0: Unit = ();
val u1: Unit = ();
val z0: Boolean = false;
val z1: Boolean = true;
- val b0: Byte = MIN_BYTE;
+ val b0: Byte = Byte.MinValue;
val b1: Byte = 1;
- val b2: Byte = MAX_BYTE;
+ val b2: Byte = Byte.MaxValue;
- val s0: Short = MIN_SHORT;
+ val s0: Short = Short.MinValue;
val s1: Short = 2;
- val s2: Short = MAX_SHORT;
+ val s2: Short = Short.MaxValue;
- val c0: Char = MIN_CHAR;
+ val c0: Char = Char.MinValue;
val c1: Char = '3';
- val c2: Char = MAX_CHAR;
+ val c2: Char = Char.MaxValue;
- val i0: Int = MIN_INT;
+ val i0: Int = Int.MinValue;
val i1: Int = 4;
- val i2: Int = MAX_INT;
+ val i2: Int = Int.MinValue;
- val l0: Long = MIN_LONG;
+ val l0: Long = Long.MinValue;
val l1: Int = 5;
- val l2: Long = MAX_LONG;
+ val l2: Long = Long.MaxValue;
- val f0: Float = MIN_FLOAT;
+ val f0: Float = Float.MinValue;
val f1: Int = 6;
- val f2: Float = MAX_FLOAT;
+ val f2: Float = Float.MaxValue;
- val d0: Double = MIN_DOUBLE;
+ val d0: Double = Double.MinValue;
val d1: Int = 7;
- val d2: Double = MAX_DOUBLE;
+ val d2: Double = Double.MaxValue;
val a0: Unit = ();
val a1: Boolean = false;
diff --git a/test/files/run/arrayview.scala b/test/files/run/arrayview.scala
new file mode 100644
index 0000000000..42ced5e9ac
--- /dev/null
+++ b/test/files/run/arrayview.scala
@@ -0,0 +1,11 @@
+object Test {
+ def f = (1 to 100).toArray.view
+
+ def main(args: Array[String]): Unit = {
+ val xs = (f filter (_ < 50)).reverse.filter(_ % 2 == 0).map(_ / 2).flatMap(x => Array(1, x))
+ assert(xs.size == 48)
+ val ys = xs.toArray
+ assert(ys.size == 48)
+ assert(xs.sum == ys.sum)
+ }
+}
diff --git a/test/files/run/arybufgrow.scala b/test/files/run/arybufgrow.scala
index 4dccd962f2..fba859a456 100644
--- a/test/files/run/arybufgrow.scala
+++ b/test/files/run/arybufgrow.scala
@@ -1,9 +1,9 @@
import scala.collection.mutable._;
-object Test extends Application {
+object Test extends App {
val buf = new ArrayBuffer[String];
- for(val i <- List.range(0,1000)) {
- buf + "hello";
+ for (i <- List.range(0,1000)) {
+ buf += "hello";
}
Console.println("1000 = " + buf.length);
diff --git a/test/files/run/bigDecimalCache.scala b/test/files/run/bigDecimalCache.scala
new file mode 100644
index 0000000000..e8ebefee78
--- /dev/null
+++ b/test/files/run/bigDecimalCache.scala
@@ -0,0 +1,9 @@
+object Test {
+ def main(args: Array[String]): Unit = {
+ val bd5a = BigDecimal(5)
+ val mc = java.math.MathContext.DECIMAL32
+ val bd5b = BigDecimal(5,mc)
+
+ assert(bd5b.mc == mc)
+ }
+}
diff --git a/test/files/run/bigDecimalTest.check b/test/files/run/bigDecimalTest.check
new file mode 100644
index 0000000000..6d11c23fcd
--- /dev/null
+++ b/test/files/run/bigDecimalTest.check
@@ -0,0 +1,6 @@
+34
+83
+0
+0
+0
+14
diff --git a/test/files/run/bigDecimalTest.scala b/test/files/run/bigDecimalTest.scala
new file mode 100644
index 0000000000..07b524c017
--- /dev/null
+++ b/test/files/run/bigDecimalTest.scala
@@ -0,0 +1,35 @@
+object Test {
+ def main(args: Array[String]): Unit = {
+
+ // SI-4981: avoid being limited by math context when not needed
+ val big = BigDecimal("32432875832753287583275382753288325325328532875325")
+ val f = big % BigDecimal(scala.math.Pi)
+
+ // SI-1812: use math context to limit decimal expansion
+ val a = BigDecimal(1) / BigDecimal(3)
+ val b = BigDecimal(1) / big
+
+ // SI-2199: implicit conversions from java.math.BigDecimal to BigDecimal
+ val c = BigDecimal(1) + (new java.math.BigDecimal(3))
+
+ // SI-2024: correctly use BigDecimal.valueOf
+ assert(BigDecimal(123) + 1.1 == BigDecimal("124.1"))
+
+ // SI-3206: BigDecimal cache errors
+ val d = BigDecimal(2, new java.math.MathContext(33))
+ val e = BigDecimal(2, new java.math.MathContext(34))
+ assert(d.mc != e.mc)
+
+ // SI-921
+ assert(BigDecimal(2) / BigDecimal(0.5) == BigDecimal(4))
+
+ // SI-2304: enforce equals/hashCode contract
+ assert(BigDecimal("2").hashCode == BigDecimal("2.00").hashCode)
+
+ // SI-4547: implicit conversion
+ assert(5 + BigDecimal(3) == BigDecimal(8))
+
+ // meaningless sanity check
+ List[BigDecimal](a, b, c, d, e, f) map (_.scale) foreach println
+ }
+}
diff --git a/test/files/run/bitsets-msil.check b/test/files/run/bitsets-msil.check
index 9fefa3125e..b187571bff 100644
--- a/test/files/run/bitsets-msil.check
+++ b/test/files/run/bitsets-msil.check
@@ -1,23 +1,23 @@
-ms0 = Set(2)
-ms1 = Set(2)
-ms2 = Set(2)
+ms0 = BitSet(2)
+ms1 = BitSet(2)
+ms2 = BitSet(2)
mb0 = False
mb1 = True
mb2 = False
xs0 = List(2)
xs1 = List(2)
xs2 = List(2)
-ma0 = List(4)
-ma1 = List(4)
-ma2 = List(4)
-mi0 = Set(2)
-mi1 = Set(2)
-mi2 = Set(2)
+ma0 = List(2)
+ma1 = List(2)
+ma2 = List(2)
+mi0 = BitSet(2)
+mi1 = BitSet(2)
+mi2 = BitSet(2)
-is0 = Set()
-is1 = Set()
-is2 = Set(2)
-is3 = Set()
+is0 = BitSet()
+is1 = BitSet()
+is2 = BitSet(2)
+is3 = BitSet()
ib0 = False
ib1 = False
ib2 = True
@@ -26,8 +26,8 @@ ys0 = List()
ys1 = List()
ys2 = List(2)
ys3 = List()
-ia0 = List(0)
-ia1 = List(0)
-ia2 = List(4)
+ia0 = List()
+ia1 = List()
+ia2 = List(2)
ia3 = List()
diff --git a/test/files/run/bitsets.check b/test/files/run/bitsets.check
index 478de261af..3f01d2a400 100644
--- a/test/files/run/bitsets.check
+++ b/test/files/run/bitsets.check
@@ -14,6 +14,29 @@ mi0 = BitSet(2)
mi1 = BitSet(2)
mi2 = BitSet(2)
+m2_m0 = List(1010101010101010101010101)
+m2_m2 = List(ffffffffffffffff, ffffffffffffffff, ffffffffffffffff, ffffffffffffffff, 1, 0, 0, 0)
+m2_m0c = true
+m2_m1c = true
+m2_m2c = true
+m2_m3c = true
+m2_i0 = true
+m2_i1 = true
+m2_i2 = true
+m2_i3 = true
+m2_f0 = true
+m2_f1 = true
+m2_f2 = true
+m2_f3 = true
+m2_t0 = true
+m2_t1 = true
+m2_t2 = true
+m2_t3 = true
+m2_r0 = true
+m2_r1 = true
+m2_r2 = true
+m2_r3 = true
+
is0 = BitSet()
is1 = BitSet()
is2 = BitSet(2)
@@ -31,3 +54,26 @@ ia1 = List()
ia2 = List(2)
ia3 = List()
+i2_m0 = List(1010101010101010101010101)
+i2_m2 = List(ffffffffffffffff, ffffffffffffffff, ffffffffffffffff, ffffffffffffffff, 1)
+i2_m0c = true
+i2_m1c = true
+i2_m2c = true
+i2_m3c = true
+i2_i0 = true
+i2_i1 = true
+i2_i2 = true
+i2_i3 = true
+i2_f0 = true
+i2_f1 = true
+i2_f2 = true
+i2_f3 = true
+i2_t0 = true
+i2_t1 = true
+i2_t2 = true
+i2_t3 = true
+i2_r0 = true
+i2_r1 = true
+i2_r2 = true
+i2_r3 = true
+
diff --git a/test/files/run/bitsets.scala b/test/files/run/bitsets.scala
index ac2b8eb5b9..27395683b4 100644
--- a/test/files/run/bitsets.scala
+++ b/test/files/run/bitsets.scala
@@ -39,6 +39,48 @@ object TestMutable {
Console.println
}
+object TestMutable2 {
+ import scala.collection.mutable.BitSet
+ import scala.collection.immutable.TreeSet
+
+ val l0 = 0 to 24 by 2 toList
+ val l1 = (190 to 255 toList) reverse
+ val l2 = (0 to 256 toList)
+ val l3 = (1 to 200 by 2 toList) reverse
+ val t0 = TreeSet(l0: _*)
+ val t1 = TreeSet(l1: _*)
+ val t2 = TreeSet(l2: _*)
+ val t3 = TreeSet(l3: _*)
+ val b0 = BitSet(l0: _*)
+ val b1 = BitSet(l1: _*)
+ val b2 = BitSet(l2: _*)
+ val b3 = BitSet(l3: _*)
+
+ println("m2_m0 = " + b0.toBitMask.toList.map(_.toBinaryString))
+ println("m2_m2 = " + b2.toBitMask.toList.map(_.toHexString))
+ println("m2_m0c = " + (BitSet.fromBitMask(b0.toBitMask) == b0))
+ println("m2_m1c = " + (BitSet.fromBitMask(b1.toBitMask) == b1))
+ println("m2_m2c = " + (BitSet.fromBitMask(b2.toBitMask) == b2))
+ println("m2_m3c = " + (BitSet.fromBitMask(b3.toBitMask) == b3))
+ println("m2_i0 = " + (t0 == b0))
+ println("m2_i1 = " + (t1 == b1))
+ println("m2_i2 = " + (t2 == b2))
+ println("m2_i3 = " + (t3 == b3))
+ println("m2_f0 = " + (t0.from(42) == b0.from(42)))
+ println("m2_f1 = " + (t1.from(42) == b1.from(42)))
+ println("m2_f2 = " + (t2.from(42) == b2.from(42)))
+ println("m2_f3 = " + (t3.from(42) == b3.from(42)))
+ println("m2_t0 = " + (t0.to(195) == b0.to(195)))
+ println("m2_t1 = " + (t1.to(195) == b1.to(195)))
+ println("m2_t2 = " + (t2.to(195) == b2.to(195)))
+ println("m2_t3 = " + (t3.to(195) == b3.to(195)))
+ println("m2_r0 = " + (t0.range(43,194) == b0.range(43,194)))
+ println("m2_r1 = " + (t1.range(43,194) == b1.range(43,194)))
+ println("m2_r2 = " + (t2.range(43,194) == b2.range(43,194)))
+ println("m2_r3 = " + (t3.range(43,194) == b3.range(43,194)))
+ println
+}
+
object TestImmutable {
import scala.collection.immutable.BitSet
@@ -69,9 +111,52 @@ object TestImmutable {
Console.println
}
-object Test extends Application {
+object TestImmutable2 {
+ import scala.collection.immutable.{BitSet, TreeSet}
+
+ val l0 = 0 to 24 by 2 toList
+ val l1 = (190 to 255 toList) reverse
+ val l2 = (0 to 256 toList)
+ val l3 = (1 to 200 by 2 toList) reverse
+ val t0 = TreeSet(l0: _*)
+ val t1 = TreeSet(l1: _*)
+ val t2 = TreeSet(l2: _*)
+ val t3 = TreeSet(l3: _*)
+ val b0 = BitSet(l0: _*)
+ val b1 = BitSet(l1: _*)
+ val b2 = BitSet(l2: _*)
+ val b3 = BitSet(l3: _*)
+
+ println("i2_m0 = " + b0.toBitMask.toList.map(_.toBinaryString))
+ println("i2_m2 = " + b2.toBitMask.toList.map(_.toHexString))
+ println("i2_m0c = " + (BitSet.fromBitMask(b0.toBitMask) == b0))
+ println("i2_m1c = " + (BitSet.fromBitMask(b1.toBitMask) == b1))
+ println("i2_m2c = " + (BitSet.fromBitMask(b2.toBitMask) == b2))
+ println("i2_m3c = " + (BitSet.fromBitMask(b3.toBitMask) == b3))
+ println("i2_i0 = " + (t0 == b0))
+ println("i2_i1 = " + (t1 == b1))
+ println("i2_i2 = " + (t2 == b2))
+ println("i2_i3 = " + (t3 == b3))
+ println("i2_f0 = " + (t0.from(42) == b0.from(42)))
+ println("i2_f1 = " + (t1.from(42) == b1.from(42)))
+ println("i2_f2 = " + (t2.from(42) == b2.from(42)))
+ println("i2_f3 = " + (t3.from(42) == b3.from(42)))
+ println("i2_t0 = " + (t0.to(195) == b0.to(195)))
+ println("i2_t1 = " + (t1.to(195) == b1.to(195)))
+ println("i2_t2 = " + (t2.to(195) == b2.to(195)))
+ println("i2_t3 = " + (t3.to(195) == b3.to(195)))
+ println("i2_r0 = " + (t0.range(77,194) == b0.range(77,194)))
+ println("i2_r1 = " + (t1.range(77,194) == b1.range(77,194)))
+ println("i2_r2 = " + (t2.range(77,194) == b2.range(77,194)))
+ println("i2_r3 = " + (t3.range(77,194) == b3.range(77,194)))
+ println
+}
+
+object Test extends App {
TestMutable
+ TestMutable2
TestImmutable
+ TestImmutable2
}
//############################################################################
diff --git a/test/files/run/boolexprs.scala b/test/files/run/boolexprs.scala
index b9b4faea9c..4f1c4b161a 100644
--- a/test/files/run/boolexprs.scala
+++ b/test/files/run/boolexprs.scala
@@ -10,7 +10,7 @@ class Counter {
object Test1 {
var flag = false;
- def flip: Boolean = { val tmp = flag; flag = !flag; tmp }
+ def flip: Boolean = { val tmp = flag; flag = !flag; tmp }
def run: Int = {
val c = new Counter;
c.incrThen(flip || flip);
diff --git a/test/files/run/breakout.scala b/test/files/run/breakout.scala
index 01ea08846e..8081405bd1 100644
--- a/test/files/run/breakout.scala
+++ b/test/files/run/breakout.scala
@@ -2,8 +2,8 @@ import scala.collection.generic._
import scala.collection._
import scala.collection.mutable._
-object Test extends Application {
+object Test extends App {
val l = List(1, 2, 3)
val a: Array[Int] = l.map(_ + 1)(breakOut)
println(a.mkString(", "))
-} \ No newline at end of file
+}
diff --git a/test/files/run/bug0325.scala b/test/files/run/bug0325.scala
deleted file mode 100644
index 236f1b101f..0000000000
--- a/test/files/run/bug0325.scala
+++ /dev/null
@@ -1,53 +0,0 @@
-case class RS(self: String) {
-
- // NB. "\\Q" + '\\' + "\\E" works on Java 1.5 and newer, but not on Java 1.4
- private def escape(ch: Char): String = ch match {
- case '\\' => "\\\\"
- case _ => "\\Q"+ch+"\\E"
- }
-
- def split(separator: Char): Array[String] = self.split(escape(separator))
-
- def split(separators: Array[Char]): Array[String] = {
- val re = separators.foldLeft("[")(_+escape(_)) + "]"
- self.split(re)
- }
-}
-
-object Test {
- def expect = List("a","b")
- def test(f: => Array[String], which: String) {
- try {
- val ret = f.toList
- if (ret != expect)
- println(which + " returned " + ret + " when expecting " + expect)
- else
- println(ret)
- } catch {
- case e@_ => println(which + " failed with " + e.getClass)
- }
- }
-
- def main(args: Array[String]) {
- val badChars = "?*{+([\\^.$"
-
- for (c <- badChars)
- test(("a"+c+"b").split(c),"RichString split('"+ c + "')")
- println
-
- for (c <- badChars)
- test(RS("a"+c+"b").split(c),"RS split('"+ c + "')")
- println
-
- val badCases = List(
- ']' -> "x]", '&' -> "&&",'\\' -> "\\x", '[' -> "[x",
- '^' -> "^x", '-' -> "x-z"
- )
- for ((c,str) <- badCases)
- test(("a"+c+"b").split(str.toArray),"RichString split(\""+ str + "\")")
- println
-
- for ((c,str) <- badCases)
- test(RS("a"+c+"b").split(str.toArray),"RS split(\""+ str + "\")")
- }
-}
diff --git a/test/files/run/bug1005.scala b/test/files/run/bug1005.scala
deleted file mode 100644
index 5ccd89dd85..0000000000
--- a/test/files/run/bug1005.scala
+++ /dev/null
@@ -1,19 +0,0 @@
-object Test
-{
- class Foo[T](x : Array[AnyRef]) { def bar = x.asInstanceOf[Array[T]] }
- class Bar[T](x : Array[T]) { def bar = x.asInstanceOf[Array[AnyRef]] }
-
- object FromMono{
- def main(args : Array[String]) = (new Foo[AnyRef](Array[AnyRef]("Halp!"))).bar
- }
-
- object FromPoly{
- def main(args : Array[String]) = (new Bar[AnyRef](Array[AnyRef]("Halp!"))).bar
- }
-
- def main(args: Array[String]): Unit = {
- println(FromMono main null mkString)
- println(FromPoly main null mkString)
- }
-}
-
diff --git a/test/files/run/bug1044.scala b/test/files/run/bug1044.scala
deleted file mode 100644
index da20439823..0000000000
--- a/test/files/run/bug1044.scala
+++ /dev/null
@@ -1,4 +0,0 @@
-object Test extends Application {
- val ducks = Array[AnyRef]("Huey", "Dewey", "Louie");
- ducks.elements.asInstanceOf[Iterator[String]]
-}
diff --git a/test/files/run/bug1074.check b/test/files/run/bug1074.check
deleted file mode 100644
index ecff8510ed..0000000000
--- a/test/files/run/bug1074.check
+++ /dev/null
@@ -1,3 +0,0 @@
-q0 = Set(kl, jk, cd, fg, a, ef, gh, de, hj, b, lm, mn)
-q1 = Set() 0
-q2 = Set() 0
diff --git a/test/files/run/bug1079.scala b/test/files/run/bug1079.scala
deleted file mode 100644
index ae8234bfe6..0000000000
--- a/test/files/run/bug1079.scala
+++ /dev/null
@@ -1,3 +0,0 @@
-object Test extends Application {
- println(<t user:tag=""/> == <t user:tag="X"/>)
-}
diff --git a/test/files/run/bug1110.scala b/test/files/run/bug1110.scala
deleted file mode 100644
index 092bc85369..0000000000
--- a/test/files/run/bug1110.scala
+++ /dev/null
@@ -1,11 +0,0 @@
-class Stuff {
- def zoop(p: Any{def &(q: Int): Int}) = p & 7
- def floop = new { def & = "Hello" }
-
- assert((floop &) == "Hello")
- assert(zoop(10) == 2)
-}
-
-object Test extends Application {
- new Stuff
-}
diff --git a/test/files/run/bug1141.scala b/test/files/run/bug1141.scala
deleted file mode 100644
index a98e3cf204..0000000000
--- a/test/files/run/bug1141.scala
+++ /dev/null
@@ -1,7 +0,0 @@
-object Test extends Application {
- val foo = new {
- def apply(args : String*) = args foreach println
- }
-
- foo("var", "args")
-}
diff --git a/test/files/run/bug1192.scala b/test/files/run/bug1192.scala
deleted file mode 100644
index c199198932..0000000000
--- a/test/files/run/bug1192.scala
+++ /dev/null
@@ -1,7 +0,0 @@
-object Test extends Application {
- val v1: Array[Array[Int]] = Array(Array(1, 2), Array(3, 4))
- def f[T](w: Array[Array[T]]) {
- for (val r <- w) println(r.deep.toString)
- }
- f(v1)
-}
diff --git a/test/files/run/bug1220.scala b/test/files/run/bug1220.scala
deleted file mode 100644
index 88baa980f5..0000000000
--- a/test/files/run/bug1220.scala
+++ /dev/null
@@ -1,15 +0,0 @@
-object Test extends Application {
-
- class QSRichIterable[A](self: Iterable[A]) {
- def filterMap[R](f: PartialFunction[A,R]) =
- self filter (f.isDefinedAt) map f
- }
-
- object Un {
- def unapply(i: Int): Option[Int] = Some(i)
- }
-
- val richIter = new QSRichIterable(List(0, 1, 2, 3, 4))
-
- assert((richIter filterMap {case Un(3) => 7}) == List(7))
-}
diff --git a/test/files/run/bug1300.scala b/test/files/run/bug1300.scala
deleted file mode 100644
index 1a759f4e1e..0000000000
--- a/test/files/run/bug1300.scala
+++ /dev/null
@@ -1,13 +0,0 @@
-object Test extends Application
-{
- val a1 = Array(0,1,2,3).toArray[Any]
-// val a1 = x1.toArray[Any]
- val a2 = Array('a','b','c','d').toArray[Any]
- val a3 = Array("e","f","g","h").toArray[Any]
-
- Array.copy(a3, 0, a1, 0, 4)
- Array.copy(a2, 0, a3, 0, 4)
- Array.copy(a2, 0, a1, 0, 4)
-
- println(a1.mkString + a2.mkString + a3.mkString)
-}
diff --git a/test/files/run/bug1309.scala b/test/files/run/bug1309.scala
deleted file mode 100644
index d753f4d96c..0000000000
--- a/test/files/run/bug1309.scala
+++ /dev/null
@@ -1,7 +0,0 @@
-object Test {
- def f(ras: => RandomAccessSeq[Byte]): RandomAccessSeq[Byte] = ras
-
- def main(args: Array[String]): Unit = {
- f(new Array[Byte](0))
- }
-}
diff --git a/test/files/run/bug1373.scala b/test/files/run/bug1373.scala
deleted file mode 100644
index 537421c788..0000000000
--- a/test/files/run/bug1373.scala
+++ /dev/null
@@ -1,6 +0,0 @@
-// Testing whether case class params come back in the right order.
-object Test extends Application {
- case class Foo(private val a: String, b: String, private val c: String, d: String, private val e: String)
- val x = Foo("a", "b", "c", "d", "e")
- assert(x.toString == """Foo(a,b,c,d,e)""")
-} \ No newline at end of file
diff --git a/test/files/run/bug1466.scala b/test/files/run/bug1466.scala
deleted file mode 100644
index fdbb5cb91d..0000000000
--- a/test/files/run/bug1466.scala
+++ /dev/null
@@ -1,11 +0,0 @@
-object IOvervalueMyPrivacy {
- private[this] var i = 0
- def go = {
- List(1,2,3).foreach(i += _)
- i
- }
-}
-
-object Test extends Application {
- assert(IOvervalueMyPrivacy.go == 6)
-}
diff --git a/test/files/run/bug2005.scala b/test/files/run/bug2005.scala
deleted file mode 100644
index 4176709537..0000000000
--- a/test/files/run/bug2005.scala
+++ /dev/null
@@ -1,10 +0,0 @@
-object Test {
- def main(args: Array[String]) {
- val a = new Array[Array[Int]](2,2)
- test(a)
- }
- def test[A](t: Array[Array[A]]) {
- val tmp = t(0)
- t(1) = tmp
- }
-}
diff --git a/test/files/run/bug2029.scala b/test/files/run/bug2029.scala
deleted file mode 100644
index 32b04f0b47..0000000000
--- a/test/files/run/bug2029.scala
+++ /dev/null
@@ -1,16 +0,0 @@
-object Test{
- def main(args : Array[String]){
- import scala.collection.immutable.TreeSet;
-
- val mainSet = TreeSet(1 to 5 :_*)
-
- var compareCalled = false;
- val smallerSet = TreeSet(2 to 4 :_*)(Ordering[Int].reverse)
-
- println(mainSet.mkString(","))
- println(smallerSet.mkString(","))
- println(smallerSet.subsetOf(mainSet));
- }
-
-
-}
diff --git a/test/files/run/bug2075.scala b/test/files/run/bug2075.scala
deleted file mode 100644
index f328faddcb..0000000000
--- a/test/files/run/bug2075.scala
+++ /dev/null
@@ -1,7 +0,0 @@
-object Test extends Application {
- var tm = new scala.collection.immutable.TreeMap[Int,Int]
- for (i <- 0 to 100)
- tm = tm.insert(i, i)
-
- tm.keySet.filter(_ < 40)
-} \ No newline at end of file
diff --git a/test/files/run/bug2124.scala b/test/files/run/bug2124.scala
deleted file mode 100644
index e72deb09bc..0000000000
--- a/test/files/run/bug2124.scala
+++ /dev/null
@@ -1,25 +0,0 @@
-import scala.xml._
-
-import scala.xml.transform._
-
-object Test {
- val sampleXml = <p><lost/><t><s><r></r></s></t></p>
-
- def main(args: scala.Array[String]) {
-
- println(new RuleTransformer(new RewriteRule {
-
- override def transform(n: Node): NodeSeq = {
- val result = n match {
- case <t>{_*}</t> => <q/>
-
- case n => n
-
- }
-// println ("Rewriting '" +n+ "' to: '" + result+ "'")
-
- result
- }
- }).transform(sampleXml))
- }
-}
diff --git a/test/files/run/bug2125.scala b/test/files/run/bug2125.scala
deleted file mode 100644
index 8314e4f019..0000000000
--- a/test/files/run/bug2125.scala
+++ /dev/null
@@ -1,25 +0,0 @@
-import scala.xml._
-
-import scala.xml.transform._
-
-object Test {
-
- val sampleXml = <xml:group><p><lost/><t><s><r></r></s></t></p></xml:group>
-
- def main(args: scala.Array[String]) {
- println(new RuleTransformer(new RewriteRule {
-
- override def transform(n: Node): NodeSeq = {
-
- val result = n match {
-
- case <t>{_*}</t> => <q/>
-
- case n => n
- }
-// println ("Rewriting '" +n+ "' to: '" + result+ "'")
- result
- }
- }).transform(sampleXml))
- }
-}
diff --git a/test/files/run/bug216.scala b/test/files/run/bug216.scala
deleted file mode 100644
index b046f51f47..0000000000
--- a/test/files/run/bug216.scala
+++ /dev/null
@@ -1,7 +0,0 @@
-object Test extends Application {
- object m {
- val f = { x: Unit => () }
- Console.println("OK")
- }
- m;
-}
diff --git a/test/files/run/bug2241.scala b/test/files/run/bug2241.scala
deleted file mode 100644
index 53a0d708e8..0000000000
--- a/test/files/run/bug2241.scala
+++ /dev/null
@@ -1,7 +0,0 @@
-object Test extends Application {
- def f(a:Array[Int]) = a match {
- case Array(1, _*) => "yes"
- case _ => "no"
- }
- assert(f(null) == "no")
-}
diff --git a/test/files/run/bug2276.scala b/test/files/run/bug2276.scala
deleted file mode 100644
index 25c30d9e96..0000000000
--- a/test/files/run/bug2276.scala
+++ /dev/null
@@ -1,24 +0,0 @@
-import scala.xml._
-import scala.xml.transform._
-
-object Test extends Application {
- val inputXml : Node =
- <root>
- <subnode>
- <version>1</version>
- </subnode>
- <contents>
- <version>1</version>
- </contents>
- </root>
-
- object t1 extends RewriteRule {
- override def transform(n: Node): Seq[Node] = n match {
- case <version>{x}</version> if x.toString.toInt < 4 => <version>{x.toString.toInt+1}</version>
- case other => other
- }
- }
-
- val ruleTransformer = new RuleTransformer(t1)
- println(ruleTransformer(inputXml))
-}
diff --git a/test/files/run/bug2512.scala b/test/files/run/bug2512.scala
deleted file mode 100644
index 514b26650f..0000000000
--- a/test/files/run/bug2512.scala
+++ /dev/null
@@ -1,14 +0,0 @@
-import scala.tools.nsc.util.HashSet
-
-object Test
-{
- val runs = 10000
- class Bop
-
- def main(args: Array[String]): Unit = {
- val set: HashSet[Bop] = new HashSet("Bop", 16)
- (1 to runs).toList foreach (_ => set addEntry new Bop)
-
- assert(runs == set.size && set.size == set.iterator.length)
- }
-}
diff --git a/test/files/run/bug2514.scala b/test/files/run/bug2514.scala
deleted file mode 100644
index e23b441ecf..0000000000
--- a/test/files/run/bug2514.scala
+++ /dev/null
@@ -1,15 +0,0 @@
-object Test
-{
- implicit def x[A](a: A) = new { def xx = a }
-
- def main(args: Array[String]): Unit = {
- val r1 = 12 xx;
- val r2 = 12.xx
- val r3 = 12.`xx`
- val r4 = 12.xx + 12.xx
- val r5 = 12.`xx` + 12.xx
- val r6 = 12.3.`xx` + 12.xx
-
- assert(r5 == 24)
- }
-} \ No newline at end of file
diff --git a/test/files/run/bug298.scala b/test/files/run/bug298.scala
deleted file mode 100644
index c6179f1b2e..0000000000
--- a/test/files/run/bug298.scala
+++ /dev/null
@@ -1,17 +0,0 @@
-object Test extends Application {
- implicit def anyList[T]: List[T] = Nil
-
- implicit def intList: List[Int] = 42::24::Nil
-
- def foo[T](implicit x: T) = x
-
- val s = foo[List[Int]]
-
- println(s) // correct - prints "List(42, 24)"
-
- implicit def tupleList[T](implicit t: List[T]): List[(T,T)] = t.map(x => (x,x))
-
- val t = foo[List[Tuple2[Int,Int]]]
-
- println(t) // incorrect - prints "List()"
-} \ No newline at end of file
diff --git a/test/files/run/bug363.scala b/test/files/run/bug363.scala
deleted file mode 100644
index c747be2ec9..0000000000
--- a/test/files/run/bug363.scala
+++ /dev/null
@@ -1,9 +0,0 @@
-object Test {
- def main(args: Array[String]) {
- println("I love the smell of (Array[String])Unit in the morning.")
- }
-}
-
-class Test {
- def kurtz() = "We must kill them. We must incinerate them."
-}
diff --git a/test/files/run/bug405.scala b/test/files/run/bug405.scala
deleted file mode 100644
index a1e3864496..0000000000
--- a/test/files/run/bug405.scala
+++ /dev/null
@@ -1,5 +0,0 @@
-object Test extends Application {
- val x = M;
- object M;
- assert(x eq M)
-}
diff --git a/test/files/run/bug428.check b/test/files/run/bug428.check
deleted file mode 100644
index 21bef2f8d3..0000000000
--- a/test/files/run/bug428.check
+++ /dev/null
@@ -1,8 +0,0 @@
-Foo 1: a = 0, b = 0, x = 0, y = 0
-Foo 2: a = 2, b = 0, x = 0, y = 0
-Foo 3: a = 2, b = 3, x = 0, y = 0
-Foo 4: a = 2, b = 3, x = 0, y = 0
-Foo 5: a = 2, b = 3, x = 0, y = 0
-Bar 1: a = 2, b = 3, x = 0, y = 0
-Bar 2: a = 2, b = 3, x = 5, y = 0
-Bar 3: a = 2, b = 3, x = 5, y = 7
diff --git a/test/files/run/bug428.scala b/test/files/run/bug428.scala
deleted file mode 100644
index 34d99efd1f..0000000000
--- a/test/files/run/bug428.scala
+++ /dev/null
@@ -1,37 +0,0 @@
-object Test {
-
- abstract class Foo(_a: Int, _b: Int) {
-
- Console.println("Foo 1: " + this);
- val a: Int = _a;
- Console.println("Foo 2: " + this);
- val b: Int = { fun(); _b }
- Console.println("Foo 3: " + this);
- val x: Int;
- Console.println("Foo 4: " + this);
- val y: Int;
- Console.println("Foo 5: " + this);
-
-
- def fun(): Unit = ();
-
- override def toString(): String =
- "a = " + a + ", b = " + b + ", x = " + x + ", y = " + y;
-
- }
-
- class Bar(_a: Int, _b: Int, _x: Int, _y: Int) extends Foo(_a, _b) {
-
- Console.println("Bar 1: " + this);
- val x: Int = _x;
- Console.println("Bar 2: " + this);
- val y: Int = { fun(); _y }
- Console.println("Bar 3: " + this);
-
- }
-
- def main (args: Array[String]): Unit = {
- new Bar(2,3,5,7);
- }
-
-}
diff --git a/test/files/run/bug429.check b/test/files/run/bug429.check
deleted file mode 100644
index 9e871b7bff..0000000000
--- a/test/files/run/bug429.check
+++ /dev/null
@@ -1 +0,0 @@
-AyB1
diff --git a/test/files/run/bug429.scala b/test/files/run/bug429.scala
deleted file mode 100644
index b2cc8128c0..0000000000
--- a/test/files/run/bug429.scala
+++ /dev/null
@@ -1,15 +0,0 @@
-object Test {
- abstract class A {
- Console.print("A");
- val x: Int;
- val y: Int = {Console.print("y"); x + 1}
- }
- class B extends A {
- Console.print("B");
- val z = 0;
- val x = 4 + z
- }
- def main (args: Array[String]): Unit = {
- Console.print((new B).y);
- }
-}
diff --git a/test/files/run/bug594.scala b/test/files/run/bug594.scala
deleted file mode 100644
index 0c3be3d5de..0000000000
--- a/test/files/run/bug594.scala
+++ /dev/null
@@ -1,8 +0,0 @@
-object Test {
- def main(args: Array[String]): Unit = {
- val array = Array("one", "two", "three")
- val firstTwo: Array[String] = array.slice(0,2)
- for(val x <- firstTwo)
- Console.println(x)
- }
-}
diff --git a/test/files/run/bug603.scala b/test/files/run/bug603.scala
deleted file mode 100644
index 361cef1f41..0000000000
--- a/test/files/run/bug603.scala
+++ /dev/null
@@ -1,33 +0,0 @@
-object forceDelay {
- class Susp[+A](lazyValue: => A) extends Function0[A] {
- private var func: () => Any = () => lazyValue
- private var value: Any = null
-
- override def apply() = {
- if (func != null) {
- value = func().asInstanceOf[A]
- func = null
- }
- value.asInstanceOf[A]
- }
-
- override def toString() =
- if (func == null) "Susp(" + value + ")"
- else "Susp(?)"
- }
-
- def delay[A](value: => A) = new Susp[A](value)
- implicit def force[A](s: Susp[A]): A = s()
-}
-
-object Test {
- import forceDelay._
-
- def main(args: Array[String]) = {
- val s: Susp[Int] = delay { Console.println("evaluating..."); 3 }
- Console.println("s = " + s)
- Console.println("s() = " + s())
- Console.println("s = " + s)
- Console.println("2 + s = " + (2 + s))
- }
-}
diff --git a/test/files/run/bug627.scala b/test/files/run/bug627.scala
deleted file mode 100644
index 6415694ffe..0000000000
--- a/test/files/run/bug627.scala
+++ /dev/null
@@ -1,6 +0,0 @@
-object Test {
- def main(args: Array[String]) {
- val s: Seq[int] = Array(1, 2, 3, 4)
- println(s)
- }
-}
diff --git a/test/files/run/bug657.scala b/test/files/run/bug657.scala
deleted file mode 100644
index 931f62b1a5..0000000000
--- a/test/files/run/bug657.scala
+++ /dev/null
@@ -1,51 +0,0 @@
-abstract class BaseList {
- type Node <: NodeImpl;
- implicit def convertNode(ni : NodeImpl) = ni.asInstanceOf[Node];
- abstract class NodeImpl;
-}
-abstract class LinkedList extends BaseList {
- type Node <: NodeImpl;
- trait NodeImpl extends super.NodeImpl;
-}
-trait OffsetList extends LinkedList {
- type Node <: NodeImpl;
- trait NodeImpl extends super.NodeImpl;
-}
-
-trait PriorityTree extends BaseList {
- type Node <: NodeImpl;
- trait NodeImpl extends super.NodeImpl {
- def chop : Node = this;
- }
-}
-
-trait PrecedenceParser extends LinkedList with PriorityTree {
- type Node <: NodeImpl;
- trait NodeImpl extends super[LinkedList].NodeImpl with super[PriorityTree].NodeImpl;
-}
-
-trait Matcher extends PrecedenceParser {
- type Node <: NodeImpl;
- trait NodeImpl extends super.NodeImpl;
-
- type Matchable <: Node with MatchableImpl;
- implicit def convertMatchable(m : MatchableImpl) = m.asInstanceOf[Matchable];
- trait MatchableImpl extends NodeImpl {
- override def chop : Node = {
- Console.println("passed"); super.chop;
- }
- }
-}
-
-class Test1 extends OffsetList with Matcher {
- type Node = NodeImpl;
- trait NodeImpl extends super[OffsetList].NodeImpl with super[Matcher].NodeImpl;
- class MatchableImpl extends super.MatchableImpl with NodeImpl;
- type Matchable = MatchableImpl;
-}
-
-object Test extends Application {
- val test = new Test1;
- val m = new test.MatchableImpl;
- m.chop;
-}
diff --git a/test/files/run/bug744.scala b/test/files/run/bug744.scala
deleted file mode 100644
index 4895e9baa0..0000000000
--- a/test/files/run/bug744.scala
+++ /dev/null
@@ -1,20 +0,0 @@
-trait Linked {
- type File <: FileImpl;
- trait FileImpl {
- Console.println("Hello from linked");
- }
-}
-object Test {
- class Test extends Linked {
- trait FileImpl extends super.FileImpl {
-// val x: int = 1
- }
- class File extends FileImpl;
- }
- def main(args : Array[String]) : Unit = {
- Console.println("BEGIN");
- val test = new Test;
- val file = new test.File;
- Console.println("END");
- }
-}
diff --git a/test/files/run/bug889.scala b/test/files/run/bug889.scala
deleted file mode 100644
index db6076e8e2..0000000000
--- a/test/files/run/bug889.scala
+++ /dev/null
@@ -1,9 +0,0 @@
-object Test extends Application {
-
- val a = List("a")
-
- a match {
- case Seq("a", "b", rest @ _*) => println("a, b, " + rest)
- case Seq(first, rest @ _*) => println("first: " + first + ", rest: " + rest)
- }
-}
diff --git a/test/files/run/bug920.scala b/test/files/run/bug920.scala
deleted file mode 100644
index 6a7f122d55..0000000000
--- a/test/files/run/bug920.scala
+++ /dev/null
@@ -1,20 +0,0 @@
-object Test {
- trait A;
- trait Foo0 { def foo : A; }
- trait Baz extends Foo0;
- trait B extends A {
- def initialize = {
- trait Foo extends Test.Foo0 {
- def foo : B.this.type = B.this;
- }
- class baz extends Baz with Foo {
- override def toString = "baz"
- }
- Console.println(new baz);
- }
- }
- object b extends B;
- def main(args : Array[String]) : Unit = {
- b.initialize;
- }
-}
diff --git a/test/files/run/bug949.scala b/test/files/run/bug949.scala
deleted file mode 100644
index 216e92a1c6..0000000000
--- a/test/files/run/bug949.scala
+++ /dev/null
@@ -1,14 +0,0 @@
-object Test extends Application {
-
- private def f = new T { val state = State.A }
-
- private object State extends Enumeration {
- val A, B = Value
- }
-
- f
-}
-
-trait T {
-}
-
diff --git a/test/files/run/bug978.scala b/test/files/run/bug978.scala
deleted file mode 100644
index 72dfdbae0a..0000000000
--- a/test/files/run/bug978.scala
+++ /dev/null
@@ -1,38 +0,0 @@
-class Foo(val n: Int) {
- override def hashCode = n % 2 // pretty bad hash
- override def equals(other: Any): Boolean = other match {
- case f: Foo => f.n == n
- case _ => false
- }
-
- override def toString = "" + n
-}
-
-object Test extends Application {
- val set = new collection.mutable.HashSet[Foo]
-// val set = new collection.jcl.HashSet[Foo]
-
- val max = 200
- for (val x <- 1 to max)
- set += new Foo(x)
-
- testRemove(2)
- testExists(2)
-
- def testRemove(m: Int) {
- for (val x <- 1 to max; x % m == 0) {
- val f = new Foo(x)
- set -= f
- assert(!(set contains f))
- testExists(m)
- }
- }
-
- def testExists(m: Int) {
- for (val x <- 1 to max; x % m == 1) {
- val f = new Foo(x)
- assert(set contains f, "For element: " + f + " set: " + set)
- }
- }
-
-}
diff --git a/test/files/run/bugs.scala b/test/files/run/bugs.scala
index bbf2a0fb39..d5905af76c 100644
--- a/test/files/run/bugs.scala
+++ b/test/files/run/bugs.scala
@@ -304,7 +304,7 @@ object Bug250Test {
// Bug 257
object Bug257Test {
- def sayhello(): Unit = { Console.println("I should come 1st and 2nd"); };
+ def sayhello(): Unit = { Console.println("I should come 1st and 2nd"); };
def sayhi(): Unit = { Console.println("I should come last"); };
def f1(x: Unit): Unit = ();
diff --git a/test/files/run/byname.scala b/test/files/run/byname.scala
index af545d5e7d..1325552348 100644
--- a/test/files/run/byname.scala
+++ b/test/files/run/byname.scala
@@ -1,4 +1,4 @@
-object Test extends Application {
+object Test extends App {
def test[A](name: String, expect: A, actual: => A) {
if (expect != actual) throw new AssertionError("test " + name + " failed")
@@ -36,13 +36,13 @@ def testVarargs(x: Int*) = x.reduceLeft((x: Int, y: Int) => x + y)
test("varargs", 4, testVarargs(1, 2, 1))
val testVarargsR = testVarargs _
-test("varargs r", 4, testVarargsR(1, 2, 1))
+test("varargs r", 4, testVarargsR(Seq(1, 2, 1)))
def testAll(x: Int, y: => Int, z: Int*) = x + y + z.size
test("all", 5, testAll(1, 2, 22, 23))
val testAllR = testAll _
-test("all r", 7, testAllR(2, 3, 34, 35))
+test("all r", 7, testAllR(2, 3, Seq(34, 35)))
val testAllS: (Int, =>Int, Int*) => Int = testAll _
test("all s", 8, testAllS(1, 5, 78, 89))
@@ -73,7 +73,7 @@ def testCVV(a: Int*)(z: String, b: Int*) = a.size + b.size
test("cvv", 3, testCVV(1, 2)("", 8))
val testCVVR = testCVV _
-test("cvv r", 3, testCVVR(1)("", 8, 9))
+test("cvv r", 3, testCVVR(Seq(1))("", Seq(8, 9)))
val testCVVRS: (String, Int*) => Int = testCVV(2, 3)
test("cvv rs", 4, testCVVRS("", 5, 6))
diff --git a/test/files/run/bytecodecs.scala b/test/files/run/bytecodecs.scala
new file mode 100644
index 0000000000..837be0edd9
--- /dev/null
+++ b/test/files/run/bytecodecs.scala
@@ -0,0 +1,39 @@
+import scala.reflect.internal.pickling.ByteCodecs._
+
+object Test {
+
+ def test8to7(xs: Array[Byte]) {
+ val ys = encode8to7(xs)
+ decode7to8(ys, ys.length)
+ assert(ys.take(xs.length).deep == xs.deep,
+ "test8to7("+xs.deep+") failed, result = "+ys.take(xs.length).deep)
+ }
+
+ def testAll(xs: Array[Byte]) {
+ val ys = encode(xs)
+ decode(ys)
+ assert(ys.take(xs.length).deep == xs.deep,
+ "testAll("+xs.deep+") failed, result = "+ys.take(xs.length).deep)
+ }
+
+ def test(inputs: Array[Byte]*) {
+ for (input <- inputs) {
+ test8to7(input)
+ testAll(input)
+ }
+ }
+
+ def main(args: Array[String]) {
+ test(
+ Array(1, 2, 3),
+ Array(1, 2, 3, 4, 5, 6, 7),
+ Array(1, -2, 0, -3, -5, -6, -7),
+ Array(1, 3, -1, -128, 0, 0, -128, 1, 2, 3))
+ val rand = new scala.util.Random()
+ for (i <- 1 until 5000) {
+ var xs = new Array[Byte](i)
+ rand.nextBytes(xs)
+ test(xs)
+ }
+ }
+}
diff --git a/test/files/run/caseClassEquality.scala b/test/files/run/caseClassEquality.scala
new file mode 100644
index 0000000000..4940d80951
--- /dev/null
+++ b/test/files/run/caseClassEquality.scala
@@ -0,0 +1,36 @@
+object Test {
+ abstract class A1
+ case class C1(x: Int) extends A1
+ class C2(x: Int) extends C1(x) {
+ override def productPrefix = "Shazbot!"
+ }
+ class C3(x: Int) extends C1(x) {
+ override def canEqual(other: Any) = other.isInstanceOf[C3]
+ override def equals(other: Any) = other match {
+ case ob: C3 => x == ob.x
+ case _ => false
+ }
+ }
+
+ case class CS1(xs: Any*)
+ class CS2(xs: Seq[_]*) extends CS1(xs: _*)
+ class CS3(xs: IndexedSeq[Int]*) extends CS2(xs: _*)
+
+ case class H1(x: Int, y: Double)
+ class H2(x: Double, y: Int) extends H1(y, x)
+
+ def main(args: Array[String]): Unit = {
+ assert(C1(5) == new C2(5))
+ assert(new C2(5) == C1(5))
+ assert(C1(5).hashCode == new C2(5).hashCode)
+ assert(new C2(5).hashCode == C1(5).hashCode)
+
+ assert(C1(5) != new C3(5))
+ assert(new C3(5) != C1(5))
+
+ assert(CS1(List(1d,2d), Seq[Float](3f, 4f)) == new CS3(IndexedSeq(1,2), IndexedSeq(3, 4)))
+
+ assert(H1(5, 10d) == new H2(10d, 5))
+ assert(H1(5, 10d).hashCode == new H2(10d, 5).hashCode)
+ }
+}
diff --git a/test/files/run/caseclasses.scala b/test/files/run/caseclasses.scala
index ed5643a709..5aafea59e3 100644
--- a/test/files/run/caseclasses.scala
+++ b/test/files/run/caseclasses.scala
@@ -15,7 +15,7 @@ object M {
}
}
-object Test extends Application {
+object Test extends App {
def Abs(x: Int) = new Abs(x * 2){}
Abs(2) match {
diff --git a/test/files/run/castsingleton.scala b/test/files/run/castsingleton.scala
index f907467741..47bd613079 100644
--- a/test/files/run/castsingleton.scala
+++ b/test/files/run/castsingleton.scala
@@ -1,4 +1,4 @@
-object Test extends Application {
+object Test extends App {
case class L();
object N extends L();
@@ -8,4 +8,4 @@ object Test extends Application {
}
empty(L())
-}
+}
diff --git a/test/files/run/checked.scala b/test/files/run/checked.scala
index adb0c509a5..06bc0c05e5 100644
--- a/test/files/run/checked.scala
+++ b/test/files/run/checked.scala
@@ -23,9 +23,9 @@ trait T {
// Should not throw
class D extends B with T {
val sum = x + y + z + b1 + b2 + t1 + t2
- override def toString =
+ override def toString =
"sum = " + sum
-
+
}
abstract class NeedsXEarly {
@@ -90,8 +90,8 @@ class TestInterference extends {
}
-object Test extends Application {
-
+object Test extends App {
+
def shouldThrow(t: => Unit) = try {
t
println("[FAIL]: No UFE thrown")
diff --git a/test/files/run/classof.scala b/test/files/run/classof.scala
index b50facc1e9..10c07d2e51 100644
--- a/test/files/run/classof.scala
+++ b/test/files/run/classof.scala
@@ -13,14 +13,14 @@ object Test {
println(classOf[Long])
println(classOf[Float])
println(classOf[Double])
-
+
println("Class types")
println(classOf[SomeClass])
println(classOf[List[Array[Float]]])
println(classOf[(String, Map[Int, String])])
println("Arrays:")
- println(classOf[Array[Unit]])
+ println(classOf[Array[Unit]])
println(classOf[Array[Int]])
println(classOf[Array[Double]])
println(classOf[Array[List[String]]])
diff --git a/test/files/run/code.check b/test/files/run/code.check
new file mode 100644
index 0000000000..b946554fda
--- /dev/null
+++ b/test/files/run/code.check
@@ -0,0 +1,29 @@
+testing: ((x: Int) => x.$plus(ys.length))
+result = ((x: Int) => x.+{(x: <?>)Int}(ys.length{Int}){Int}){Int => Int}
+evaluated = <function1>
+testing: (() => {
+ val e: Element = new Element("someName");
+ e
+})
+result = (() => {
+ val e: Element = new Element{Element}{(name: <?>)Element}("someName"{String("someName")}){Element};
+ e{Element}
+}{Element}){() => Element}
+evaluated = Element(someName)
+testing: (() => truc.elem = 6)
+result = (() => truc.elem{Int} = 6{Int(6)}{Unit}){() => Unit}
+evaluated = null
+testing: (() => truc.elem = truc.elem.$plus(6))
+result = (() => truc.elem{Int} = truc.elem.+{(x: <?>)Int}(6{Int(6)}){Int}{Unit}){() => Unit}
+evaluated = null
+testing: (() => new baz.BazElement("someName"))
+result = (() => new baz.BazElement{baz.BazElement}{(name: <?>)baz.BazElement}("someName"{String("someName")}){baz.BazElement}){() => baz.BazElement}
+evaluated = BazElement(someName)
+testing: ((x: Int) => x.$plus(ys.length))
+result = ((x: Int) => x.+{(x: <?>)Int}(ys.length{Int}){Int}){Int => Int}
+evaluated = <function1>
+static: 2
+testing: (() => x.$plus(1))
+result = (() => x.+{(x: <?>)Int}(1{Int(1)}){Int}){() => Int}
+evaluated = 2
+1+1 = 2
diff --git a/test/files/run/code.scala b/test/files/run/code.scala
new file mode 100644
index 0000000000..162f796c63
--- /dev/null
+++ b/test/files/run/code.scala
@@ -0,0 +1,60 @@
+import scala.tools.partest.utils.CodeTest
+
+case class Element(name: String)
+
+object Test extends App {
+ case class InnerElement(name: String)
+ def foo[T](ys: List[T]) = {
+ val fun: reflect.Code[Int => Int] = x => x + ys.length
+ fun
+ }
+ CodeTest(foo(List(2)), args)
+ CodeTest({() => val e = Element("someName"); e}, args)
+// CodeTest({() => val e = InnerElement("someName"); e}, args) // (does not work yet)
+ def titi() = {
+ var truc = 0
+ CodeTest(() => {
+ truc = 6
+ }, args)
+ }
+ def tata(): Unit = {
+ var truc = 0
+ CodeTest(() => {
+ truc = truc + 6
+ }, args)
+ }
+ titi()
+ tata()
+ new baz.A(args)
+
+ def show() {
+ def foo[T](ys: List[T]) = {
+ val fun: reflect.Code[Int => Int] = x => x + ys.length
+ CodeTest(fun, args)
+ }
+ foo(List(1, 2, 3))
+ }
+
+ show()
+
+ def evaltest(x: Int) = {
+ CodeTest.static(() => x + 1, args)
+ CodeTest(() => x + 1, args)
+ }
+
+ println("1+1 = "+evaltest(1))
+}
+
+
+package baz {
+
+ case class BazElement(name: String) { }
+
+ class A(args: Array[String]) {
+ CodeTest(() => new baz.BazElement("someName"), args)
+ }
+
+}
+
+
+
diff --git a/test/files/run/collections-toSelf.scala b/test/files/run/collections-toSelf.scala
new file mode 100644
index 0000000000..2adbc22af7
--- /dev/null
+++ b/test/files/run/collections-toSelf.scala
@@ -0,0 +1,11 @@
+object Test {
+ val map = Map(1 -> 2)
+ val set = Set(1, 2)
+ val seq = collection.immutable.Seq(1, 2)
+
+ def main(args: Array[String]): Unit = {
+ assert(map.toMap eq map)
+ assert(set.toSet eq set)
+ assert(seq.toSeq eq seq)
+ }
+}
diff --git a/test/files/run/collections.scala b/test/files/run/collections.scala
index f286123322..60f0765e6a 100644
--- a/test/files/run/collections.scala
+++ b/test/files/run/collections.scala
@@ -1,7 +1,7 @@
import collection._
import scala.compat.Platform.currentTime
-object Test extends Application {
+object Test extends App {
val printTime = false
@@ -61,7 +61,7 @@ object Test extends Application {
}
time {
var x = 0
- for (i <- 0 to 10000)
+ for (i <- 0 to 10000)
s get i match {
case Some(i) => x += i
case None =>
@@ -96,7 +96,7 @@ object Test extends Application {
}
time {
var x = 0
- for (i <- 0 to 10000)
+ for (i <- 0 to 10000)
s get i match {
case Some(i) => x += i
case None =>
diff --git a/test/files/run/colltest.check b/test/files/run/colltest.check
index be930f06ce..1ad81a1350 100644
--- a/test/files/run/colltest.check
+++ b/test/files/run/colltest.check
@@ -1 +1,7 @@
+true
+false
+true
+false
+true
+false
succeeded for 10 iterations.
diff --git a/test/files/run/colltest.scala b/test/files/run/colltest.scala
index b6577006f4..ecd234bdd1 100644
--- a/test/files/run/colltest.scala
+++ b/test/files/run/colltest.scala
@@ -45,6 +45,21 @@ class TestSet(s0: Set[Int], s1: Set[Int]) {
}
Console.println("succeeded for "+Iterations+" iterations.")
}
-object Test extends Application {
+object Test extends App {
+ def t3954 {
+ import scala.collection.mutable
+ import scala.collection.immutable
+ val result = new mutable.ImmutableSetAdaptor(immutable.ListSet.empty[Int])
+ println(result.add(1))
+ println(result.add(1))
+ val result2 = new mutable.HashSet[Int]
+ println(result2.add(1))
+ println(result2.add(1))
+ val result3 = new java.util.HashSet[Int]()
+ println(result3.add(1))
+ println(result3.add(1))
+ }
+ t3954
+
new TestSet(HashSet.empty, new scala.collection.mutable.LinkedHashSet)
}
diff --git a/test/files/run/colltest1.check b/test/files/run/colltest1.check
index b49d328be4..7377174281 100644
--- a/test/files/run/colltest1.check
+++ b/test/files/run/colltest1.check
@@ -72,11 +72,11 @@ new test starting with List()
9: List(2, 3, 4, 5, 6, 7, 8, 9, 10)
1
List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
-new test starting with IndexedSeq()
-10: IndexedSeq(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
-9: IndexedSeq(2, 3, 4, 5, 6, 7, 8, 9, 10)
+new test starting with Vector()
+10: Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
+9: Vector(2, 3, 4, 5, 6, 7, 8, 9, 10)
1
-IndexedSeq(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
+Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
new test starting with Vector()
10: Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
9: Vector(2, 3, 4, 5, 6, 7, 8, 9, 10)
@@ -95,15 +95,15 @@ ArrayBuffer(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
true
false
true
-Map(O -> O, W -> W, H -> H, P -> P, G -> G, V -> V, I -> I, A -> A, F -> F, U -> U, N -> N, X -> X, Z -> Z, S -> S, D -> D, K -> K, R -> R, C -> C, B -> B, L -> L, Q -> Q, M -> M, J -> J, Y -> Y, T -> T, E -> E)
-Map(O -> O, W -> W, H -> H, P -> P, G -> G, V -> V, I -> I, A -> A, F -> F, U -> U, N -> N, X -> X, Z -> Z, S -> S, D -> D, K -> K, R -> R, C -> C, B -> B, L -> L, Q -> Q, M -> M, J -> J, Y -> Y, T -> T, E -> E)
-Map(O -> O, W -> W, H -> H, P -> P, V -> V, G -> G, I -> I, A -> A, F -> F, U -> U, N -> N, X -> X, Z -> Z, S -> S, D -> D, K -> K, R -> R, C -> C, B -> B, L -> L, Q -> Q, M -> M, J -> J, Y -> Y, T -> T, E -> E)
-Map(O -> O, W -> W, H -> H, P -> P, V -> V, G -> G, I -> I, A -> A, F -> F, U -> U, N -> N, X -> X, Z -> Z, S -> S, D -> D, K -> K, R -> R, C -> C, B -> B, L -> L, Q -> Q, M -> M, J -> J, Y -> Y, T -> T, E -> E)
-Map(O -> O, W -> W, H -> H, P -> P, G -> G, V -> V, I -> I, A -> A, F -> F, U -> U, N -> N, X -> X, Z -> Z, S -> S, D -> D, K -> K, R -> R, C -> C, B -> B, L -> L, Q -> Q, M -> M, J -> J, Y -> Y, T -> T, E -> E)
-Map(O -> O, W -> W, H -> H, P -> P, G -> G, V -> V, I -> I, A -> A, F -> F, U -> U, N -> N, X -> X, Z -> Z, S -> S, D -> D, K -> K, R -> R, C -> C, B -> B, L -> L, Q -> Q, M -> M, J -> J, Y -> Y, T -> T, E -> E)
-Map(A -> A, B -> B, C -> C, D -> D, E -> E, F -> F, G -> G, H -> H, I -> I, J -> J, K -> K, L -> L, M -> M, N -> N, O -> O, P -> P, Q -> Q, R -> R, S -> S, T -> T, U -> U, V -> V, W -> W, X -> X, Y -> Y, Z -> Z)
-Map(A -> A, B -> B, C -> C, D -> D, E -> E, F -> F, G -> G, H -> H, I -> I, J -> J, K -> K, L -> L, M -> M, N -> N, O -> O, P -> P, Q -> Q, R -> R, S -> S, T -> T, U -> U, V -> V, W -> W, X -> X, Y -> Y, Z -> Z)
-Map(O -> O, W -> W, H -> H, P -> P, V -> V, G -> G, I -> I, A -> A, F -> F, U -> U, N -> N, X -> X, Z -> Z, S -> S, D -> D, K -> K, R -> R, C -> C, B -> B, L -> L, Q -> Q, M -> M, J -> J, Y -> Y, T -> T, E -> E)
-Map(O -> O, W -> W, H -> H, P -> P, V -> V, G -> G, I -> I, A -> A, F -> F, U -> U, N -> N, X -> X, Z -> Z, S -> S, D -> D, K -> K, R -> R, C -> C, B -> B, L -> L, Q -> Q, M -> M, J -> J, Y -> Y, T -> T, E -> E)
-Map(O -> O, W -> W, H -> H, P -> P, G -> G, V -> V, I -> I, A -> A, F -> F, U -> U, N -> N, X -> X, Z -> Z, S -> S, D -> D, K -> K, R -> R, C -> C, B -> B, L -> L, Q -> Q, M -> M, J -> J, Y -> Y, T -> T, E -> E)
-Map(O -> O, W -> W, H -> H, P -> P, G -> G, V -> V, I -> I, A -> A, F -> F, U -> U, N -> N, X -> X, Z -> Z, S -> S, D -> D, K -> K, R -> R, C -> C, B -> B, L -> L, Q -> Q, M -> M, J -> J, Y -> Y, T -> T, E -> E)
+List((A,A), (B,B), (C,C), (D,D), (E,E), (F,F), (G,G), (H,H), (I,I), (J,J), (K,K), (L,L), (M,M), (N,N), (O,O), (P,P), (Q,Q), (R,R), (S,S), (T,T), (U,U), (V,V), (W,W), (X,X), (Y,Y), (Z,Z))
+List((A,A), (B,B), (C,C), (D,D), (E,E), (F,F), (G,G), (H,H), (I,I), (J,J), (K,K), (L,L), (M,M), (N,N), (O,O), (P,P), (Q,Q), (R,R), (S,S), (T,T), (U,U), (V,V), (W,W), (X,X), (Y,Y), (Z,Z))
+List((A,A), (B,B), (C,C), (D,D), (E,E), (F,F), (G,G), (H,H), (I,I), (J,J), (K,K), (L,L), (M,M), (N,N), (O,O), (P,P), (Q,Q), (R,R), (S,S), (T,T), (U,U), (V,V), (W,W), (X,X), (Y,Y), (Z,Z))
+List((A,A), (B,B), (C,C), (D,D), (E,E), (F,F), (G,G), (H,H), (I,I), (J,J), (K,K), (L,L), (M,M), (N,N), (O,O), (P,P), (Q,Q), (R,R), (S,S), (T,T), (U,U), (V,V), (W,W), (X,X), (Y,Y), (Z,Z))
+List((A,A), (B,B), (C,C), (D,D), (E,E), (F,F), (G,G), (H,H), (I,I), (J,J), (K,K), (L,L), (M,M), (N,N), (O,O), (P,P), (Q,Q), (R,R), (S,S), (T,T), (U,U), (V,V), (W,W), (X,X), (Y,Y), (Z,Z))
+List((A,A), (B,B), (C,C), (D,D), (E,E), (F,F), (G,G), (H,H), (I,I), (J,J), (K,K), (L,L), (M,M), (N,N), (O,O), (P,P), (Q,Q), (R,R), (S,S), (T,T), (U,U), (V,V), (W,W), (X,X), (Y,Y), (Z,Z))
+List((A,A), (B,B), (C,C), (D,D), (E,E), (F,F), (G,G), (H,H), (I,I), (J,J), (K,K), (L,L), (M,M), (N,N), (O,O), (P,P), (Q,Q), (R,R), (S,S), (T,T), (U,U), (V,V), (W,W), (X,X), (Y,Y), (Z,Z))
+List((A,A), (B,B), (C,C), (D,D), (E,E), (F,F), (G,G), (H,H), (I,I), (J,J), (K,K), (L,L), (M,M), (N,N), (O,O), (P,P), (Q,Q), (R,R), (S,S), (T,T), (U,U), (V,V), (W,W), (X,X), (Y,Y), (Z,Z))
+List((A,A), (B,B), (C,C), (D,D), (E,E), (F,F), (G,G), (H,H), (I,I), (J,J), (K,K), (L,L), (M,M), (N,N), (O,O), (P,P), (Q,Q), (R,R), (S,S), (T,T), (U,U), (V,V), (W,W), (X,X), (Y,Y), (Z,Z))
+List((A,A), (B,B), (C,C), (D,D), (E,E), (F,F), (G,G), (H,H), (I,I), (J,J), (K,K), (L,L), (M,M), (N,N), (O,O), (P,P), (Q,Q), (R,R), (S,S), (T,T), (U,U), (V,V), (W,W), (X,X), (Y,Y), (Z,Z))
+List((A,A), (B,B), (C,C), (D,D), (E,E), (F,F), (G,G), (H,H), (I,I), (J,J), (K,K), (L,L), (M,M), (N,N), (O,O), (P,P), (Q,Q), (R,R), (S,S), (T,T), (U,U), (V,V), (W,W), (X,X), (Y,Y), (Z,Z))
+List((A,A), (B,B), (C,C), (D,D), (E,E), (F,F), (G,G), (H,H), (I,I), (J,J), (K,K), (L,L), (M,M), (N,N), (O,O), (P,P), (Q,Q), (R,R), (S,S), (T,T), (U,U), (V,V), (W,W), (X,X), (Y,Y), (Z,Z))
diff --git a/test/files/run/colltest1.scala b/test/files/run/colltest1.scala
index 081522d3f6..1cbd932222 100644
--- a/test/files/run/colltest1.scala
+++ b/test/files/run/colltest1.scala
@@ -1,9 +1,8 @@
import collection._
-object Test extends Application {
+object Test extends App {
- def orderedTraversableTest(empty: Traversable[Int])
- {
+ def orderedTraversableTest(empty: Traversable[Int]) {
println("new test starting with "+empty)
assert(empty.isEmpty)
val ten = empty ++ List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
@@ -25,13 +24,13 @@ object Test extends Application {
val secondFive = empty ++ (6 to 10)
assert(firstFive ++ secondFive == ten, firstFive ++ secondFive)
val odds = ten filter (_ % 2 != 0)
- val evens = ten remove (_ % 2 != 0)
+ val evens = ten filterNot (_ % 2 != 0)
assert(odds.size == evens.size)
val (o, e) = ten.partition(_ % 2 == 0)
assert(o.size == e.size)
val gs = ten groupBy (x => x / 4)
- val vs1 = (for (k <- gs.keysIterator; v <- gs(k).toIterable.iterator) yield v).toList
- val vs2 = gs.values.toList.flatten
+ val vs1 = (for (k <- gs.keysIterator; v <- gs(k).toIterable.iterator) yield v).toList.sorted
+ val vs2 = gs.values.toList.flatten.sorted
// val vs2 = gs.values.toList flatMap (xs => xs)
assert(ten.head == 1)
assert(ten.tail.head == 2)
@@ -62,7 +61,7 @@ object Test extends Application {
assert(ten.toStream == ten)
assert(ten.toString endsWith "(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)")
assert(ten.mkString("[", "; ", "]") endsWith "[1; 2; 3; 4; 5; 6; 7; 8; 9; 10]")
- }
+ }
def orderedIterableTest(empty: Iterable[Int]) {
orderedTraversableTest(empty)
@@ -80,12 +79,12 @@ object Test extends Application {
val tenPlus = ten map (_ + 1)
assert((ten zip tenPlus) forall { case (x, y) => x + 1 == y })
val dble = ten flatMap (x => List(x, x))
- assert(dble.removeDuplicates == ten)
+ assert(dble.distinct == ten)
assert(ten.length == 10)
assert(ten(0) == 1 && ten(9) == 10)
assert((ten lengthCompare 10) == 0 && (ten lengthCompare 1) > 0 && (ten lengthCompare 11) < 0)
assert((ten isDefinedAt 0) && (ten isDefinedAt 9))
- assert(!(ten isDefinedAt -1));
+ assert(!(ten isDefinedAt -1));
assert(!(ten isDefinedAt 10))
val tenten = ten zip ten
assert((tenten map (_._1)) == ten)
@@ -112,17 +111,20 @@ object Test extends Application {
assert(ten.startsWith(List(3, 4), 2))
assert(ten.endsWith(List(9, 10)))
assert(ten.endsWith(List()))
- assert(ten.indexOfSeq(List(3, 4, 5)) == 2, ten.indexOfSeq(List(3, 4, 5)))
+ assert(ten.indexOfSlice(List(3, 4, 5)) == 2, ten.indexOfSlice(List(3, 4, 5)))
+ assert(ten.lastIndexOfSlice(List(8, 9, 10)) == 7)
+ assert(ten.lastIndexOfSlice(List(1, 2, 3)) == 0)
+ assert(ten.lastIndexOfSlice(List(9, 10, 11)) == -1)
assert(ten contains 1)
assert(ten contains 10)
assert(!(ten contains 0))
assert((empty ++ (1 to 7) union empty ++ (3 to 10)) == List(1, 2, 3, 4, 5, 6, 7, 3, 4, 5, 6, 7, 8, 9, 10))
assert((ten diff ten).isEmpty)
assert((ten diff List()) == ten)
- assert((ten diff (ten filter (_ % 2 == 0))) == (ten remove (_ % 2 == 0)))
+ assert((ten diff (ten filter (_ % 2 == 0))) == (ten filterNot (_ % 2 == 0)))
assert((ten intersect ten) == ten)
assert((ten intersect List(5)) == List(5))
- assert((ten ++ ten).removeDuplicates == ten)
+ assert((ten ++ ten).distinct == ten)
assert(ten.patch(3, List(4, 5, 6, 7), 4) == ten)
assert(ten.patch(0, List(1, 2, 3), 9) == List(1, 2, 3, 10))
assert(empty.padTo(10, 7) == Array.fill(10)(7).toSeq)
@@ -170,10 +172,10 @@ object Test extends Application {
m += (("D" -> "D"), ("E" -> "E"), ("F" -> "F"))
m ++= List(("G" -> "G"), ("H" -> "H"), ("I" -> "I"))
m ++= ('J' to 'Z') map (x => (x.toString -> x.toString))
- println(m)
+ println(m.toList.sorted)
assert(!m.isEmpty)
- assert(m.keySet forall (k => (m get k) == Some(k)))
- assert(m.keySet forall (k => (m apply k) == k))
+ assert(m.keySet forall (k => (m get k) == Some(k)))
+ assert(m.keySet forall (k => (m apply k) == k))
assert(m.keySet forall (m contains))
assert(m.getOrElse("7", "@") == "@")
assert(m.keySet.size == 26)
@@ -185,8 +187,8 @@ object Test extends Application {
assert(mm.isEmpty, mm)
def m3 = empty ++ m1
assert(m1 == m3)
- println(m3)
- val m4 = m3.remove { case (k, v) => k != "A" }
+ println(m3.toList.sorted)
+ val m4 = m3 filterNot { case (k, v) => k != "A" }
assert(m4.size == 1, m4)
}
diff --git a/test/files/run/comparable-comparator.scala b/test/files/run/comparable-comparator.scala
new file mode 100644
index 0000000000..ac943c63bb
--- /dev/null
+++ b/test/files/run/comparable-comparator.scala
@@ -0,0 +1,28 @@
+
+object Test {
+ import java.util.Comparator
+
+ class C1(val s: String) extends Comparable[C1] {
+ def compareTo(other: C1) = s compareTo other.s
+ override def toString = s
+ }
+ class C2(val s: String) {
+ def compareTo(other: C2) = s compareTo other.s
+ override def toString = s
+ }
+
+ implicit val cmp: Comparator[C2] = new Comparator[C2] {
+ def compare(p1: C2, p2: C2) = p2.s compareTo p1.s
+ }
+
+ val strs = "zip foo bar baz aggle bing bong" split ' ' toList
+ val c1s = strs map (x => new C1(x))
+ val c2s = strs map (x => new C2(x))
+
+ val sorted1 = c1s.sorted map (_.s)
+ val sorted2 = c2s.sorted map (_.s)
+
+ def main(args: Array[String]): Unit = {
+ assert(sorted1 == sorted2.reverse)
+ }
+}
diff --git a/test/files/run/complicatedmatch.scala b/test/files/run/complicatedmatch.scala
index c837c328b3..681029aa13 100644
--- a/test/files/run/complicatedmatch.scala
+++ b/test/files/run/complicatedmatch.scala
@@ -6,7 +6,7 @@ object Even{
def unapply(x : Int) = if (x % 2 == 0) Some(x / 2) else None;
}
-object Test extends Application{
+object Test extends App{
val LongWord = "supercalifragilisticexpialadocious";
def foo(x : Int, y : String) : Int = (x, y) match {
diff --git a/test/files/run/concat-two-strings.scala b/test/files/run/concat-two-strings.scala
new file mode 100644
index 0000000000..ad796fe0ee
--- /dev/null
+++ b/test/files/run/concat-two-strings.scala
@@ -0,0 +1,15 @@
+/** This doesn't test that the optimization is working, only that
+ * nothing is exploding.
+ */
+object Test {
+ def f1(x: AnyRef) = "" + x
+ def f2(x: Int) = "" + x
+ def f3(x: Array[Char]) = "" + x
+ def f4(x: List[Int]) = "" + x
+ def f5(x: Any) = "" + x
+ def f6(x: AnyVal) = "" + x
+
+ def main(args: Array[String]): Unit = {
+ List(f1("a"), f2(5), f3(null), f3(Array('a')), f4(List(1)), f5(null), f6(55d)) mkString ""
+ }
+}
diff --git a/test/files/run/concurrent-stream.check b/test/files/run/concurrent-stream.check
new file mode 100644
index 0000000000..d4adf84490
--- /dev/null
+++ b/test/files/run/concurrent-stream.check
@@ -0,0 +1,3 @@
+Testing standard cons.
+Evaluation 0: List(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
+Evaluation 1: List(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
diff --git a/test/files/run/concurrent-stream.scala b/test/files/run/concurrent-stream.scala
new file mode 100644
index 0000000000..42c695964e
--- /dev/null
+++ b/test/files/run/concurrent-stream.scala
@@ -0,0 +1,36 @@
+// test concurrent calls to Stream.tail
+object Test {
+
+def slowRange(from: Int, until: Int, cons: (Int, => Stream[Int]) => Stream[Int]): Stream[Int] = {
+ var current = from
+ def next: Stream[Int] = {
+ Thread.sleep(100)
+ if (current >= until) Stream.empty
+ else {
+ val stream = cons(current, next)
+ current += 1
+ stream
+ }
+ }
+ next
+}
+
+def testCons(cons: (Int, => Stream[Int]) => Stream[Int]): Unit = {
+ import scala.actors.Actor._
+
+ val stream = slowRange(0, 10, cons)
+ val main = self
+ actor { main ! stream.toList }
+ actor { main ! stream.toList }
+ val eval0 = receive { case list: List[Int] => list }
+ val eval1 = receive { case list: List[Int] => list }
+ println("Evaluation 0: " + eval0)
+ println("Evaluation 1: " + eval1)
+}
+
+ def main(args: Array[String]) {
+ println("Testing standard cons.")
+ testCons(Stream.cons.apply(_, _))
+ }
+}
+
diff --git a/test/files/run/constrained-types.check b/test/files/run/constrained-types.check
index f18ff6e3c9..ac8817cb08 100644
--- a/test/files/run/constrained-types.check
+++ b/test/files/run/constrained-types.check
@@ -1,102 +1,110 @@
-class Annot(obj: Any) extends Annotation with TypeConstraint
+Type in expressions to have them evaluated.
+Type :help for more information.
+
+scala>
+
+scala>
+
+scala> class Annot(obj: Any) extends annotation.Annotation with annotation.TypeConstraint
defined class Annot
------
-class A {
+scala>
+
+scala> class A {
val x = "hello"
val y: Int @Annot(x) = 10
override def toString = "an A"
}
defined class A
------
-val a = new A
+scala>
+
+scala> val a = new A
a: A = an A
------
-val y = a.y // should rewrite "this.x" to "a.x"
+scala> val y = a.y // should rewrite "this.x" to "a.x"
y: Int @Annot(a.x) = 10
------
-var a2 = new A
+scala> var a2 = new A
a2: A = an A
------
-val y2 = a2.y // should drop the annotation
+scala> val y2 = a2.y // should drop the annotation
y2: Int = 10
------
-object Stuff {
+scala>
+
+scala> object Stuff {
val x = "hello"
val y : Int @Annot(x) = 10
}
defined module Stuff
------
-val y = Stuff.y // should rewrite the annotation
+scala>
+
+scala> val y = Stuff.y // should rewrite the annotation
y: Int @Annot(Stuff.x) = 10
------
-class B {
+scala>
+
+scala> class B {
val y: Int @Annot(Stuff.x) = 10
override def toString = "a B"
}
defined class B
------
-val b = new B
+scala>
+
+scala> val b = new B
b: B = a B
------
-val y = b.y // should keep the annotation
+scala> val y = b.y // should keep the annotation
y: Int @Annot(Stuff.x) = 10
------
-def m(x: String): String @Annot(x) = x // m should be annotated with a debruijn
-m: (x$0:String)String @Annot(x)
+scala> def m(x: String): String @Annot(x) = x
+m: (x: String)String @Annot(x)
------
-val three = "three"
-three: java.lang.String = three
+scala>
------
-val three2 = m(three:three.type) // should change x to three
+scala> val three = "three"
+three: String = three
+
+scala> val three2 = m(three:three.type) // should change x to three
three2: String @Annot(three) = three
------
-var four = "four"
-four: java.lang.String = four
+scala> var four = "four"
+four: String = four
------
-val four2 = m(four) // should have an existential bound
-four2: java.lang.String @Annot(x) forSome { val x: java.lang.String } = four
+scala> val four2 = m(four) // should have an existential bound
+four2: String @Annot(x) forSome { val x: String } = four
------
-val four3 = four2 // should have the same type as four2
-four3: java.lang.String @Annot(x) forSome { val x: java.lang.String } = four
+scala> val four3 = four2 // should have the same type as four2
+four3: String @Annot(x) forSome { val x: String } = four
------
-val stuff = m("stuff") // should not crash
+scala> val stuff = m("stuff") // should not crash
stuff: String @Annot("stuff") = stuff
------
-class peer extends Annotation // should not crash
+scala>
+
+scala> class peer extends annotation.Annotation // should not crash
defined class peer
------
-class NPE[T <: NPE[T] @peer] // should not crash
+scala>
+
+scala> class NPE[T <: NPE[T] @peer] // should not crash
defined class NPE
------
-def m = {
+scala>
+
+scala> def m = {
val x = "three"
val y : String @Annot(x) = x
y
-} // x should be existentially bound
-m: java.lang.String @Annot(x) forSome { val x: java.lang.String }
+} // x should not escape the local scope with a narrow type
+m: String @Annot(x) forSome { val x: String }
------
-def n(y: String) = {
+scala>
+
+scala> def n(y: String) = {
def m(x: String) : String @Annot(x) = {
(if (x == "")
m("default")
@@ -105,32 +113,42 @@ def n(y: String) = {
}
m("stuff".stripMargin)
} // x should be existentially bound
-n: (y: String)java.lang.String @Annot(x) forSome { val x: String }
+n: (y: String)String @Annot(x) forSome { val x: String }
+
+scala>
------
-class rep extends Annotation
+scala> class rep extends annotation.Annotation { }
defined class rep
------
-object A { val x = "hello" : String @ rep }
+scala>
+
+scala> object A { val x = "hello" : String @ rep }
defined module A
+warning: previously defined class A is not a companion to object A.
+Companions must be defined together; you may wish to use :paste mode for this.
------
-val y = a.x // should drop the annotation
-y: java.lang.String = hello
+scala>
------
-val x = 3 : Int @Annot(e+f+g+h) //should have a graceful error message
-<console>:5: error: not found: value e
- val x = 3 : Int @Annot(e+f+g+h) //should have a graceful error message
+scala> val y = a.x // should drop the annotation
+y: String = hello
+
+scala>
+
+scala> val x = 3 : Int @Annot(e+f+g+h) // should have a graceful error message
+<console>:8: error: not found: value e
+ val x = 3 : Int @Annot(e+f+g+h) // should have a graceful error message
^
------
-class Where(condition: Boolean) extends Annotation
+scala>
+
+scala> class Where(condition: Boolean) extends annotation.Annotation
defined class Where
------
-val x : Int @Where(self > 0 && self < 100) = 3
+scala>
+
+scala> val x : Int @Where(self > 0 && self < 100) = 3
x: Int @Where(self.>(0).&&(self.<(100))) = 3
------
+scala>
+
+scala>
diff --git a/test/files/run/constrained-types.scala b/test/files/run/constrained-types.scala
index 59fd0b1b8c..38ae076c06 100644
--- a/test/files/run/constrained-types.scala
+++ b/test/files/run/constrained-types.scala
@@ -3,103 +3,88 @@
* of DeBruijn's . It runs the test using the interpreter so that
* the resulting annotated types can be printed out.
*/
-import scala.tools.nsc._
-import java.io._
-import scala.Console
+import scala.tools.nsc.Settings
+import scala.tools.partest.ReplTest
-object Test {
+object Test extends ReplTest {
+ def code = """
- val testCode = List(
- "class Annot(obj: Any) extends Annotation with TypeConstraint",
+class Annot(obj: Any) extends annotation.Annotation with annotation.TypeConstraint
- """class A {
- | val x = "hello"
- | val y: Int @Annot(x) = 10
- | override def toString = "an A"
- |} """,
+class A {
+ val x = "hello"
+ val y: Int @Annot(x) = 10
+ override def toString = "an A"
+}
+val a = new A
+val y = a.y // should rewrite "this.x" to "a.x"
+var a2 = new A
+val y2 = a2.y // should drop the annotation
+object Stuff {
+ val x = "hello"
+ val y : Int @Annot(x) = 10
+}
- "val a = new A",
-
- """val y = a.y // should rewrite "this.x" to "a.x" """,
-
-
- "var a2 = new A",
- "val y2 = a2.y // should drop the annotation",
-
-
- """object Stuff {
- | val x = "hello"
- | val y : Int @Annot(x) = 10
- |}""",
-
- "val y = Stuff.y // should rewrite the annotation",
-
- """class B {
- | val y: Int @Annot(Stuff.x) = 10
- | override def toString = "a B"
- |}""",
-
- "val b = new B",
- "val y = b.y // should keep the annotation",
-
-
- "def m(x: String): String @Annot(x) = x // m should be annotated with a debruijn",
- "val three = \"three\"",
- "val three2 = m(three:three.type) // should change x to three",
- "var four = \"four\"",
- "val four2 = m(four) // should have an existential bound",
- "val four3 = four2 // should have the same type as four2",
+val y = Stuff.y // should rewrite the annotation
- """val stuff = m("stuff") // should not crash""",
+class B {
+ val y: Int @Annot(Stuff.x) = 10
+ override def toString = "a B"
+}
- """class peer extends Annotation // should not crash""", // reported by Manfred Stock
- """class NPE[T <: NPE[T] @peer] // should not crash""", // reported by Manfred Stock
+val b = new B
+val y = b.y // should keep the annotation
+def m(x: String): String @Annot(x) = x
+
+val three = "three"
+val three2 = m(three:three.type) // should change x to three
+var four = "four"
+val four2 = m(four) // should have an existential bound
+val four3 = four2 // should have the same type as four2
+val stuff = m("stuff") // should not crash
+
+class peer extends annotation.Annotation // should not crash
+
+class NPE[T <: NPE[T] @peer] // should not crash
+
+def m = {
+ val x = "three"
+ val y : String @Annot(x) = x
+ y
+} // x should not escape the local scope with a narrow type
+
+def n(y: String) = {
+ def m(x: String) : String @Annot(x) = {
+ (if (x == "")
+ m("default")
+ else
+ x)
+ }
+ m("stuff".stripMargin)
+} // x should be existentially bound
- """def m = {
- | val x = "three"
- | val y : String @Annot(x) = x
- | y
- |} // x should be existentially bound""",
+class rep extends annotation.Annotation { }
- """def n(y: String) = {
- | def m(x: String) : String @Annot(x) = {
- | (if (x == "")
- | m("default")
- | else
- | x)
- | }
- | m("stuff".stripMargin)
- |} // x should be existentially bound""",
+object A { val x = "hello" : String @ rep }
- "class rep extends Annotation",
- """object A { val x = "hello" : String @ rep }""",
- "val y = a.x // should drop the annotation",
+val y = a.x // should drop the annotation
- "val x = 3 : Int @Annot(e+f+g+h) //should have a graceful error message",
+val x = 3 : Int @Annot(e+f+g+h) // should have a graceful error message
- "class Where(condition: Boolean) extends Annotation",
- "val x : Int @Where(self > 0 && self < 100) = 3"
- ).map(_.stripMargin)
+class Where(condition: Boolean) extends annotation.Annotation
+val x : Int @Where(self > 0 && self < 100) = 3
+"""
- def main(args: Array[String]) {
- val settings = new Settings
- settings.Xexperimental.value = true
- settings.selfInAnnots.value = true
- settings.deprecation.value = true
+ override def transformSettings(s: Settings): Settings = {
+ s.Xexperimental.value = true
+ s.selfInAnnots.value = true
+ s.deprecation.value = true
// when running that compiler, give it a scala-library to the classpath
- settings.classpath.value = System.getProperty("java.class.path")
-
- val interp = new Interpreter(settings)
-
- for (cmd <- testCode) {
- println(cmd)
- interp.interpret(cmd)
- println()
- println("-----")
- }
+ s.classpath.value = sys.props("java.class.path")
+ s
}
}
diff --git a/test/files/run/contrib674.scala b/test/files/run/contrib674.scala
index 5e43560b79..f6b46d13c6 100644
--- a/test/files/run/contrib674.scala
+++ b/test/files/run/contrib674.scala
@@ -1,6 +1,6 @@
// causes VerifyError with scala-2.5.1
-object Test extends Application {
+object Test extends App {
def bad() {
try {
1
diff --git a/test/files/run/ctor-order.scala b/test/files/run/ctor-order.scala
index 44e981e413..a223ff77e8 100644
--- a/test/files/run/ctor-order.scala
+++ b/test/files/run/ctor-order.scala
@@ -8,7 +8,7 @@ class Outer {
class X extends {
/* The constructor of X should set this.$outer to the outer instance
- * *before* calling the super constructors. This is tested by
+ * *before* calling the super constructors. This is tested by
* mixin M1, which tries to access global from the enclosing class.
*/
val outer = Outer.this
@@ -21,7 +21,7 @@ class Outer {
}
-object Test extends AnyRef with Application {
+object Test extends AnyRef with App {
val o = new Outer;
new o.X;
diff --git a/test/files/run/distinct.check b/test/files/run/distinct.check
new file mode 100644
index 0000000000..b0883f382e
--- /dev/null
+++ b/test/files/run/distinct.check
@@ -0,0 +1 @@
+abcdefghijklmnopqrstuvwxyz
diff --git a/test/files/run/distinct.scala b/test/files/run/distinct.scala
new file mode 100644
index 0000000000..09e5a0734a
--- /dev/null
+++ b/test/files/run/distinct.scala
@@ -0,0 +1,15 @@
+/** This is a test to make sure distinct always
+ * returns the first of any duplicated element.
+ */
+object Test {
+ val alphabet = 'a' to 'z' mkString ""
+ val alphaList = 'a' to 'z' toList
+ def shuffled = util.Random.shuffle(alphaList)
+
+ def main(args: Array[String]): Unit = {
+ val longList = alphaList ++ (1 to 9 flatMap (_ => shuffled))
+ val result = longList.distinct mkString ""
+
+ println(result)
+ }
+}
diff --git a/test/files/run/duplicate-meth.check b/test/files/run/duplicate-meth.check
new file mode 100644
index 0000000000..0992502806
--- /dev/null
+++ b/test/files/run/duplicate-meth.check
@@ -0,0 +1 @@
+verified!
diff --git a/test/files/run/duplicate-meth.scala b/test/files/run/duplicate-meth.scala
new file mode 100644
index 0000000000..40c0d3d676
--- /dev/null
+++ b/test/files/run/duplicate-meth.scala
@@ -0,0 +1,23 @@
+
+trait Base {
+ private val secure_# = 10l
+}
+
+class TestUser extends Base {
+ def clsMeth(x: Int) = x
+ private def foo(x: Int) = x
+}
+
+object TestUser extends TestUser {
+ def objMeth = "a"
+
+ private def foo(x: Int) = x
+}
+
+object Test {
+ def main(args: Array[String]) {
+ TestUser.objMeth
+ // no-op, just check that it passes verification
+ println("verified!")
+ }
+}
diff --git a/test/files/run/elidable-noflags.check b/test/files/run/elidable-noflags.check
new file mode 100644
index 0000000000..23be9ab4ef
--- /dev/null
+++ b/test/files/run/elidable-noflags.check
@@ -0,0 +1,7 @@
+Good for me, I was not elided.
+Good for me, I was not elided.
+Good for me, I was not elided.
+Good for me, I was not elided.
+Good for me, I was not elided.
+Good for me, I was not elided.
+ESPECIALLY good for me, I was not elided.
diff --git a/test/files/run/elidable-noflags.scala b/test/files/run/elidable-noflags.scala
new file mode 100644
index 0000000000..5192e34096
--- /dev/null
+++ b/test/files/run/elidable-noflags.scala
@@ -0,0 +1,22 @@
+import annotation._
+import elidable._
+
+object Test {
+ @elidable(FINEST) def f1() = println("Good for me, I was not elided.")
+ @elidable(INFO) def f2() = println("Good for me, I was not elided.")
+ @elidable(SEVERE) def f3() = println("Good for me, I was not elided.")
+ @elidable(INFO) def f4() = println("Good for me, I was not elided.")
+ @elidable(100000) def f5() = println("Good for me, I was not elided.")
+ @elidable(OFF) def f6() = println("Good for me, I was not elided.")
+ @elidable(ALL) def f7() = println("ESPECIALLY good for me, I was not elided.")
+
+ def main(args: Array[String]): Unit = {
+ f1()
+ f2()
+ f3()
+ f4()
+ f5()
+ f6()
+ f7()
+ }
+}
diff --git a/test/files/run/elidable.check b/test/files/run/elidable.check
new file mode 100644
index 0000000000..4ce04f0040
--- /dev/null
+++ b/test/files/run/elidable.check
@@ -0,0 +1 @@
+Good for me, I was not elided.
diff --git a/test/files/run/elidable.flags b/test/files/run/elidable.flags
new file mode 100644
index 0000000000..93fd3d5317
--- /dev/null
+++ b/test/files/run/elidable.flags
@@ -0,0 +1 @@
+-Xelide-below 900
diff --git a/test/files/run/elidable.scala b/test/files/run/elidable.scala
new file mode 100644
index 0000000000..264efbad59
--- /dev/null
+++ b/test/files/run/elidable.scala
@@ -0,0 +1,16 @@
+import annotation._
+import elidable._
+
+object Test {
+ @elidable(FINEST) def f1() = assert(false, "Should have been elided.")
+ @elidable(INFO) def f2() = assert(false, "Should have been elided.")
+ @elidable(SEVERE) def f3() = println("Good for me, I was not elided.")
+ @elidable(INFO) def f4 = assert(false, "Should have been elided (no parens).")
+
+ def main(args: Array[String]): Unit = {
+ f1()
+ f2()
+ f3()
+ f4
+ }
+}
diff --git a/test/files/run/emptypf.check b/test/files/run/emptypf.check
new file mode 100644
index 0000000000..f6c39921bc
--- /dev/null
+++ b/test/files/run/emptypf.check
@@ -0,0 +1,3 @@
+100
+3
+false
diff --git a/test/files/run/emptypf.scala b/test/files/run/emptypf.scala
new file mode 100644
index 0000000000..8aa0906a1b
--- /dev/null
+++ b/test/files/run/emptypf.scala
@@ -0,0 +1,14 @@
+object Test {
+ val f: PartialFunction[String, Int] = {
+ PartialFunction.empty[String, Int] orElse {
+ case "abc" => 100
+ case s => s.length
+ }
+ }
+
+ def main(args: Array[String]): Unit = {
+ println(f("abc"))
+ println(f("def"))
+ println(PartialFunction.empty[String, Int] isDefinedAt "abc")
+ }
+}
diff --git a/test/files/run/enums.check b/test/files/run/enums.check
index f53aba8794..93eadae6e3 100644
--- a/test/files/run/enums.check
+++ b/test/files/run/enums.check
@@ -3,3 +3,13 @@ test Test2 was successful
test Test3 was successful
test Test4 was successful
+D1.ValueSet(North, East)
+D2.ValueSet(North, East)
+D1.ValueSet(North, East, West)
+D2.ValueSet(North, East, West)
+List(101)
+List(101)
+D1.ValueSet(North, East)
+D2.ValueSet(North, East)
+WeekDays.ValueSet(Tue, Wed, Thu, Fri)
+
diff --git a/test/files/run/enums.scala b/test/files/run/enums.scala
index fcca8d3438..9cdeed2691 100644
--- a/test/files/run/enums.scala
+++ b/test/files/run/enums.scala
@@ -29,7 +29,7 @@ object Test2 {
}
def run: Int = {
- val it = for (val s <- ThreadState.values; s.id != 0) yield s;
+ val it = for (s <- ThreadState.values; if s.id != 0) yield s;
it.toList.length
}
}
@@ -41,7 +41,7 @@ object Test3 {
}
def run: Int = {
- val it = for (val d <- Direction.values; d.toString() startsWith "N") yield d;
+ val it = for (d <- Direction.values; if d.toString() startsWith "N") yield d;
it.toList.length
}
}
@@ -65,6 +65,58 @@ object Test4 {
}
}
+object Test5 {
+
+ object D1 extends Enumeration(0) {
+ val North, South, East, West = Value;
+ }
+
+ object D2 extends Enumeration(-2) {
+ val North, South, East, West = Value;
+ }
+
+ object WeekDays extends Enumeration {
+ val Mon, Tue, Wed, Thu, Fri, Sat, Sun = Value
+ }
+
+ def run {
+ val s1 = D1.ValueSet(D1.North, D1.East)
+ val s2 = D2.North + D2.East
+ println(s1)
+ println(s2)
+ println(s1 + D1.West)
+ println(s2 + D2.West)
+ println(s1.toBitMask.map(_.toBinaryString).toList)
+ println(s2.toBitMask.map(_.toBinaryString).toList)
+ println(D1.ValueSet.fromBitMask(s1.toBitMask))
+ println(D2.ValueSet.fromBitMask(s2.toBitMask))
+ println(WeekDays.values.range(WeekDays.Tue, WeekDays.Sat))
+ }
+}
+
+object SerializationTest {
+ object Types extends Enumeration { val X, Y = Value }
+ class A extends java.io.Serializable { val types = Types.values }
+ class B extends java.io.Serializable { val types = Set(Types.X, Types.Y) }
+
+ def serialize(obj: AnyRef) = {
+ val baos = new java.io.ByteArrayOutputStream()
+ val oos = new java.io.ObjectOutputStream(baos)
+ oos.writeObject(obj)
+ oos.close()
+ val bais = new java.io.ByteArrayInputStream(baos.toByteArray)
+ val ois = new java.io.ObjectInputStream(bais)
+ val prime = ois.readObject()
+ ois.close()
+ prime
+ }
+
+ def run {
+ serialize(new B())
+ serialize(new A())
+ }
+}
+
//############################################################################
// Test code
@@ -94,6 +146,9 @@ object Test {
check_success("Test3", Test3.run, 1);
check_success("Test4", Test4.run, 0);
Console.println;
+ Test5.run;
+ Console.println;
+ SerializationTest.run;
}
}
diff --git a/test/files/run/equality.scala b/test/files/run/equality.scala
new file mode 100644
index 0000000000..68055fd012
--- /dev/null
+++ b/test/files/run/equality.scala
@@ -0,0 +1,40 @@
+// a quickly assembled test of equality. Needs work.
+object Test
+{
+ import scala.runtime.ScalaRunTime.hash
+
+ def makeFromInt(x: Int) = List(
+ x.toByte, x.toShort, x.toInt, x.toLong, x.toFloat, x.toDouble, BigInt(x), BigDecimal(x)
+ ) ::: (
+ if (x < 0) Nil else List(x.toChar)
+ )
+ def makeFromDouble(x: Double) = List(
+ x.toShort, x.toInt, x.toLong, x.toFloat, x.toDouble, BigInt(x.toInt), BigDecimal(x)
+ )
+
+ def main(args: Array[String]): Unit = {
+ var xs = makeFromInt(5)
+ for (x <- xs ; y <- xs) {
+ assert(x == y, x + " == " + y)
+ assert(hash(x) == hash(y), "hash(%s) == hash(%s)".format(x, y))
+ }
+
+ xs = makeFromInt(-5)
+ for (x <- xs ; y <- xs) {
+ assert(x == y, x + " == " + y)
+ assert(hash(x) == hash(y), "hash(%s) == hash(%s)".format(x, y))
+ }
+
+ xs = makeFromDouble(500.0)
+ for (x <- xs ; y <- xs) {
+ assert(x == y, x + " == " + y)
+ assert(hash(x) == hash(y), "hash(%s) == hash(%s)".format(x, y))
+ }
+
+ // negatives
+ val bigLong = new java.util.concurrent.atomic.AtomicLong(Long.MaxValue)
+ assert(-1 != bigLong && bigLong != -1) // bigLong.intValue() == -1
+ assert(BigDecimal(1.1) != 1L)
+ assert(1L != BigDecimal(1.1))
+ }
+}
diff --git a/test/files/run/eta-expand-star.check b/test/files/run/eta-expand-star.check
new file mode 100644
index 0000000000..ce01362503
--- /dev/null
+++ b/test/files/run/eta-expand-star.check
@@ -0,0 +1 @@
+hello
diff --git a/test/files/run/eta-expand-star.scala b/test/files/run/eta-expand-star.scala
new file mode 100644
index 0000000000..7717c4bc91
--- /dev/null
+++ b/test/files/run/eta-expand-star.scala
@@ -0,0 +1,8 @@
+object Test {
+ def f[T](xs: T*): T = xs.head
+ def g[T] = f[T] _
+
+ def main(args: Array[String]): Unit = {
+ println(g("hello" +: args))
+ }
+}
diff --git a/test/files/run/eta-expand-star2.check b/test/files/run/eta-expand-star2.check
new file mode 100644
index 0000000000..ce01362503
--- /dev/null
+++ b/test/files/run/eta-expand-star2.check
@@ -0,0 +1 @@
+hello
diff --git a/test/files/run/eta-expand-star2.flags b/test/files/run/eta-expand-star2.flags
new file mode 100644
index 0000000000..0402fe55a4
--- /dev/null
+++ b/test/files/run/eta-expand-star2.flags
@@ -0,0 +1 @@
+-Yeta-expand-keeps-star \ No newline at end of file
diff --git a/test/files/run/eta-expand-star2.scala b/test/files/run/eta-expand-star2.scala
new file mode 100644
index 0000000000..eb650788d0
--- /dev/null
+++ b/test/files/run/eta-expand-star2.scala
@@ -0,0 +1,8 @@
+object Test {
+ def f[T](xs: T*): T = xs.head
+ def g[T] = f[T] _
+
+ def main(args: Array[String]): Unit = {
+ println(g("hello"))
+ }
+}
diff --git a/test/pending/run/exc.scala b/test/files/run/exc.scala
index 26f80412c0..6457af1e14 100644
--- a/test/pending/run/exc.scala
+++ b/test/files/run/exc.scala
@@ -1,4 +1,4 @@
-object exc1 extends Application {
+object Test extends App {
def foo() = {
while (true) {
try {
diff --git a/test/files/run/exc1.scala b/test/files/run/exc1.scala
new file mode 100644
index 0000000000..9008f9d149
--- /dev/null
+++ b/test/files/run/exc1.scala
@@ -0,0 +1,10 @@
+object Test extends App {
+ def foo(): Unit = {
+ while (true) {
+ try {
+ } catch {
+ case ex: Exception =>
+ }
+ }
+ }
+}
diff --git a/test/pending/run/exc2.scala b/test/files/run/exc2.scala
index 8adf9b4a37..bb41f5286c 100644
--- a/test/pending/run/exc2.scala
+++ b/test/files/run/exc2.scala
@@ -1,4 +1,4 @@
-object exc2 extends Application {
+object Test extends App {
def foo() = {
while (true) {
try {
diff --git a/test/files/run/exceptions-2.scala b/test/files/run/exceptions-2.scala
index 820ab3634d..d0312a49b2 100644
--- a/test/files/run/exceptions-2.scala
+++ b/test/files/run/exceptions-2.scala
@@ -68,7 +68,7 @@ object Test {
Console.println("Outermost finally");
}
- def mixed =
+ def mixed =
try {
if (10 > 0)
throw Leaf(10);
@@ -107,7 +107,7 @@ object Test {
case Leaf(a) => Console.println(a);
}
} catch {
- case npe: NullPointerException =>
+ case npe: NullPointerException =>
Console.println("Caught an NPE");
}
@@ -141,14 +141,14 @@ object Test {
}
}
- def valInFinally: Unit =
- try {
+ def valInFinally: Unit =
+ try {
} finally {
val fin = "Abc";
Console.println(fin);
};
- def tryAndValInFinally: Unit =
+ def tryAndValInFinally: Unit =
try {
} finally {
val fin = "Abc";
@@ -157,51 +157,51 @@ object Test {
} catch { case _ => () }
};
- def returnInBody: Unit = try {
+ def returnInBody: Unit = try {
try {
Console.println("Normal execution...");
- return
+ return
Console.println("non reachable code");
} finally {
Console.println("inner finally");
}
- } finally {
+ } finally {
Console.println("Outer finally");
}
- def returnInBodySynch: Unit = try {
+ def returnInBodySynch: Unit = try {
synchronized {
try {
Console.println("Synchronized normal execution...");
- return
+ return
Console.println("non reachable code");
} finally {
Console.println("inner finally");
}
}
- } finally {
+ } finally {
Console.println("Outer finally");
}
- def returnInBodyAndInFinally: Unit = try {
+ def returnInBodyAndInFinally: Unit = try {
try {
Console.println("Normal execution...");
- return
+ return
Console.println("non reachable code");
} finally {
Console.println("inner finally");
return
}
- } finally {
+ } finally {
Console.println("Outer finally");
return
}
- def returnInBodyAndInFinally2: Unit = try {
+ def returnInBodyAndInFinally2: Unit = try {
try {
Console.println("Normal execution...");
- return
+ return
Console.println("non reachable code");
} finally {
try {
@@ -211,7 +211,7 @@ object Test {
Console.println("finally inside finally");
}
}
- } finally {
+ } finally {
Console.println("Outer finally");
return
}
@@ -253,7 +253,7 @@ object Test {
}
- def returnWithFinallyClean: Int = try {
+ def returnWithFinallyClean: Int = try {
try {
Console.println("Normal execution...");
return 10
@@ -262,11 +262,28 @@ object Test {
} finally {
Console.println("inner finally");
}
- } finally {
+ } finally {
Console.println("Outer finally");
try { 1 } catch { case e: java.io.IOException => () }
}
+ /** Test that empty finally clauses containing while are correctly emitted.
+ */
+ class Issue {
+ var b = 0
+ try {
+ // println("abc")
+ } finally {
+ while (b == -1) {b = 0}
+ }
+ }
+
+ /* Tests that class Issue passes verification. */
+ def whileInFinally = {
+ new Issue
+ }
+
+
def main(args: Array[String]): Unit = {
Console.println("nested1: ");
@@ -277,7 +294,7 @@ object Test {
Console.println("mixed: ");
execute(mixed);
-
+
Console.println("withValue1:");
execute(withValue1);
@@ -305,7 +322,7 @@ object Test {
Console.println("NoExcep.method3:");
execute(NoExcep.method3);
-
+
Console.println("NoExcep.method4:");
execute(NoExcep.method4);
@@ -326,5 +343,7 @@ object Test {
Console.println("Return with finally clause that cleans the stack")
returnWithFinallyClean
+
+ whileInFinally
}
}
diff --git a/test/files/run/exceptions-nest.check b/test/files/run/exceptions-nest.check
new file mode 100644
index 0000000000..48725e4d27
--- /dev/null
+++ b/test/files/run/exceptions-nest.check
@@ -0,0 +1,13 @@
+2
+23
+2
+5
+2
+4
+OK
+4
+OK
+10
+1
+()
+10
diff --git a/test/files/run/exceptions-nest.scala b/test/files/run/exceptions-nest.scala
new file mode 100644
index 0000000000..841e6b1c67
--- /dev/null
+++ b/test/files/run/exceptions-nest.scala
@@ -0,0 +1,157 @@
+object Test extends App {
+
+ println(test1)
+ println(test2)
+ println(test3)
+ println(test4)
+ println(test5)
+ try { println(test6) } catch { case _ => println("OK") }
+ println(test7)
+ try { println(test8) } catch { case _ => println("OK") }
+ println(test9)
+ println(test10)
+ println(test11)
+ println(test12)
+
+ def test1 = {
+ var x = 1
+ try {
+ x = 2
+ } catch {
+ case _: NullPointerException => x = 3
+ case _ => x = 4
+ }
+ x
+ }
+
+ def test2 = {
+ var x = 1
+ try {
+ x = 2
+ try {
+ x = 21
+ } catch {
+ case _ => x = 22
+ }
+ x = 23
+ } catch {
+ case _: NullPointerException => x = 3
+ case _ => x = 4
+ }
+ x
+ }
+
+ def test3 = {
+ var x = 1
+ try {
+ try{x = 2} catch { case _ => x = 4 }
+ } catch {
+ case _: NullPointerException => x = 3
+ case _ => x = 4
+ }
+ x
+ }
+
+ def test4 = {
+ var x = 1
+ try {
+ x = 2
+ } catch {
+ case _: NullPointerException => x = 3
+ case _ => x = 4
+ }
+ try {
+ x = 5
+ } catch {
+ case _: NullPointerException => x = 6
+ }
+ x
+ }
+
+ def test5 = {
+ var x = 1
+ try {
+ x = 2
+ } catch {
+ case _: NullPointerException => try { x = 3 } catch { case f => throw f }
+ case _ => x = 4; try { x = 41 } catch { case _: Exception => x = 42 }; x = 43
+ }
+ x
+ }
+
+ def test6: Int = {
+ var x = 1
+ try {
+ x = 2
+ (null: String).toString
+ } catch {
+ case e: NullPointerException =>
+ throw e
+ case _ =>
+ x = 3
+ return 1000
+ } finally {
+ x = 4
+ println(x)
+ }
+ x
+ }
+
+ def test7 = {
+ var x = 1
+ try {
+ x = 2
+ } finally {
+ try {
+ x = 4
+ } catch {
+ case _ => x = 5
+ }
+ }
+ x
+ }
+
+ def test8 = {
+ var x = 1
+ try {
+ throw new NullPointerException
+ } catch {
+ case e => throw e
+ }
+ x
+ }
+
+ def test9 = {
+ try { "" match {
+ case s: String => 10
+ }} catch { case _ => 20 }
+ }
+
+ var x10 = 1
+ def test10: Int = {
+ try { 1 }
+ catch { case e if (x10 == 1) => 1 }
+ }
+
+ def test11 {
+ try { () }
+ catch { case e => () }
+ }
+
+ class E1 extends Exception
+ class E2 extends Exception
+ class E3 extends Exception
+
+ def test12_impl(op: => Int) = try {
+ op
+ } catch {
+ case e: E1 => 2
+ case e: E2 => 3
+ case e: E3 => 4
+ }
+ def test12 =
+ test12_impl(1) +
+ test12_impl(throw new E1) +
+ test12_impl(throw new E2) +
+ test12_impl(throw new E3)
+}
diff --git a/test/files/run/existentials.scala b/test/files/run/existentials.scala
index 471f8fe779..3977d47417 100644
--- a/test/files/run/existentials.scala
+++ b/test/files/run/existentials.scala
@@ -2,7 +2,7 @@ class Foo {
class Line {
case class Cell[T](var x: T)
def f[T](x: Any): Cell[t1] forSome { type t1 } = x match { case y: Cell[t] => y }
-
+
var x: Cell[T] forSome { type T } = new Cell(1)
println({ x = new Cell("abc"); x })
}
@@ -12,7 +12,7 @@ class FooW {
class Line {
case class Cell[T](var x: T)
def f[T](x: Any): Cell[ _ ] = x match { case y: Cell[t] => y }
-
+
var x: Cell[_] = new Cell(1)
println({ x = new Cell("abc"); x })
}
@@ -50,7 +50,7 @@ object Bug1189 {
println(f(x))
}
-object Test extends Application {
+object Test extends App {
val x = { class I; class J; (new C(new I), new C(new J)) }
val y: (C[X], C[Y]) forSome { type X; type Y } = x
@@ -69,14 +69,6 @@ object Test extends Application {
case _ =>
}
- var ex: Counter[T] forSome { type T } = _
- ex = ci
- ex = cf
-
- var exW: Counter[_] = _
- ex = ci
- ex = cf
-
val ci = new Counter[Int] {
def newCounter = 0
def get(i: Int) = i
@@ -91,6 +83,14 @@ object Test extends Application {
def name = "Float"
}
+ var ex: Counter[T] forSome { type T } = _
+ ex = ci
+ ex = cf
+
+ var exW: Counter[_] = _
+ ex = ci
+ ex = cf
+
foo(ci)
foo(cf)
fooW(ci)
diff --git a/test/files/run/exoticnames.scala b/test/files/run/exoticnames.scala
index 9250d62dd0..fa0e5e6ec5 100644
--- a/test/files/run/exoticnames.scala
+++ b/test/files/run/exoticnames.scala
@@ -1,5 +1,5 @@
// this is a run-test because the compiler should emit bytecode that'll pass the JVM's verifier
-object Test extends Application {
+object Test extends App {
def `(` = error("bla")
def `.` = error("bla")
def `)` = error("bla")
diff --git a/test/files/run/finally.check b/test/files/run/finally.check
index 4e66e2b5cb..901a797426 100644
--- a/test/files/run/finally.check
+++ b/test/files/run/finally.check
@@ -1,3 +1,35 @@
+Running throwCatchFinally
hi
In Finally
java.lang.RuntimeException: ouch
+----------------------------------------
+Running retCatch
+java.lang.Exception
+in finally
+----------------------------------------
+Running throwCatch
+java.lang.Exception
+in finally
+COUGHT: java.lang.Exception
+----------------------------------------
+Running retBody
+in finally
+----------------------------------------
+Running throwBody
+java.lang.Exception
+in finally
+----------------------------------------
+Running retFinally
+body
+in finally 1
+in finally 2
+----------------------------------------
+Running throwFinally
+body
+in finally
+java.lang.Exception
+----------------------------------------
+Running nestedFinalies
+in finally 1
+in finally 2
+----------------------------------------
diff --git a/test/files/run/finally.scala b/test/files/run/finally.scala
index 6d8d360d30..635123cc4d 100644
--- a/test/files/run/finally.scala
+++ b/test/files/run/finally.scala
@@ -1,12 +1,23 @@
-// test that finally is not covered by any exception handlers.
-object Test extends Application {
+object Test extends App {
+
+
+ // test that finally is not covered by any exception handlers.
+ def throwCatchFinally {
+ try {
+ bar
+ } catch {
+ case e => println(e)
+ }
+ }
+
+ // test that finally is not covered by any exception handlers.
def bar {
try {
println("hi")
}
catch {
- case e => println("GOT HERE")
+ case e => println("SHOULD NOT GET HERE")
}
finally {
println("In Finally")
@@ -14,9 +25,103 @@ object Test extends Application {
}
}
- try {
- bar
- } catch {
- case e => println(e)
+ // return in catch (finally is executed)
+ def retCatch {
+ try {
+ throw new Exception
+ } catch {
+ case e =>
+ println(e);
+ return
+ } finally println("in finally")
+ }
+
+ // throw in catch (finally is executed, exception propagated)
+ def throwCatch {
+ try {
+ throw new Exception
+ } catch {
+ case e =>
+ println(e);
+ throw e
+ } finally println("in finally")
+ }
+
+ // return inside body (finally is executed)
+ def retBody {
+ try {
+ return
+ } catch {
+ case e =>
+ println(e);
+ throw e
+ } finally println("in finally")
}
+
+ // throw inside body (finally and catch are executed)
+ def throwBody {
+ try {
+ throw new Exception
+ } catch {
+ case e =>
+ println(e);
+ } finally println("in finally")
+ }
+
+ // return inside finally (each finally is executed once)
+ def retFinally {
+ try {
+ try println("body")
+ finally {
+ println("in finally 1")
+ return
+ }
+ } finally println("in finally 2")
+ }
+
+
+ // throw inside finally (finally is executed once, exception is propagated)
+ def throwFinally {
+ try {
+ try println("body")
+ finally {
+ println("in finally")
+ throw new Exception
+ }
+ } catch {
+ case e => println(e)
+ }
+ }
+
+ // nested finallies with return value
+ def nestedFinalies: Int =
+ try {
+ try {
+ return 10
+ } finally {
+ try { () } catch { case _ => () }
+ println("in finally 1")
+ }
+ } finally {
+ println("in finally 2")
+ }
+
+ def test[A](m: => A, name: String) {
+ println("Running %s".format(name))
+ try {
+ m
+ } catch {
+ case e => println("COUGHT: " + e)
+ }
+ println("-" * 40)
+ }
+
+ test(throwCatchFinally, "throwCatchFinally")
+ test(retCatch, "retCatch")
+ test(throwCatch, "throwCatch")
+ test(retBody, "retBody")
+ test(throwBody, "throwBody")
+ test(retFinally, "retFinally")
+ test(throwFinally, "throwFinally")
+ test(nestedFinalies, "nestedFinalies")
}
diff --git a/test/files/run/flat-flat-flat.scala b/test/files/run/flat-flat-flat.scala
new file mode 100644
index 0000000000..d57696b3a3
--- /dev/null
+++ b/test/files/run/flat-flat-flat.scala
@@ -0,0 +1,11 @@
+object Test {
+ def f1 = List(Iterator(Some(1), None, Some(2)), Iterator(Some(3), None))
+ def f2 = Iterator(List(Some(1), None, Some(2)), List(Some(3), None), Nil)
+ def f3 = List(Some(Iterator(1)), None, Some(Iterator(2, 3)))
+
+ def main(args: Array[String]): Unit = {
+ assert(f1.flatten.flatten.toList == List(1, 2, 3))
+ assert(f2.flatten.flatten.toList == List(1, 2, 3))
+ assert(f3.flatten.flatten.toList == List(1, 2, 3))
+ }
+}
diff --git a/test/files/run/fors.scala b/test/files/run/fors.scala
index 868a05369b..54afdc710b 100644
--- a/test/files/run/fors.scala
+++ b/test/files/run/fors.scala
@@ -4,7 +4,7 @@
//############################################################################
-object Test extends Application {
+object Test extends App {
val xs = List(1, 2, 3)
val ys = List('a, 'b, 'c)
@@ -24,34 +24,34 @@ object Test extends Application {
println("\ntestOld")
// lists
- for (val x <- xs) print(x + " "); println
- for (val x <- xs;
- x % 2 == 0) print(x + " "); println
- for {val x <- xs
- x % 2 == 0} print(x + " "); println
+ for (x <- xs) print(x + " "); println
+ for (x <- xs;
+ if x % 2 == 0) print(x + " "); println
+ for {x <- xs
+ if x % 2 == 0} print(x + " "); println
var n = 0
- for (val _ <- xs) n += 1; println(n)
- for (val (x, y) <- xs zip ys) print(x + " "); println
- for (val p @ (x, y) <- xs zip ys) print(p._1 + " "); println
+ for (_ <- xs) n += 1; println(n)
+ for ((x, y) <- xs zip ys) print(x + " "); println
+ for (p @ (x, y) <- xs zip ys) print(p._1 + " "); println
// iterators
- for (val x <- it) print(x + " "); println
- for (val x <- it;
- x % 2 == 0) print(x + " "); println
- for {val x <- it
- x % 2 == 0} print(x + " "); println
+ for (x <- it) print(x + " "); println
+ for (x <- it;
+ if x % 2 == 0) print(x + " "); println
+ for {x <- it
+ if x % 2 == 0} print(x + " "); println
// arrays
- for (val x <- ar) print(x + " "); println
- for (val x <- ar;
- x.toInt > 97) print(x + " "); println
- for {val x <- ar
- x.toInt > 97} print(x + " "); println
+ for (x <- ar) print(x + " "); println
+ for (x <- ar;
+ if x.toInt > 97) print(x + " "); println
+ for {x <- ar
+ if x.toInt > 97} print(x + " "); println
// sequences
- for (val x <- xml.child) println(x)
- for (val x <- xml.child;
- x.label == "head") println(x)
+ for (x <- xml.child) println(x)
+ for (x <- xml.child;
+ if x.label == "head") println(x)
}
/////////////////// new syntax ///////////////////
@@ -76,10 +76,10 @@ object Test extends Application {
for {x <- it
if x % 2 == 0} print(x + " "); println
for (x <- it;
- val y = 2
+ y = 2
if x % y == 0) print(x + " "); println
for {x <- it
- val y = 2
+ y = 2
if x % y == 0} print(x + " "); println
// arrays
diff --git a/test/files/run/forvaleq.scala b/test/files/run/forvaleq.scala
index 8c1824a769..2a958802b6 100644
--- a/test/files/run/forvaleq.scala
+++ b/test/files/run/forvaleq.scala
@@ -2,7 +2,7 @@
import scala.collection.immutable.Queue
import scala.{List=>L}
-
+
object Test {
// redefine some symbols to make it extra hard
class List
@@ -16,11 +16,11 @@ object Test {
case _ if (x<10) => x
case _ => firstDigit(x / 10)
}
-
-
+
+
{
- // a basic test case
-
+ // a basic test case
+
val input = L.range(0,20)
val oddFirstTimesTwo =
for {x <- input
@@ -32,7 +32,7 @@ object Test {
{
// a test case with patterns
-
+
val input = L.range(0, 20)
val oddFirstTimesTwo =
for {x <- input
@@ -43,10 +43,10 @@ object Test {
yield a + b
println(oddFirstTimesTwo)
}
-
+
{
// make sure it works on non-Ls
-
+
// val input: Queue = Queue.Empty[int].incl(L.range(0,20))
val input = L.range(0, 20).iterator
val oddFirstTimesTwo =
@@ -54,36 +54,36 @@ object Test {
xf = firstDigit(x)
if xf % 2 == 1}
yield x*2
- println(oddFirstTimesTwo.toList)
+ println(oddFirstTimesTwo.toList)
}
-
+
{
// yield the computed value
-
+
val input = L.range(0,20)
val oddFirstTimesTwo =
for {x <- input
xf = firstDigit(x)
if xf % 2 == 1}
yield xf*2
- println(oddFirstTimesTwo)
+ println(oddFirstTimesTwo)
}
{
// make sure the function is only called once
var count: Int = 0
-
+
def fdct(x: Int) = {
count += 1
firstDigit(x)
}
-
+
val input = L.range(0,20)
for {x <- input
xf = fdct(x)
if xf % 2 == 1}
yield xf
-
+
println("called " + count + " times")
}
diff --git a/test/files/run/gadts.scala b/test/files/run/gadts.scala
index 11b094d99a..4ab3ef681a 100644
--- a/test/files/run/gadts.scala
+++ b/test/files/run/gadts.scala
@@ -2,11 +2,11 @@ abstract class Term[T]
case class Lit(x: Int) extends Term[Int]
case class Succ(t: Term[Int]) extends Term[Int]
case class IsZero(t: Term[Int]) extends Term[Boolean]
-case class If[T](c: Term[Boolean],
- t1: Term[T],
+case class If[T](c: Term[Boolean],
+ t1: Term[T],
t2: Term[T]) extends Term[T]
-object Test extends Application {
+object Test extends App {
def eval[T](t: Term[T]): T = t match {
case Lit(n) => n
case Succ(u) => eval(u) + 1
diff --git a/test/files/run/getClassTest.check b/test/files/run/getClassTest.check
new file mode 100644
index 0000000000..94e86c3889
--- /dev/null
+++ b/test/files/run/getClassTest.check
@@ -0,0 +1,18 @@
+f1: java.lang.Class<?>
+f2: java.lang.Class<?>
+f3: java.lang.Class<java.lang.Object>
+f4: java.lang.Class<? extends java.lang.Integer>
+f5: java.lang.Class<?>
+f0: T
+f1: class java.lang.Object
+f2: class java.lang.Object
+f3: class AnyRefs$A
+f4: class AnyRefs$B
+f5: class java.lang.Object
+f6: class java.lang.Object
+f7: class AnyRefs$A
+f8: class AnyRefs$B
+f1: java.lang.Class<? extends MoreAnyRefs$A>
+f2: java.lang.Class<? extends MoreAnyRefs$B>
+f3: java.lang.Class<?>
+f4: java.lang.Class<? extends MoreAnyRefs$A>
diff --git a/test/files/run/getClassTest.scala b/test/files/run/getClassTest.scala
new file mode 100644
index 0000000000..2485cd2c71
--- /dev/null
+++ b/test/files/run/getClassTest.scala
@@ -0,0 +1,66 @@
+class AnyVals {
+ def f1 = (5: Any).getClass
+ def f2 = (5: AnyVal).getClass
+ def f3 = 5.getClass
+ def f4 = (5: java.lang.Integer).getClass
+ def f5 = (5.asInstanceOf[AnyRef]).getClass
+
+ // scalap says:
+ //
+ // def f1 : java.lang.Class[?0] forSome {type ?0} = { /* compiled code */ }
+ // def f2 : java.lang.Class[?0] forSome {type ?0} = { /* compiled code */ }
+ // def f3 : java.lang.Class[scala.Int] = { /* compiled code */ }
+ // def f4 : java.lang.Class[?0] forSome {type ?0 <: java.lang.Integer} = { /* compiled code */ }
+ // def f5 : java.lang.Class[?0] forSome {type ?0 <: scala.AnyRef} = { /* compiled code */ }
+ //
+ // java generic signature says:
+ //
+ // f1: java.lang.Class<?>
+ // f2: java.lang.Class<?>
+ // f3: java.lang.Class<java.lang.Object>
+ // f4: java.lang.Class<? extends java.lang.Integer>
+ // f5: java.lang.Class<?>
+}
+
+class AnyRefs {
+ class A
+ class B extends A
+
+ def f1 = (new B: Any).getClass().newInstance()
+ def f2 = (new B: AnyRef).getClass().newInstance()
+ def f3 = (new B: A).getClass().newInstance()
+ def f4 = (new B: B).getClass().newInstance()
+
+ def f0[T >: B] = (new B: T).getClass().newInstance()
+
+ def f5 = f0[Any]
+ def f6 = f0[AnyRef]
+ def f7 = f0[A]
+ def f8 = f0[B]
+}
+
+class MoreAnyRefs {
+ trait A
+ trait B
+
+ // don't leak anon/refinements
+ def f1 = (new A with B { }).getClass()
+ def f2 = (new B with A { }).getClass()
+ def f3 = (new { def bippy() = 5 }).getClass()
+ def f4 = (new A { def bippy() = 5 }).getClass()
+}
+
+object Test {
+ def returnTypes[T: Manifest] = (
+ manifest[T].erasure.getMethods.toList
+ filter (_.getName startsWith "f")
+ sortBy (_.getName)
+ map (m => m.getName + ": " + m.getGenericReturnType.toString)
+ )
+
+ def main(args: Array[String]): Unit = {
+ returnTypes[AnyVals] foreach println
+ returnTypes[AnyRefs] foreach println
+ returnTypes[MoreAnyRefs] foreach println
+ }
+}
diff --git a/test/files/run/global-showdef.check b/test/files/run/global-showdef.check
new file mode 100644
index 0000000000..4c2fd41a1a
--- /dev/null
+++ b/test/files/run/global-showdef.check
@@ -0,0 +1,14 @@
+<<-- class foo.bar.Bippy after phase 'typer' -->>
+ def showdefTestMemberClass1: Int
+<<-- type foo.bar.Bippy.BippyType after phase 'typer' -->>
+ def showdefTestMemberType1: Unit
+<<-- type foo.bar.Bippy.BippyType after phase 'typer' -->>
+ def showdefTestMemberType2: Unit
+<<-- class foo.bar.Bippy.Boppity after phase 'typer' -->>
+ def showdefTestMemberClass2: Int
+<<-- class foo.bar.Bippy.Boppity.Boo after phase 'typer' -->>
+ def showdefTestMemberClass3: Int
+<<-- object foo.bar.Bippy after phase 'typer' -->>
+ def showdefTestMemberObject2: String
+<<-- object foo.bar.Bippy.Boppity.Boo after phase 'typer' -->>
+ def showdefTestMemberObject1: String
diff --git a/test/files/run/global-showdef.scala b/test/files/run/global-showdef.scala
new file mode 100644
index 0000000000..71ba7b8bb3
--- /dev/null
+++ b/test/files/run/global-showdef.scala
@@ -0,0 +1,69 @@
+import scala.tools.nsc._
+import io.{ AbstractFile }
+import util.{ SourceFile, BatchSourceFile, stringFromStream }
+import scala.tools.nsc.reporters.ConsoleReporter
+
+object Test {
+ val src: SourceFile = new BatchSourceFile("src", """
+package foo.bar
+
+class Bippy {
+ type BippyType <: {
+ def showdefTestMemberType1: Unit
+ }
+
+ def showdefTestMemberClass1 = 5
+ class Boppity {
+ def showdefTestMemberClass2 = 5
+ class Boo {
+ def showdefTestMemberClass3 = 5
+ }
+ object Boo {
+ def showdefTestMemberObject1 = "abc"
+ }
+ }
+}
+
+object Bippy {
+ type BippyType <: {
+ def showdefTestMemberType2: Unit
+ }
+
+ def showdefTestMemberObject2 = "abc"
+}
+ """)
+
+ def mkCompiler(args: String*) = {
+ val settings = new Settings()
+ val command = new CompilerCommand("-usejavacp" :: args.toList, settings)
+
+ new Global(settings)
+ }
+
+ def slurp(body: => Unit): String = stringFromStream { stream =>
+ Console.withOut(stream) {
+ Console.withErr(stream) {
+ body
+ }
+ }
+ }
+ def lines(args: String*): List[String] = {
+ val output = slurp {
+ val compiler = mkCompiler(args: _*)
+ val run = new compiler.Run()
+ run.compileSources(List(src))
+ }
+ output split "\\n" toList
+ }
+ def showClass(name: String) = lines("-Yshow:typer", "-Xshow-class", name)
+ def showObject(name: String) = lines("-Yshow:typer", "-Xshow-object", name)
+
+ def show(xs: List[String]) = {
+ xs filter (x => (x contains "def showdefTestMember") || (x startsWith "<<-- ")) foreach println
+ }
+
+ def main(args: Array[String]) {
+ show(List("Bippy", "Bippy#BippyType", "Bippy.BippyType", "Bippy#Boppity", "Bippy#Boppity#Boo") flatMap showClass)
+ show(List("Bippy", "Bippy#Boppity#Boo") flatMap showObject)
+ }
+}
diff --git a/test/files/run/groupby.scala b/test/files/run/groupby.scala
new file mode 100644
index 0000000000..fe08f52812
--- /dev/null
+++ b/test/files/run/groupby.scala
@@ -0,0 +1,18 @@
+
+
+
+// Fixes #3422
+object Test {
+
+ def main(args: Array[String]) {
+ val arr = Array.range(0,10)
+ val map = arr groupBy (_%2)
+ val v1 = map(0)
+ val v2 = map(0)
+ // this should hold, of course, assuming also that group by returns a regular
+ // map implementation, and does nothing fancy - and it should return just a
+ // hash map by default.
+ assert(v1 eq v2)
+ }
+
+}
diff --git a/test/files/run/hashCodeBoxesRunTime.scala b/test/files/run/hashCodeBoxesRunTime.scala
index 3eacacb663..081a73376e 100644
--- a/test/files/run/hashCodeBoxesRunTime.scala
+++ b/test/files/run/hashCodeBoxesRunTime.scala
@@ -4,16 +4,16 @@ object Test
{
import java.{ lang => jl }
import scala.runtime.BoxesRunTime.{ hashFromNumber, hashFromObject }
-
- def allSame[T](xs: List[T]) = assert(xs.removeDuplicates.size == 1, "failed: " + xs)
-
+
+ def allSame[T](xs: List[T]) = assert(xs.distinct.size == 1, "failed: " + xs)
+
def mkNumbers(x: Int): List[Number] =
List(x.toByte, x.toShort, x, x.toLong, x.toFloat, x.toDouble)
-
+
def testLDF(x: Long) = allSame(List[Number](x, x.toDouble, x.toFloat) map hashFromNumber)
-
+
def main(args: Array[String]): Unit = {
- List(Byte.MinValue, -1, 0, 1, Byte.MaxValue) foreach { n =>
+ List(Byte.MinValue, -1, 0, 1, Byte.MaxValue) foreach { n =>
val hashes = mkNumbers(n) map hashFromNumber
allSame(hashes)
if (n >= 0) {
@@ -21,7 +21,7 @@ object Test
assert(charCode == hashes.head)
}
}
-
+
testLDF(Short.MaxValue.toLong)
testLDF(Short.MinValue.toLong)
}
diff --git a/test/files/run/hashCodeDistribution.flags b/test/files/run/hashCodeDistribution.flags
deleted file mode 100644
index 7806652d4d..0000000000
--- a/test/files/run/hashCodeDistribution.flags
+++ /dev/null
@@ -1 +0,0 @@
--Yjenkins-hashCodes \ No newline at end of file
diff --git a/test/files/run/hashCodeDistribution.scala b/test/files/run/hashCodeDistribution.scala
index dbb6e833bd..5be9d1db6d 100644
--- a/test/files/run/hashCodeDistribution.scala
+++ b/test/files/run/hashCodeDistribution.scala
@@ -8,7 +8,7 @@ object Test {
val hashCodes =
for (x <- 0 until COUNT; y <- 0 until COUNT) yield C(x,y).hashCode
- val uniques = hashCodes.removeDuplicates
+ val uniques = hashCodes.distinct
val collisionRate = (totalCodes - uniques.size) * 1000 / totalCodes
assert(collisionRate < 5, "Collision rate too high: %d / 1000".format(collisionRate))
diff --git a/test/files/run/hashhash.scala b/test/files/run/hashhash.scala
new file mode 100644
index 0000000000..b9cec99a12
--- /dev/null
+++ b/test/files/run/hashhash.scala
@@ -0,0 +1,10 @@
+object Test {
+ def confirmSame(x: Any) = assert(x.## == x.hashCode, "%s.## != %s.hashCode".format(x, x))
+ def confirmDifferent(x: Any) = assert(x.## != x.hashCode, "%s.## == %s.hashCode (but should not)".format(x, x))
+
+ def main(args: Array[String]): Unit = {
+ /** Just a little sanity check, not to be confused with a unit test. */
+ List(5, 5.5f, "abc", new AnyRef, ()) foreach confirmSame
+ List(5.0f, 1.0d, -(5.0f), (-1.0d)) foreach confirmDifferent
+ }
+}
diff --git a/test/files/run/imain.check b/test/files/run/imain.check
new file mode 100644
index 0000000000..76df308f3c
--- /dev/null
+++ b/test/files/run/imain.check
@@ -0,0 +1 @@
+Some(246)
diff --git a/test/files/run/imain.scala b/test/files/run/imain.scala
new file mode 100644
index 0000000000..c164fb53ef
--- /dev/null
+++ b/test/files/run/imain.scala
@@ -0,0 +1,17 @@
+object Test {
+ import scala.tools.nsc._
+ import interpreter._
+ import java.io.PrintWriter
+
+ class NullOutputStream extends OutputStream { def write(b: Int) { } }
+
+ def main(args: Array[String]) {
+ val settings = new Settings
+ settings.classpath.value = System.getProperty("java.class.path")
+
+ val intp = new IMain(settings, new PrintWriter(new NullOutputStream))
+ intp.interpret("def x0 = 123")
+ intp.interpret("val x1 = x0 * 2")
+ println(intp.valueOfTerm("x1"))
+ }
+}
diff --git a/test/files/run/implicits.scala b/test/files/run/implicits.scala
index e554575284..a30f60f6d0 100644
--- a/test/files/run/implicits.scala
+++ b/test/files/run/implicits.scala
@@ -15,7 +15,7 @@ class C(x: String) {
}
}
-object Test extends Application {
+object Test extends App {
import A.B._
val c = new C("OK")
val i = new c.Inner
diff --git a/test/files/run/bug629.check b/test/files/run/indexedSeq-apply.check
index d86bac9de5..d86bac9de5 100644
--- a/test/files/run/bug629.check
+++ b/test/files/run/indexedSeq-apply.check
diff --git a/test/files/run/indexedSeq-apply.scala b/test/files/run/indexedSeq-apply.scala
new file mode 100644
index 0000000000..39d4db2ce9
--- /dev/null
+++ b/test/files/run/indexedSeq-apply.scala
@@ -0,0 +1,15 @@
+object Test extends App {
+ val empty = IndexedSeq()
+ assert(empty.isEmpty)
+
+ val single = IndexedSeq(1)
+ assert(List(1) == single.toList)
+
+ val two = IndexedSeq("a", "b")
+ assert("a" == two.head)
+ assert("b" == two.apply(1))
+
+ println("OK")
+}
+
+// vim: set ts=2 sw=2 et:
diff --git a/test/files/run/indexedSeq.scala b/test/files/run/indexedSeq.scala
new file mode 100644
index 0000000000..9744f47f63
--- /dev/null
+++ b/test/files/run/indexedSeq.scala
@@ -0,0 +1,10 @@
+object Test {
+ import scala.collection.{ mutable, immutable, generic }
+
+ def checkIdentity[A](xs: immutable.IndexedSeq[A]) = assert(xs.toIndexedSeq eq xs)
+
+ def main(args: Array[String]): Unit = {
+ checkIdentity(immutable.Vector(1 to 10: _*))
+ checkIdentity(1 to 10 toIndexedSeq)
+ }
+}
diff --git a/test/files/run/infiniteloop.scala b/test/files/run/infiniteloop.scala
index f15674a676..06926cec1e 100644
--- a/test/files/run/infiniteloop.scala
+++ b/test/files/run/infiniteloop.scala
@@ -1,6 +1,6 @@
/** Tests the optimiser (not to loop on 'reverse'). */
-object Test extends Application {
+object Test extends App {
def foo {
val s3 = Stream.range(1, 1000) //100000 (ticket #153: Stackoverflow)
diff --git a/test/files/run/infix.scala b/test/files/run/infix.scala
index 60a844acad..700e4347ac 100644
--- a/test/files/run/infix.scala
+++ b/test/files/run/infix.scala
@@ -2,11 +2,11 @@ case class op(x: op, y: Int, z: Int) {
def op(y: Int, z: Int) = new op(this, y, z)
}
-object Test extends Application {
+object Test extends App {
val xs = new op(null, 0, 0) op (1, 1) op (2, 2)
Console.println(xs)
xs match {
case null op (0, 0) op (1, 1) op (2, 2) => Console.println("OK")
}
}
-
+
diff --git a/test/files/run/inline-ex-handlers.check b/test/files/run/inline-ex-handlers.check
new file mode 100644
index 0000000000..7a8a744bfa
--- /dev/null
+++ b/test/files/run/inline-ex-handlers.check
@@ -0,0 +1,314 @@
+172c172
+< locals: value x$1, value temp1
+---
+> locals: value x$1, value temp1, variable boxed1
+174c174
+< blocks: [1,2,3,4]
+---
+> blocks: [1,2,3]
+187,189d186
+< 92 JUMP 4
+<
+< 4:
+195a193,194
+> 92 STORE_LOCAL(variable boxed1)
+> 92 LOAD_LOCAL(variable boxed1)
+386c385
+< blocks: [1,2,3,4,5,7,8,10]
+---
+> blocks: [1,2,3,4,5,7,8,10,11]
+410c409,418
+< 103 THROW(MyException)
+---
+> ? STORE_LOCAL(value ex$1)
+> ? JUMP 11
+>
+> 11:
+> 101 LOAD_LOCAL(value ex$1)
+> 101 STORE_LOCAL(value temp2)
+> 101 SCOPE_ENTER value temp2
+> 101 LOAD_LOCAL(value temp2)
+> 101 IS_INSTANCE REF(class MyException)
+> 101 CZJUMP (BOOL)NE ? 4 : 5
+501c509
+< blocks: [1,2,3,4,6,7,8,9,10]
+---
+> blocks: [1,2,3,4,6,7,8,9,10,11,12,13]
+530c538,543
+< 306 THROW(MyException)
+---
+> ? JUMP 11
+>
+> 11:
+> ? LOAD_LOCAL(variable monitor4)
+> 305 MONITOR_EXIT
+> ? JUMP 12
+536c549,555
+< ? THROW(Throwable)
+---
+> ? JUMP 12
+>
+> 12:
+> ? LOAD_LOCAL(variable monitor3)
+> 304 MONITOR_EXIT
+> ? STORE_LOCAL(value t)
+> ? JUMP 13
+542c561,574
+< ? THROW(Throwable)
+---
+> ? STORE_LOCAL(value t)
+> ? JUMP 13
+>
+> 13:
+> 310 LOAD_MODULE object Predef
+> 310 CALL_PRIMITIVE(StartConcat)
+> 310 CONSTANT("Caught crash: ")
+> 310 CALL_PRIMITIVE(StringConcat(REF(class String)))
+> 310 LOAD_LOCAL(value t)
+> 310 CALL_METHOD java.lang.Throwable.toString (dynamic)
+> 310 CALL_PRIMITIVE(StringConcat(REF(class String)))
+> 310 CALL_PRIMITIVE(EndConcat)
+> 310 CALL_METHOD scala.Predef.println (dynamic)
+> 310 JUMP 2
+566c598
+< catch (Throwable) in ArrayBuffer(7, 8, 9, 10) starting at: 6
+---
+> catch (Throwable) in ArrayBuffer(7, 8, 9, 10, 11) starting at: 6
+569c601
+< catch (Throwable) in ArrayBuffer(4, 6, 7, 8, 9, 10) starting at: 3
+---
+> catch (Throwable) in ArrayBuffer(4, 6, 7, 8, 9, 10, 11, 12) starting at: 3
+601c633
+< blocks: [1,2,3,4,5,6,7,9,10]
+---
+> blocks: [1,2,3,4,5,6,7,9,10,11,12]
+625c657,663
+< 78 THROW(IllegalArgumentException)
+---
+> ? STORE_LOCAL(value e)
+> ? JUMP 11
+>
+> 11:
+> 81 LOAD_LOCAL(value e)
+> ? STORE_LOCAL(variable exc1)
+> ? JUMP 12
+654c692,706
+< 81 THROW(Exception)
+---
+> ? STORE_LOCAL(variable exc1)
+> ? JUMP 12
+>
+> 12:
+> 83 LOAD_MODULE object Predef
+> 83 CONSTANT("finally")
+> 83 CALL_METHOD scala.Predef.println (dynamic)
+> 84 LOAD_LOCAL(variable result)
+> 84 CONSTANT(1)
+> 84 CALL_PRIMITIVE(Arithmetic(SUB,INT))
+> 84 CONSTANT(2)
+> 84 CALL_PRIMITIVE(Arithmetic(DIV,INT))
+> 84 STORE_LOCAL(variable result)
+> 84 LOAD_LOCAL(variable exc1)
+> 84 THROW(Throwable)
+676c728
+< catch (<none>) in ArrayBuffer(4, 6, 7, 9) starting at: 3
+---
+> catch (<none>) in ArrayBuffer(4, 6, 7, 9, 11) starting at: 3
+702c754
+< blocks: [1,2,3,4,5,6,7,8,11,12,13,14,15,16,18,19]
+---
+> blocks: [1,2,3,4,5,6,7,8,11,12,13,14,15,16,18,19,20,21,22]
+726c778,787
+< 172 THROW(MyException)
+---
+> ? STORE_LOCAL(value ex$4)
+> ? JUMP 20
+>
+> 20:
+> 170 LOAD_LOCAL(value ex$4)
+> 170 STORE_LOCAL(value temp11)
+> 170 SCOPE_ENTER value temp11
+> 170 LOAD_LOCAL(value temp11)
+> 170 IS_INSTANCE REF(class MyException)
+> 170 CZJUMP (BOOL)NE ? 12 : 13
+780c841,842
+< 177 THROW(MyException)
+---
+> ? STORE_LOCAL(value ex$5)
+> ? JUMP 21
+784c846,855
+< 170 THROW(Throwable)
+---
+> ? STORE_LOCAL(value ex$5)
+> ? JUMP 21
+>
+> 21:
+> 169 LOAD_LOCAL(value ex$5)
+> 169 STORE_LOCAL(value temp14)
+> 169 SCOPE_ENTER value temp14
+> 169 LOAD_LOCAL(value temp14)
+> 169 IS_INSTANCE REF(class MyException)
+> 169 CZJUMP (BOOL)NE ? 5 : 6
+815c886,887
+< 182 THROW(MyException)
+---
+> ? STORE_LOCAL(variable exc2)
+> ? JUMP 22
+819c891,905
+< 169 THROW(Throwable)
+---
+> ? STORE_LOCAL(variable exc2)
+> ? JUMP 22
+>
+> 22:
+> 184 LOAD_MODULE object Predef
+> 184 CONSTANT("finally")
+> 184 CALL_METHOD scala.Predef.println (dynamic)
+> 185 LOAD_LOCAL(variable result)
+> 185 CONSTANT(1)
+> 185 CALL_PRIMITIVE(Arithmetic(SUB,INT))
+> 185 CONSTANT(2)
+> 185 CALL_PRIMITIVE(Arithmetic(DIV,INT))
+> 185 STORE_LOCAL(variable result)
+> 185 LOAD_LOCAL(variable exc2)
+> 185 THROW(Throwable)
+841c927
+< catch (Throwable) in ArrayBuffer(11, 12, 13, 14, 15, 16, 18) starting at: 4
+---
+> catch (Throwable) in ArrayBuffer(11, 12, 13, 14, 15, 16, 18, 20) starting at: 4
+844c930
+< catch (<none>) in ArrayBuffer(4, 5, 6, 7, 11, 12, 13, 14, 15, 16, 18) starting at: 3
+---
+> catch (<none>) in ArrayBuffer(4, 5, 6, 7, 11, 12, 13, 14, 15, 16, 18, 20, 21) starting at: 3
+870c956
+< blocks: [1,2,3,6,7,8,10,11,13]
+---
+> blocks: [1,2,3,6,7,8,10,11,13,14]
+894c980,989
+< 124 THROW(MyException)
+---
+> ? STORE_LOCAL(value ex$2)
+> ? JUMP 14
+>
+> 14:
+> 122 LOAD_LOCAL(value ex$2)
+> 122 STORE_LOCAL(value temp5)
+> 122 SCOPE_ENTER value temp5
+> 122 LOAD_LOCAL(value temp5)
+> 122 IS_INSTANCE REF(class MyException)
+> 122 CZJUMP (BOOL)NE ? 7 : 8
+942c1037
+< catch (IllegalArgumentException) in ArrayBuffer(6, 7, 8, 10, 11, 13) starting at: 3
+---
+> catch (IllegalArgumentException) in ArrayBuffer(6, 7, 8, 10, 11, 13, 14) starting at: 3
+968c1063
+< blocks: [1,2,3,4,5,9,10,11,13]
+---
+> blocks: [1,2,3,4,5,9,10,11,13,14]
+992c1087,1096
+< 148 THROW(MyException)
+---
+> ? STORE_LOCAL(value ex$3)
+> ? JUMP 14
+>
+> 14:
+> 145 LOAD_LOCAL(value ex$3)
+> 145 STORE_LOCAL(value temp8)
+> 145 SCOPE_ENTER value temp8
+> 145 LOAD_LOCAL(value temp8)
+> 145 IS_INSTANCE REF(class MyException)
+> 145 CZJUMP (BOOL)NE ? 4 : 5
+1236c1340
+< blocks: [1,2,3,4,5,7]
+---
+> blocks: [1,2,3,4,5,7,8]
+1260c1364,1371
+< 38 THROW(IllegalArgumentException)
+---
+> ? STORE_LOCAL(value e)
+> ? JUMP 8
+>
+> 8:
+> 42 LOAD_MODULE object Predef
+> 42 CONSTANT("IllegalArgumentException")
+> 42 CALL_METHOD scala.Predef.println (dynamic)
+> 42 JUMP 2
+1309c1420
+< blocks: [1,2,3,4,5,7,8,10,11,13]
+---
+> blocks: [1,2,3,4,5,7,8,10,11,13,14]
+1333c1444,1445
+< 203 THROW(MyException)
+---
+> ? STORE_LOCAL(value ex$6)
+> ? JUMP 14
+1353c1465,1474
+< 209 THROW(MyException)
+---
+> ? STORE_LOCAL(value ex$6)
+> ? JUMP 14
+>
+> 14:
+> 200 LOAD_LOCAL(value ex$6)
+> 200 STORE_LOCAL(value temp17)
+> 200 SCOPE_ENTER value temp17
+> 200 LOAD_LOCAL(value temp17)
+> 200 IS_INSTANCE REF(class MyException)
+> 200 CZJUMP (BOOL)NE ? 4 : 5
+1416c1537
+< blocks: [1,2,3,4,5,7]
+---
+> blocks: [1,2,3,4,5,7,8]
+1440c1561,1568
+< 58 THROW(IllegalArgumentException)
+---
+> ? STORE_LOCAL(value e)
+> ? JUMP 8
+>
+> 8:
+> 62 LOAD_MODULE object Predef
+> 62 CONSTANT("RuntimeException")
+> 62 CALL_METHOD scala.Predef.println (dynamic)
+> 62 JUMP 2
+1489c1617
+< blocks: [1,2,3,4]
+---
+> blocks: [1,2,3,4,5]
+1509c1637,1642
+< 229 THROW(MyException)
+---
+> ? JUMP 5
+>
+> 5:
+> ? LOAD_LOCAL(variable monitor1)
+> 228 MONITOR_EXIT
+> 228 THROW(Throwable)
+1515c1648
+< ? THROW(Throwable)
+---
+> 228 THROW(Throwable)
+1543c1676
+< locals: value args, variable result, variable monitor2, variable monitorResult1
+---
+> locals: value exception$1, value args, variable result, variable monitor2, variable monitorResult1
+1545c1678
+< blocks: [1,2,3,4]
+---
+> blocks: [1,2,3,4,5]
+1568c1701,1709
+< 245 THROW(MyException)
+---
+> ? STORE_LOCAL(value exception$1)
+> ? DROP ConcatClass
+> ? LOAD_LOCAL(value exception$1)
+> ? JUMP 5
+>
+> 5:
+> ? LOAD_LOCAL(variable monitor2)
+> 244 MONITOR_EXIT
+> 244 THROW(Throwable)
+1574c1715
+< ? THROW(Throwable)
+---
+> 244 THROW(Throwable)
+
diff --git a/test/files/run/inline-ex-handlers.scala b/test/files/run/inline-ex-handlers.scala
new file mode 100644
index 0000000000..a96b938e13
--- /dev/null
+++ b/test/files/run/inline-ex-handlers.scala
@@ -0,0 +1,329 @@
+import scala.tools.partest.IcodeTest
+
+object Test extends IcodeTest {
+ override def printIcodeAfterPhase = "inlineExceptionHandlers"
+}
+
+import scala.util.Random._
+
+/** There should be no inlining taking place in this class */
+object TestInlineHandlersNoInline {
+
+ def main(args: Array[String]): Unit = {
+ println("TestInlineHandlersNoInline")
+ var result = -1
+
+ try {
+ if (nextInt % 2 == 0)
+ throw new IllegalArgumentException("something")
+ result = 1
+ } catch {
+ case e: StackOverflowError =>
+ println("Stack overflow")
+ }
+
+ result
+ }
+}
+
+/** Just a simple inlining should take place in this class */
+object TestInlineHandlersSimpleInline {
+
+ def main(args: Array[String]): Unit = {
+ println("TestInlineHandlersSimpleInline")
+ var result = -1
+
+ try {
+ if (nextInt % 2 == 0)
+ throw new IllegalArgumentException("something")
+ result = 1
+ } catch {
+ case e: IllegalArgumentException =>
+ println("IllegalArgumentException")
+ }
+
+ result
+ }
+}
+
+/** Inlining should take place because the handler is taking a superclass of the exception thrown */
+object TestInlineHandlersSubclassInline {
+
+ def main(args: Array[String]): Unit = {
+ println("TestInlineHandlersSubclassInline")
+ var result = -1
+
+ try {
+ if (nextInt % 2 == 0)
+ throw new IllegalArgumentException("something")
+ result = 1
+ } catch {
+ case e: RuntimeException =>
+ println("RuntimeException")
+ }
+
+ result
+ }
+}
+
+/** For this class, the finally handler should be inlined */
+object TestInlineHandlersFinallyInline {
+
+ def main(args: Array[String]): Unit = {
+ println("TestInlineHandlersFinallyInline")
+ var result = -1
+
+ try {
+ if (nextInt % 2 == 0)
+ throw new IllegalArgumentException("something")
+ result = 1
+ } catch {
+ case e: Exception => throw e
+ } finally {
+ println("finally")
+ result = (result - 1) / 2
+ }
+
+ result
+ }
+}
+
+
+case class MyException(message: String) extends RuntimeException(message)
+
+/** For this class, we test inlining for a case class error */
+object TestInlineHandlersCaseClassExceptionInline {
+
+ def main(args: Array[String]): Unit = {
+ println("TestInlineHandlersCaseClassExceptionInline")
+ var result = -1
+
+ try {
+ if (nextInt % 2 == 0)
+ throw new MyException("something")
+ result = 1
+ } catch {
+ case MyException(message) => println(message)
+ }
+
+ result
+ }
+}
+
+
+/** For this class, inline should take place in the inner handler */
+object TestInlineHandlersNestedHandlerInnerInline {
+
+ def main(args: Array[String]): Unit = {
+ println("TestInlineHandlersNestedHandlersInnerInline")
+ var result = -1
+
+ try {
+ try {
+ if (nextInt % 2 == 0)
+ throw new MyException("something")
+ result = 1
+ } catch {
+ case MyException(message) => println(message)
+ }
+ } catch {
+ case e: IllegalArgumentException => println("IllegalArgumentException")
+ }
+
+ result
+ }
+}
+
+
+/** For this class, inline should take place in the outer handler */
+object TestInlineHandlersNestedHandlerOuterInline {
+
+ def main(args: Array[String]): Unit = {
+ println("TestInlineHandlersNestedHandlersOuterInline")
+ var result = -1
+
+ try {
+ try {
+ if (nextInt % 2 == 0)
+ throw new MyException("something")
+ result = 1
+ } catch {
+ case e: IllegalArgumentException => println("IllegalArgumentException")
+ }
+ } catch {
+ case MyException(message) => println(message)
+ }
+
+ result
+ }
+}
+
+
+/** For this class, inline should take place in the all handlers (inner, outer and finally) */
+object TestInlineHandlersNestedHandlerAllInline {
+
+ def main(args: Array[String]): Unit = {
+ println("TestInlineHandlersNestedHandlersOuterInline")
+ var result = -1
+
+ try {
+ try {
+ if (nextInt % 2 == 0)
+ throw new MyException("something")
+ result = 1
+ } catch {
+ case MyException(message) =>
+ println(message)
+ throw MyException(message)
+ }
+ } catch {
+ case MyException(message) =>
+ println(message)
+ throw MyException(message)
+ } finally {
+ println("finally")
+ result = (result - 1) / 2
+ }
+
+ result
+ }
+}
+
+
+/** This class is meant to test whether the inline handler is copied only once for multiple inlines */
+object TestInlineHandlersSingleCopy {
+
+ def main(args: Array[String]): Unit = {
+ println("TestInlineHandlersSingleCopy")
+ var result = -1
+
+ try {
+
+ if (nextInt % 2 == 0)
+ throw new MyException("something")
+
+ println("A side effect in the middle")
+ result = 3 // another one
+
+ if (nextInt % 3 == 2)
+ throw new MyException("something else")
+ result = 1
+ } catch {
+ case MyException(message) =>
+ println(message)
+ }
+
+ result
+ }
+}
+
+/** This should test the special exception handler for synchronized blocks */
+object TestInlineHandlersSynchronized {
+
+ def main(args: Array[String]): Unit = {
+ println("TestInlineHandlersSynchronized")
+ var result = "hello"
+
+ // any exception thrown here will be caught by a default handler that does MONTIOR_EXIT on result :)
+ result.synchronized {
+ throw MyException(result)
+ }
+
+ result.length
+ }
+}
+
+/** This should test the special exception handler for synchronized blocks with stack */
+object TestInlineHandlersSynchronizedWithStack {
+
+ def main(args: Array[String]): Unit = {
+ println("TestInlineHandlersSynchronizedWithStack")
+ var result = "hello"
+
+ // any exception thrown here will be caught by a default handler that does MONTIOR_EXIT on result :)
+ result = "abc" + result.synchronized {
+ throw MyException(result)
+ }
+
+ result.length
+ }
+}
+
+/** This test should trigger a bug in the dead code elimination phase - it actually crashes ICodeCheckers
+object TestInlineHandlersSynchronizedWithStackDoubleThrow {
+
+ def main(args: Array[String]): Unit = {
+ println("TestInlineHandlersSynchronizedWithStackDoubleThrow")
+ var result = "a"
+
+ // any exception thrown here will be caught by a default handler that does MONTIOR_EXIT on result :)
+ result += result.synchronized { throw MyException(result) }
+ result += result.synchronized { throw MyException(result) }
+
+ result.length
+ }
+}
+*/
+
+/** This test should check the preciseness of the inliner: it should not do any inlining here
+* as it is not able to discern between the different exceptions
+*/
+object TestInlineHandlersPreciseness {
+
+ def main(args: Array[String]): Unit = {
+ println("TestInlineHandlersCorrectHandler")
+
+ try {
+ val exception: Throwable =
+ if (scala.util.Random.nextInt % 2 == 0)
+ new IllegalArgumentException("even")
+ else
+ new StackOverflowError("odd")
+ throw exception
+ } catch {
+ case e: IllegalArgumentException =>
+ println("Correct, IllegalArgumentException")
+ case e: StackOverflowError =>
+ println("Correct, StackOverflowException")
+ case t: Throwable =>
+ println("WROOOONG, not Throwable!")
+ }
+ }
+}
+
+/** This check should verify that the double no-local exception handler is duplicated correctly */
+object TestInlineHandlersDoubleNoLocal {
+
+ val a1: String = "a"
+ val a2: String = "b"
+
+ def main(args: Array[String]): Unit = {
+ println("TestInlineHandlersDoubleNoLocal")
+
+ try {
+ a1.synchronized {
+ a2. synchronized {
+ throw new MyException("crash")
+ }
+ }
+ } catch {
+ case t: Throwable => println("Caught crash: " + t.toString)
+ }
+
+ /* try {
+ val exception: Throwable =
+ if (scala.util.Random.nextInt % 2 == 0)
+ new IllegalArgumentException("even")
+ else
+ new StackOverflowError("odd")
+ throw exception
+ } catch {
+ case e: IllegalArgumentException =>
+ println("Correct, IllegalArgumentException")
+ case e: StackOverflowError =>
+ println("Correct, StackOverflowException")
+ case t: Throwable =>
+ println("WROOOONG, not Throwable!")
+ }*/
+ }
+}
diff --git a/test/files/run/inliner-infer.scala b/test/files/run/inliner-infer.scala
index 107b9508ee..ea83966c52 100644
--- a/test/files/run/inliner-infer.scala
+++ b/test/files/run/inliner-infer.scala
@@ -3,12 +3,12 @@
/** Test that the inliner is not inferring that `xs' is
* always Nil, removing the call to isEmpty.
*/
-object Test extends Application {
+object Test extends App {
@annotation.tailrec
def walk(xs: MyList): Unit = {
- if (xs.isEmpty)
- println("empty")
+ if (xs.isEmpty)
+ println("empty")
else {
println("non-empty")
walk(MyNil)
@@ -26,4 +26,4 @@ object MyNil extends MyList {
override def isEmpty = true
}
-
+
diff --git a/test/files/run/inner-obj-auto.check b/test/files/run/inner-obj-auto.check
new file mode 100644
index 0000000000..90f7e27b98
--- /dev/null
+++ b/test/files/run/inner-obj-auto.check
@@ -0,0 +1,65 @@
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
diff --git a/test/files/run/inner-obj-auto.scala b/test/files/run/inner-obj-auto.scala
new file mode 100644
index 0000000000..aa2e29326f
--- /dev/null
+++ b/test/files/run/inner-obj-auto.scala
@@ -0,0 +1,2092 @@
+
+
+/* ================================================================================
+ Automatically generated on 2011-05-11. Do Not Edit (unless you have to).
+ (2-level nesting)
+ ================================================================================ */
+
+
+
+class Class2_1 {
+
+ class Class1_2 {
+ var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ def run { runTest }
+ }
+
+ def run { (new Class1_2).run }
+}
+
+
+object Object3_1 {
+
+ class Class1_2 {
+ var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ def run { runTest }
+ }
+
+ def run { (new Class1_2).run } // trigger
+}
+
+
+trait Trait4_1 {
+
+ class Class1_2 {
+ var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ def run { runTest }
+ }
+
+ def run { (new Class1_2).run }
+}
+
+
+class Class6_1 {
+
+ object Object5_2 {
+ var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ def run { runTest } // trigger
+ }
+
+ def run { Object5_2.run }
+}
+
+
+object Object7_1 {
+
+ object Object5_2 {
+ var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ def run { runTest } // trigger
+ }
+
+ def run { Object5_2.run } // trigger
+}
+
+
+trait Trait8_1 {
+
+ object Object5_2 {
+ var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ def run { runTest } // trigger
+ }
+
+ def run { Object5_2.run }
+}
+
+
+class Class10_1 {
+
+ trait Trait9_2 {
+ var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ def run { runTest }
+ }
+
+ def run { (new Trait9_2 {}).run }
+}
+
+
+object Object11_1 {
+
+ trait Trait9_2 {
+ var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ def run { runTest }
+ }
+
+ def run { (new Trait9_2 {}).run } // trigger
+}
+
+
+trait Trait12_1 {
+
+ trait Trait9_2 {
+ var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ def run { runTest }
+ }
+
+ def run { (new Trait9_2 {}).run }
+}
+
+
+class Class14_1 {
+
+ def method13_2 {
+ var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+
+ def run { method13_2 }
+}
+
+
+object Object15_1 {
+
+ def method13_2 {
+ var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+
+ def run { method13_2 } // trigger
+}
+
+
+trait Trait16_1 {
+
+ def method13_2 {
+ var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+
+ def run { method13_2 }
+}
+
+
+class Class18_1 {
+
+ private def method17_2 {
+ var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+
+ def run { method17_2 }
+}
+
+
+object Object19_1 {
+
+ private def method17_2 {
+ var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+
+ def run { method17_2 } // trigger
+}
+
+
+trait Trait20_1 {
+
+ private def method17_2 {
+ var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+
+ def run { method17_2 }
+}
+
+
+class Class22_1 {
+
+ val fun21_2 = () => {
+ var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+
+ def run { fun21_2() }
+}
+
+
+object Object23_1 {
+
+ val fun21_2 = () => {
+ var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+
+ def run { fun21_2() } // trigger
+}
+
+
+trait Trait24_1 {
+
+ val fun21_2 = () => {
+ var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+
+ def run { fun21_2() }
+}
+
+
+class Class26_1 {
+
+ class Class25_2 {
+ { // in primary constructor
+ var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+ }
+
+ def run { (new Class25_2) }
+}
+
+
+object Object27_1 {
+
+ class Class25_2 {
+ { // in primary constructor
+ var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+ }
+
+ def run { (new Class25_2) } // trigger
+}
+
+
+trait Trait28_1 {
+
+ class Class25_2 {
+ { // in primary constructor
+ var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+ }
+
+ def run { (new Class25_2) }
+}
+
+
+class Class30_1 {
+
+ trait Trait29_2 {
+ { // in primary constructor
+ var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+ }
+
+ def run { (new Trait29_2 {}) }
+}
+
+
+object Object31_1 {
+
+ trait Trait29_2 {
+ { // in primary constructor
+ var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+ }
+
+ def run { (new Trait29_2 {}) } // trigger
+}
+
+
+trait Trait32_1 {
+
+ trait Trait29_2 {
+ { // in primary constructor
+ var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+ }
+
+ def run { (new Trait29_2 {}) }
+}
+
+
+class Class34_1 {
+
+ lazy val lzvalue33_2 = {
+ var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+
+ def run { lzvalue33_2 }
+}
+
+
+object Object35_1 {
+
+ lazy val lzvalue33_2 = {
+ var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+
+ def run { lzvalue33_2 } // trigger
+}
+
+
+trait Trait36_1 {
+
+ lazy val lzvalue33_2 = {
+ var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+
+ def run { lzvalue33_2 }
+}
+
+
+class Class38_1 {
+
+ val value37_2 = {
+ var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+
+ def run { value37_2 }
+}
+
+
+object Object39_1 {
+
+ val value37_2 = {
+ var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+
+ def run { value37_2 } // trigger
+}
+
+
+trait Trait40_1 {
+
+ val value37_2 = {
+ var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+
+ def run { value37_2 }
+}
+
+
+class Class42_1 {
+
+ class Class41_2 {
+ var ObjCounter = 0
+
+ private object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ def run { runTest }
+ }
+
+ def run { (new Class41_2).run }
+}
+
+
+object Object43_1 {
+
+ class Class41_2 {
+ var ObjCounter = 0
+
+ private object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ def run { runTest }
+ }
+
+ def run { (new Class41_2).run } // trigger
+}
+
+
+trait Trait44_1 {
+
+ class Class41_2 {
+ var ObjCounter = 0
+
+ private object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ def run { runTest }
+ }
+
+ def run { (new Class41_2).run }
+}
+
+
+class Class46_1 {
+
+ object Object45_2 {
+ var ObjCounter = 0
+
+ private object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ def run { runTest } // trigger
+ }
+
+ def run { Object45_2.run }
+}
+
+
+object Object47_1 {
+
+ object Object45_2 {
+ var ObjCounter = 0
+
+ private object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ def run { runTest } // trigger
+ }
+
+ def run { Object45_2.run } // trigger
+}
+
+
+trait Trait48_1 {
+
+ object Object45_2 {
+ var ObjCounter = 0
+
+ private object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ def run { runTest } // trigger
+ }
+
+ def run { Object45_2.run }
+}
+
+
+class Class50_1 {
+
+ trait Trait49_2 {
+ var ObjCounter = 0
+
+ private object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ def run { runTest }
+ }
+
+ def run { (new Trait49_2 {}).run }
+}
+
+
+object Object51_1 {
+
+ trait Trait49_2 {
+ var ObjCounter = 0
+
+ private object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ def run { runTest }
+ }
+
+ def run { (new Trait49_2 {}).run } // trigger
+}
+
+
+trait Trait52_1 {
+
+ trait Trait49_2 {
+ var ObjCounter = 0
+
+ private object Obj { ObjCounter += 1}
+ Obj // one
+
+ def singleThreadedAccess(x: Any) = {
+ x == Obj
+ }
+
+ def runTest {
+ try {
+ assert(singleThreadedAccess(Obj))
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("failed "); e.printStackTrace()
+ }
+ }
+
+ def run { runTest }
+ }
+
+ def run { (new Trait49_2 {}).run }
+}
+
+
+class Class54_1 {
+
+ class Class53_2 {
+ @volatile var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+
+ def multiThreadedAccess() {
+ val threads = for (i <- 1 to 5) yield new Thread(new Runnable {
+ def run = Obj
+ })
+
+ threads foreach (_.start())
+ threads foreach (_.join())
+ }
+
+ def runTest {
+ try {
+ multiThreadedAccess()
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("multi-threaded failed "); e.printStackTrace()
+ }
+ }
+
+ def run { runTest }
+ }
+
+ def run { (new Class53_2).run }
+}
+
+
+object Object55_1 {
+
+ class Class53_2 {
+ @volatile var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+
+ def multiThreadedAccess() {
+ val threads = for (i <- 1 to 5) yield new Thread(new Runnable {
+ def run = Obj
+ })
+
+ threads foreach (_.start())
+ threads foreach (_.join())
+ }
+
+ def runTest {
+ try {
+ multiThreadedAccess()
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("multi-threaded failed "); e.printStackTrace()
+ }
+ }
+
+ def run { runTest }
+ }
+
+ def run { (new Class53_2).run } // trigger
+}
+
+
+trait Trait56_1 {
+
+ class Class53_2 {
+ @volatile var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+
+ def multiThreadedAccess() {
+ val threads = for (i <- 1 to 5) yield new Thread(new Runnable {
+ def run = Obj
+ })
+
+ threads foreach (_.start())
+ threads foreach (_.join())
+ }
+
+ def runTest {
+ try {
+ multiThreadedAccess()
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("multi-threaded failed "); e.printStackTrace()
+ }
+ }
+
+ def run { runTest }
+ }
+
+ def run { (new Class53_2).run }
+}
+
+
+class Class58_1 {
+
+ object Object57_2 {
+ @volatile var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+
+ def multiThreadedAccess() {
+ val threads = for (i <- 1 to 5) yield new Thread(new Runnable {
+ def run = Obj
+ })
+
+ threads foreach (_.start())
+ threads foreach (_.join())
+ }
+
+ def runTest {
+ try {
+ multiThreadedAccess()
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("multi-threaded failed "); e.printStackTrace()
+ }
+ }
+
+ def run { runTest } // trigger
+ }
+
+ def run { Object57_2.run }
+}
+
+
+object Object59_1 {
+
+ object Object57_2 {
+ @volatile var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+
+ def multiThreadedAccess() {
+ val threads = for (i <- 1 to 5) yield new Thread(new Runnable {
+ def run = Obj
+ })
+
+ threads foreach (_.start())
+ threads foreach (_.join())
+ }
+
+ def runTest {
+ try {
+ multiThreadedAccess()
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("multi-threaded failed "); e.printStackTrace()
+ }
+ }
+
+ def run { runTest } // trigger
+ }
+
+ def run { Object57_2.run } // trigger
+}
+
+
+trait Trait60_1 {
+
+ object Object57_2 {
+ @volatile var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+
+ def multiThreadedAccess() {
+ val threads = for (i <- 1 to 5) yield new Thread(new Runnable {
+ def run = Obj
+ })
+
+ threads foreach (_.start())
+ threads foreach (_.join())
+ }
+
+ def runTest {
+ try {
+ multiThreadedAccess()
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("multi-threaded failed "); e.printStackTrace()
+ }
+ }
+
+ def run { runTest } // trigger
+ }
+
+ def run { Object57_2.run }
+}
+
+
+class Class62_1 {
+
+ trait Trait61_2 {
+ @volatile var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+
+ def multiThreadedAccess() {
+ val threads = for (i <- 1 to 5) yield new Thread(new Runnable {
+ def run = Obj
+ })
+
+ threads foreach (_.start())
+ threads foreach (_.join())
+ }
+
+ def runTest {
+ try {
+ multiThreadedAccess()
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("multi-threaded failed "); e.printStackTrace()
+ }
+ }
+
+ def run { runTest }
+ }
+
+ def run { (new Trait61_2 {}).run }
+}
+
+
+object Object63_1 {
+
+ trait Trait61_2 {
+ @volatile var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+
+ def multiThreadedAccess() {
+ val threads = for (i <- 1 to 5) yield new Thread(new Runnable {
+ def run = Obj
+ })
+
+ threads foreach (_.start())
+ threads foreach (_.join())
+ }
+
+ def runTest {
+ try {
+ multiThreadedAccess()
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("multi-threaded failed "); e.printStackTrace()
+ }
+ }
+
+ def run { runTest }
+ }
+
+ def run { (new Trait61_2 {}).run } // trigger
+}
+
+
+trait Trait64_1 {
+
+ trait Trait61_2 {
+ @volatile var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+
+ def multiThreadedAccess() {
+ val threads = for (i <- 1 to 5) yield new Thread(new Runnable {
+ def run = Obj
+ })
+
+ threads foreach (_.start())
+ threads foreach (_.join())
+ }
+
+ def runTest {
+ try {
+ multiThreadedAccess()
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("multi-threaded failed "); e.printStackTrace()
+ }
+ }
+
+ def run { runTest }
+ }
+
+ def run { (new Trait61_2 {}).run }
+}
+
+
+class Class66_1 {
+
+ def method65_2 {
+ @volatile var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+
+ def multiThreadedAccess() {
+ val threads = for (i <- 1 to 5) yield new Thread(new Runnable {
+ def run = Obj
+ })
+
+ threads foreach (_.start())
+ threads foreach (_.join())
+ }
+
+ def runTest {
+ try {
+ multiThreadedAccess()
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("multi-threaded failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+
+ def run { method65_2 }
+}
+
+
+object Object67_1 {
+
+ def method65_2 {
+ @volatile var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+
+ def multiThreadedAccess() {
+ val threads = for (i <- 1 to 5) yield new Thread(new Runnable {
+ def run = Obj
+ })
+
+ threads foreach (_.start())
+ threads foreach (_.join())
+ }
+
+ def runTest {
+ try {
+ multiThreadedAccess()
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("multi-threaded failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+
+ def run { method65_2 } // trigger
+}
+
+
+trait Trait68_1 {
+
+ def method65_2 {
+ @volatile var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+
+ def multiThreadedAccess() {
+ val threads = for (i <- 1 to 5) yield new Thread(new Runnable {
+ def run = Obj
+ })
+
+ threads foreach (_.start())
+ threads foreach (_.join())
+ }
+
+ def runTest {
+ try {
+ multiThreadedAccess()
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("multi-threaded failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+
+ def run { method65_2 }
+}
+
+
+class Class70_1 {
+
+ private def method69_2 {
+ @volatile var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+
+ def multiThreadedAccess() {
+ val threads = for (i <- 1 to 5) yield new Thread(new Runnable {
+ def run = Obj
+ })
+
+ threads foreach (_.start())
+ threads foreach (_.join())
+ }
+
+ def runTest {
+ try {
+ multiThreadedAccess()
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("multi-threaded failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+
+ def run { method69_2 }
+}
+
+
+object Object71_1 {
+
+ private def method69_2 {
+ @volatile var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+
+ def multiThreadedAccess() {
+ val threads = for (i <- 1 to 5) yield new Thread(new Runnable {
+ def run = Obj
+ })
+
+ threads foreach (_.start())
+ threads foreach (_.join())
+ }
+
+ def runTest {
+ try {
+ multiThreadedAccess()
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("multi-threaded failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+
+ def run { method69_2 } // trigger
+}
+
+
+trait Trait72_1 {
+
+ private def method69_2 {
+ @volatile var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+
+ def multiThreadedAccess() {
+ val threads = for (i <- 1 to 5) yield new Thread(new Runnable {
+ def run = Obj
+ })
+
+ threads foreach (_.start())
+ threads foreach (_.join())
+ }
+
+ def runTest {
+ try {
+ multiThreadedAccess()
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("multi-threaded failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+
+ def run { method69_2 }
+}
+
+
+class Class74_1 {
+
+ val fun73_2 = () => {
+ @volatile var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+
+ def multiThreadedAccess() {
+ val threads = for (i <- 1 to 5) yield new Thread(new Runnable {
+ def run = Obj
+ })
+
+ threads foreach (_.start())
+ threads foreach (_.join())
+ }
+
+ def runTest {
+ try {
+ multiThreadedAccess()
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("multi-threaded failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+
+ def run { fun73_2() }
+}
+
+
+object Object75_1 {
+
+ val fun73_2 = () => {
+ @volatile var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+
+ def multiThreadedAccess() {
+ val threads = for (i <- 1 to 5) yield new Thread(new Runnable {
+ def run = Obj
+ })
+
+ threads foreach (_.start())
+ threads foreach (_.join())
+ }
+
+ def runTest {
+ try {
+ multiThreadedAccess()
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("multi-threaded failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+
+ def run { fun73_2() } // trigger
+}
+
+
+trait Trait76_1 {
+
+ val fun73_2 = () => {
+ @volatile var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+
+ def multiThreadedAccess() {
+ val threads = for (i <- 1 to 5) yield new Thread(new Runnable {
+ def run = Obj
+ })
+
+ threads foreach (_.start())
+ threads foreach (_.join())
+ }
+
+ def runTest {
+ try {
+ multiThreadedAccess()
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("multi-threaded failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+
+ def run { fun73_2() }
+}
+
+
+class Class78_1 {
+
+ class Class77_2 {
+ { // in primary constructor
+ @volatile var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+
+ def multiThreadedAccess() {
+ val threads = for (i <- 1 to 5) yield new Thread(new Runnable {
+ def run = Obj
+ })
+
+ threads foreach (_.start())
+ threads foreach (_.join())
+ }
+
+ def runTest {
+ try {
+ multiThreadedAccess()
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("multi-threaded failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+ }
+
+ def run { (new Class77_2) }
+}
+
+
+object Object79_1 {
+
+ class Class77_2 {
+ { // in primary constructor
+ @volatile var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+
+ def multiThreadedAccess() {
+ val threads = for (i <- 1 to 5) yield new Thread(new Runnable {
+ def run = Obj
+ })
+
+ threads foreach (_.start())
+ threads foreach (_.join())
+ }
+
+ def runTest {
+ try {
+ multiThreadedAccess()
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("multi-threaded failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+ }
+
+ def run { (new Class77_2) } // trigger
+}
+
+
+trait Trait80_1 {
+
+ class Class77_2 {
+ { // in primary constructor
+ @volatile var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+
+ def multiThreadedAccess() {
+ val threads = for (i <- 1 to 5) yield new Thread(new Runnable {
+ def run = Obj
+ })
+
+ threads foreach (_.start())
+ threads foreach (_.join())
+ }
+
+ def runTest {
+ try {
+ multiThreadedAccess()
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("multi-threaded failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+ }
+
+ def run { (new Class77_2) }
+}
+
+
+class Class82_1 {
+
+ trait Trait81_2 {
+ { // in primary constructor
+ @volatile var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+
+ def multiThreadedAccess() {
+ val threads = for (i <- 1 to 5) yield new Thread(new Runnable {
+ def run = Obj
+ })
+
+ threads foreach (_.start())
+ threads foreach (_.join())
+ }
+
+ def runTest {
+ try {
+ multiThreadedAccess()
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("multi-threaded failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+ }
+
+ def run { (new Trait81_2 {}) }
+}
+
+
+object Object83_1 {
+
+ trait Trait81_2 {
+ { // in primary constructor
+ @volatile var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+
+ def multiThreadedAccess() {
+ val threads = for (i <- 1 to 5) yield new Thread(new Runnable {
+ def run = Obj
+ })
+
+ threads foreach (_.start())
+ threads foreach (_.join())
+ }
+
+ def runTest {
+ try {
+ multiThreadedAccess()
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("multi-threaded failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+ }
+
+ def run { (new Trait81_2 {}) } // trigger
+}
+
+
+trait Trait84_1 {
+
+ trait Trait81_2 {
+ { // in primary constructor
+ @volatile var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+
+ def multiThreadedAccess() {
+ val threads = for (i <- 1 to 5) yield new Thread(new Runnable {
+ def run = Obj
+ })
+
+ threads foreach (_.start())
+ threads foreach (_.join())
+ }
+
+ def runTest {
+ try {
+ multiThreadedAccess()
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("multi-threaded failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+ }
+
+ def run { (new Trait81_2 {}) }
+}
+
+
+class Class90_1 {
+
+ val value89_2 = {
+ @volatile var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+
+ def multiThreadedAccess() {
+ val threads = for (i <- 1 to 5) yield new Thread(new Runnable {
+ def run = Obj
+ })
+
+ threads foreach (_.start())
+ threads foreach (_.join())
+ }
+
+ def runTest {
+ try {
+ multiThreadedAccess()
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("multi-threaded failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+
+ def run { value89_2 }
+}
+
+
+trait Trait92_1 {
+
+ val value89_2 = {
+ @volatile var ObjCounter = 0
+
+ object Obj { ObjCounter += 1}
+
+ def multiThreadedAccess() {
+ val threads = for (i <- 1 to 5) yield new Thread(new Runnable {
+ def run = Obj
+ })
+
+ threads foreach (_.start())
+ threads foreach (_.join())
+ }
+
+ def runTest {
+ try {
+ multiThreadedAccess()
+ assert(ObjCounter == 1, "multiple instances: " + ObjCounter)
+ println("ok")
+ } catch {
+ case e => print("multi-threaded failed "); e.printStackTrace()
+ }
+ }
+
+ runTest // trigger
+ }
+
+ def run { value89_2 }
+}
+
+
+object Test {
+ def main(args: Array[String]) {
+ (new Class2_1).run
+ Object3_1.run
+ (new Trait4_1 {}).run
+ (new Class6_1).run
+ Object7_1.run
+ (new Trait8_1 {}).run
+ (new Class10_1).run
+ Object11_1.run
+ (new Trait12_1 {}).run
+ (new Class14_1).run
+ Object15_1.run
+ (new Trait16_1 {}).run
+ (new Class18_1).run
+ Object19_1.run
+ (new Trait20_1 {}).run
+ (new Class22_1).run
+ Object23_1.run
+ (new Trait24_1 {}).run
+ (new Class26_1).run
+ Object27_1.run
+ (new Trait28_1 {}).run
+ (new Class30_1).run
+ Object31_1.run
+ (new Trait32_1 {}).run
+ (new Class34_1).run
+ Object35_1.run
+ (new Trait36_1 {}).run
+ (new Class38_1).run
+ Object39_1.run
+ (new Trait40_1 {}).run
+ (new Class42_1).run
+ Object43_1.run
+ (new Trait44_1 {}).run
+ (new Class46_1).run
+ Object47_1.run
+ (new Trait48_1 {}).run
+ (new Class50_1).run
+ Object51_1.run
+ (new Trait52_1 {}).run
+ (new Class54_1).run
+ Object55_1.run
+ (new Trait56_1 {}).run
+ (new Class58_1).run
+ Object59_1.run
+ (new Trait60_1 {}).run
+ (new Class62_1).run
+ Object63_1.run
+ (new Trait64_1 {}).run
+ (new Class66_1).run
+ Object67_1.run
+ (new Trait68_1 {}).run
+ (new Class70_1).run
+ Object71_1.run
+ (new Trait72_1 {}).run
+ (new Class74_1).run
+ Object75_1.run
+ (new Trait76_1 {}).run
+ (new Class78_1).run
+ Object79_1.run
+ (new Trait80_1 {}).run
+ (new Class82_1).run
+ Object83_1.run
+ (new Trait84_1 {}).run
+ (new Class90_1).run
+ (new Trait92_1 {}).run
+ }
+}
+
diff --git a/test/files/run/intmap.scala b/test/files/run/intmap.scala
index 8c3e0b2ca3..c5f8d7d3d1 100644
--- a/test/files/run/intmap.scala
+++ b/test/files/run/intmap.scala
@@ -1,4 +1,4 @@
-object Test extends Application{
+object Test extends App{
import scala.collection.immutable.IntMap;
val it = IntMap(8 -> 2, 11 -> 3, 1 -> 2, 7 -> 13);
diff --git a/test/files/run/io-position.check b/test/files/run/io-position.check
new file mode 100644
index 0000000000..09f743d750
--- /dev/null
+++ b/test/files/run/io-position.check
Binary files differ
diff --git a/test/files/run/io-position.scala b/test/files/run/io-position.scala
new file mode 100644
index 0000000000..1093704fa4
--- /dev/null
+++ b/test/files/run/io-position.scala
@@ -0,0 +1,13 @@
+object Test {
+ Console.setErr(Console.out)
+
+ def main(args: Array[String]): Unit = {
+ try {
+ xml.parsing.ConstructingParser.fromSource(io.Source.fromString("<foo>"), false).document()
+ } catch {
+ case e:Exception => println(e.getMessage)
+ }
+ }
+
+}
+
diff --git a/test/files/run/iq.scala b/test/files/run/iq.scala
index 88a2884fcc..e5f9e4705a 100644
--- a/test/files/run/iq.scala
+++ b/test/files/run/iq.scala
@@ -7,10 +7,10 @@ import scala.collection.immutable.Queue
object iq {
def main {
/* Create an empty queue. */
- val q: Queue[Int] = Queue.Empty
+ val q: Queue[Int] = Queue.empty
- /* Test isEmpty.
- * Expected: Empty
+ /* Test isEmpty.
+ * Expected: Empty
*/
if (q.isEmpty) {
Console.println("Empty")
@@ -20,14 +20,14 @@ object iq {
//val q2 = q + 42 + 0 // deprecated
val q2 = q.enqueue(42).enqueue(0)
- /* Test is empty and dequeue.
+ /* Test is empty and dequeue.
* Expected: Head: 42
*/
val q4 =
if (q2.isEmpty) {
Console.println("Empty")
q2
- }
+ }
else {
val (head, q3) = q2.dequeue
Console.println("Head: " + head)
@@ -36,8 +36,8 @@ object iq {
/* Test sequence enqueing. */
val q5: Queue[Any] = q4.enqueue(List(1,2,3,4,5,6,7,8,9))
- /* Test toString.
- * Expected: Head: q5: Queue(0,1,2,3,4,5,6,7,8,9)
+ /* Test toString.
+ * Expected: Head: q5: Queue(0,1,2,3,4,5,6,7,8,9)
*/
Console.println("q5: " + q5)
/* Test apply
@@ -45,7 +45,7 @@ object iq {
*/
Console.println("q5[5]: " + q5(5))
- val q5c: Queue[Int] = Queue.Empty.enqueue(List(0, 1, 2, 3, 4, 5, 6, 7, 8, 9))
+ val q5c: Queue[Int] = Queue.empty.enqueue(List(0, 1, 2, 3, 4, 5, 6, 7, 8, 9))
/* Testing ==
* Expected: q5 == q9: true
@@ -59,7 +59,7 @@ object iq {
//val q8 = q7 + 10 + 11 //deprecated
val q8 = q7.enqueue(10).enqueue(11)
/* Test dequeu
- * Expected: q8: Queue(2,3,4,5,6,7,8,9,10,11)
+ * Expected: q8: Queue(2,3,4,5,6,7,8,9,10,11)
*/
Console.println("q8: " + q8)
val q9 = Queue(2,3,4,5,6,7,8,9,10,11)
@@ -70,14 +70,14 @@ object iq {
Console.println("q8 == q9: " + (q8 == q9))
/* Testing elements
- * Expected: Elements: 1 2 3 4 5 6 7 8 9
+ * Expected: Elements: 1 2 3 4 5 6 7 8 9
*/
- Console.print("Elements: ");
+ Console.print("Elements: ");
q6.iterator.foreach(e => Console.print(" "+ e + " "))
- Console.println;
+ Console.println;
/* Testing mkString
- * Expected: String: <1-2-3-4-5-6-7-8-9>
+ * Expected: String: <1-2-3-4-5-6-7-8-9>
*/
Console.println("String: " + q6.mkString("<","-",">"))
@@ -89,7 +89,7 @@ object iq {
/* Testing front
* Expected: Front: 1
*/
- Console.println("Front: " + q6.front);
+ Console.println("Front: " + q6.front);
}
}
diff --git a/test/files/run/is-valid-num.scala b/test/files/run/is-valid-num.scala
new file mode 100644
index 0000000000..f919a21dee
--- /dev/null
+++ b/test/files/run/is-valid-num.scala
@@ -0,0 +1,20 @@
+object Test {
+ def x = BigInt("10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
+ def y = BigDecimal("" + (Short.MaxValue + 1) + ".0")
+
+ def l1 = Int.MaxValue.toLong + 1
+ def l2 = Int.MinValue.toLong - 1
+
+ def main(args: Array[String]): Unit = {
+ assert(!x.isValidLong, x)
+ assert(!x.isValidInt, x)
+ assert(!x.isValidChar, x)
+ assert(!x.isValidByte, x)
+ assert(!y.isValidShort, y)
+ assert(y.isValidChar, y)
+ assert(y.isValidInt, y)
+
+ assert(!l1.isValidInt && (l1 - 1).isValidInt, l1)
+ assert(!l2.isValidInt && (l2 + 1).isValidInt, l2)
+ }
+}
diff --git a/test/files/run/issue192.scala b/test/files/run/issue192.scala
index 55130072b7..d8db8b5816 100644
--- a/test/files/run/issue192.scala
+++ b/test/files/run/issue192.scala
@@ -1,16 +1,16 @@
-object Test extends Application {
-
+object Test extends App {
+
def f1(p: Any{def unary_+ : Int}) = +p
def f2(p: Any{def unary_- : Int}) = -p
def f3(p: Any{def unary_~ : Int}) = ~p
def f4(p: Any{def unary_! : Boolean}) = !p
-
+
def f5(p: Any{def +(q: Int): Int}) = p + 7
def f6(p: Any{def -(q: Int): Int}) = p - 7
def f7(p: Any{def *(q: Int): Int}) = p * 7
def f8(p: Any{def /(q: Int): Int}) = p / 7
def f9(p: Any{def %(q: Int): Int}) = p % 7
-
+
def f10(p: Any{def |(q: Int): Int}) = p | 7
def f11(p: Any{def |(q: Boolean): Boolean}) = p | true
def f12(p: Any{def ^(q: Int): Int}) = p ^ 7
@@ -19,11 +19,11 @@ object Test extends Application {
def f15(p: Any{def &(q: Boolean): Boolean}) = p & true
def f16(p: Any{def ||(q: Boolean): Boolean}) = p || true
def f17(p: Any{def &&(q: Boolean): Boolean}) = p && true
-
+
def f18(p: Any{def <<(q: Int): Int}) = p << 7
def f19(p: Any{def >>(q: Int): Int}) = p >> 7
def f20(p: Any{def >>>(q: Int): Int}) = p >>> 7
-
+
def f21(p: Any{def toByte: Byte}) = p.toByte
def f22(p: Any{def toShort: Short}) = p.toShort
def f23(p: Any{def toChar: Char}) = p.toChar
@@ -31,28 +31,28 @@ object Test extends Application {
def f25(p: Any{def toLong: Long}) = p.toLong
def f26(p: Any{def toFloat: Float}) = p.toFloat
def f27(p: Any{def toDouble: Double}) = p.toDouble
-
+
def f28(p: Any{def ==(q: Int): Boolean}) = p == 7
def f29(p: Any{def !=(q: Int): Boolean}) = p != 7
def f30(p: Any{def ==(q: Boolean): Boolean}) = p == true
def f31(p: Any{def !=(q: Boolean): Boolean}) = p != true
-
+
def f32(p: Any{def <(q: Int): Boolean}) = p < 7
def f33(p: Any{def <=(q: Int): Boolean}) = p <= 7
def f34(p: Any{def >=(q: Int): Boolean}) = p >= 7
def f35(p: Any{def >(q: Int): Boolean}) = p > 7
-
+
print("f1 = "); println(f1(1) == +1)
print("f2 = "); println(f2(1) == -1)
print("f3 = "); println(f3(1) == ~1)
print("f4 = "); println(f4(true) == !true)
-
+
print("f5 = "); println(f5(4) == (4 + 7))
print("f6 = "); println(f6(4) == (4 - 7))
print("f7 = "); println(f7(4) == (4 * 7))
print("f8 = "); println(f8(4) == (4 / 7))
print("f9 = "); println(f9(4) == (4 % 7))
-
+
print("f10 = "); println(f10(4) == (4 | 7))
print("f11 = "); println(f11(false) == (false | true))
print("f12 = "); println(f12(4) == (4 ^ 7))
@@ -61,11 +61,11 @@ object Test extends Application {
print("f15 = "); println(f15(false) == (false & true))
print("f16 = "); println(f16(false) == (false || true))
print("f17 = "); println(f17(false) == (false && true))
-
+
print("f18 = "); println(f18(4) == (4 << 7))
print("f19 = "); println(f19(-4) == (-4 >> 7))
print("f20 = "); println(f20(-4) == (-4 >>> 7))
-
+
print("f21 = "); println(f21(4.2) == (4.2.toByte))
print("f22 = "); println(f22(4.2) == (4.2.toShort))
print("f23 = "); println(f23(4.2) == (4.2.toChar))
@@ -73,17 +73,17 @@ object Test extends Application {
print("f25 = "); println(f25(4.2) == (4.2.toLong))
print("f26 = "); println(f26(4.2) == (4.2.toFloat))
print("f27 = "); println(f27(4.2) == (4.2.toDouble))
-
+
print("f28 = "); println(f28(4) == (4 == 7))
print("f29 = "); println(f29(4) == (4 != 7))
print("f30 = "); println(f30(false) == (false == true))
print("f31 = "); println(f31(false) == (false != true))
-
+
print("f32 = "); println(f32(4) == (4 < 7))
print("f33 = "); println(f33(4) == (4 <= 7))
print("f34 = "); println(f34(4) == (4 >= 7))
print("f35 = "); println(f35(4) == (4 > 7))
-
+
println("ok")
-
+
}
diff --git a/test/files/run/iterables.scala b/test/files/run/iterables.scala
index 5334b456ff..ad30f47316 100644
--- a/test/files/run/iterables.scala
+++ b/test/files/run/iterables.scala
@@ -1,4 +1,4 @@
-object Test extends Application {
+object Test extends App {
class Test(n: Int) extends Iterable[Int] {
private var i = 0
def iterator = new Iterator[Int] {
diff --git a/test/files/run/iterator-iterate-lazy.scala b/test/files/run/iterator-iterate-lazy.scala
new file mode 100644
index 0000000000..73886f192b
--- /dev/null
+++ b/test/files/run/iterator-iterate-lazy.scala
@@ -0,0 +1,5 @@
+object Test {
+ def main(args: Array[String]): Unit = {
+ Iterator.iterate(1 to 5 toList)(_.tail).takeWhile(_.nonEmpty).map(_.head).toList
+ }
+}
diff --git a/test/files/run/iterator3444.scala b/test/files/run/iterator3444.scala
new file mode 100644
index 0000000000..2d0643bd56
--- /dev/null
+++ b/test/files/run/iterator3444.scala
@@ -0,0 +1,23 @@
+
+
+// ticked #3444
+object Test {
+
+ def main(args: Array[String]) {
+ val it = (1 to 12).toSeq.iterator
+
+ assert(it.next == 1)
+ assert(it.take(2).toList == List(2, 3))
+
+ val jt = (4 to 12).toSeq.iterator
+ assert(jt.next == 4)
+ assert(jt.drop(5).toList == List(10, 11, 12))
+
+ val kt = (1 until 10).toSeq.iterator
+ assert(kt.drop(50).toList == Nil)
+
+ val mt = (1 until 5).toSeq.iterator
+ assert(mt.take(50).toList == List(1, 2, 3, 4))
+ }
+
+}
diff --git a/test/files/run/iterators.check b/test/files/run/iterators.check
index cd1b79144a..bb139c1610 100644
--- a/test/files/run/iterators.check
+++ b/test/files/run/iterators.check
@@ -7,7 +7,7 @@ test check_drop was successful
test check_foreach was successful
test check_forall was successful
test check_fromArray was successful
-test check_collect was successful
+test check_toSeq was successful
test check_indexOf was successful
test check_findIndexOf was successful
diff --git a/test/files/run/iterators.scala b/test/files/run/iterators.scala
index 5879d38df3..b85291cd72 100644
--- a/test/files/run/iterators.scala
+++ b/test/files/run/iterators.scala
@@ -75,26 +75,26 @@ object Test {
def check_fromArray: Int = { // ticket #429
val a = List(1, 2, 3, 4).toArray
- var xs0 = Iterator.fromArray(a).toList;
- var xs1 = Iterator.fromArray(a, 0, 1).toList;
- var xs2 = Iterator.fromArray(a, 0, 2).toList;
- var xs3 = Iterator.fromArray(a, 0, 3).toList;
- var xs4 = Iterator.fromArray(a, 0, 4).toList;
+ var xs0 = a.iterator.toList;
+ var xs1 = a.slice(0, 1).iterator.toList;
+ var xs2 = a.slice(0, 2).iterator.toList;
+ var xs3 = a.slice(0, 3).iterator.toList;
+ var xs4 = a.slice(0, 4).iterator.toList;
xs0.length + xs1.length + xs2.length + xs3.length + xs4.length
}
-
- def check_collect: String =
- List(1, 2, 3, 4, 5).iterator.collect.mkString("x")
-
+
+ def check_toSeq: String =
+ List(1, 2, 3, 4, 5).iterator.toSeq.mkString("x")
+
def check_indexOf: String = {
val i = List(1, 2, 3, 4, 5).indexOf(4)
val j = List(1, 2, 3, 4, 5).indexOf(16)
"" + i + "x" + j
}
-
+
def check_findIndexOf: String = {
- val i = List(1, 2, 3, 4, 5).findIndexOf { x: Int => x >= 4 }
- val j = List(1, 2, 3, 4, 5).findIndexOf { x: Int => x >= 16 }
+ val i = List(1, 2, 3, 4, 5).indexWhere { x: Int => x >= 4 }
+ val j = List(1, 2, 3, 4, 5).indexWhere { x: Int => x >= 16 }
"" + i + "x" + j
}
@@ -124,7 +124,7 @@ object Test {
check_success("check_foreach", check_foreach, 190)
check_success("check_forall", check_forall, 0)
check_success("check_fromArray",check_fromArray, 14)
- check_success("check_collect", check_collect, "1x2x3x4x5")
+ check_success("check_toSeq", check_toSeq, "1x2x3x4x5")
check_success("check_indexOf", check_indexOf, "3x-1")
check_success("check_findIndexOf", check_findIndexOf, "3x-1")
println()
diff --git a/test/files/run/java-erasure.check b/test/files/run/java-erasure.check
new file mode 100644
index 0000000000..f2ad6c76f0
--- /dev/null
+++ b/test/files/run/java-erasure.check
@@ -0,0 +1 @@
+c
diff --git a/test/files/run/java-erasure.scala b/test/files/run/java-erasure.scala
new file mode 100644
index 0000000000..0441ad705b
--- /dev/null
+++ b/test/files/run/java-erasure.scala
@@ -0,0 +1,10 @@
+object Test {
+ val list = new java.util.ArrayList[String] { };
+ list add "a"
+ list add "c"
+ list add "b"
+
+ def main(args: Array[String]): Unit = {
+ println(java.util.Collections.max(list))
+ }
+}
diff --git a/test/files/run/json.check b/test/files/run/json.check
index a735624221..d4d2b41658 100644
--- a/test/files/run/json.check
+++ b/test/files/run/json.check
@@ -1,12 +1,21 @@
-Some(List((name,value)))
-Some(List((name,va1ue)))
-Some(List((name,List((name1,va1ue1), (name2,va1ue2)))))
-Some(List((name,")))
-Some(List((age,0.0)))
+Passed compare: {"name" : "value"}
+Passed compare: {"name" : "va1ue"}
+Passed compare: {"name" : {"name1" : "va1ue1", "name2" : "va1ue2"}}
+Passed parse : {"name" : "\""}
+Passed compare: Map(function -> add_symbol)
+Passed compare: [{"a" : "team"}, {"b" : 52.0}]
+Passed compare: Map()
+Passed compare: List()
+Passed compare: [4.0, 1.0, 3.0, 2.0, 6.0, 5.0, 8.0, 7.0]
+Passed parse : {"age" : 0.0}
+Passed compare: {"name" : "va1ue"}
+Passed compare: {"name" : {"name1" : "va1ue1", "name2" : "va1ue2"}}
+Passed compare: [4.0, 1.0, 3.0, 2.0, 6.0, 5.0, 8.0, 7.0]
+Passed compare: {"\u006e\u0061\u006d\u0065" : "\u0076\u0061\u006c"}
-Some(List((firstName,John), (lastName,Smith), (address,List((streetAddress,21 2nd Street), (city,New York), (state,NY), (postalCode,10021.0))), (phoneNumbers,List(212 732-1234, 646 123-4567))))
+Passed compare: Map(firstName -> John, lastName -> Smith, address -> Map(streetAddress -> 21 2nd Street, city -> New York, state -> NY, postalCode -> 10021.0), phoneNumbers -> List(212 732-1234, 646 123-4567))
-Some(List((fullname,Sean Kelly), (org,SK Consulting), (emailaddrs,List(List((type,work), (value,kelly@seankelly.biz)), List((type,home), (pref,1.0), (value,kelly@seankelly.tv)))), (telephones,List(List((type,work), (pref,1.0), (value,+1 214 555 1212)), List((type,fax), (value,+1 214 555 1213)), List((type,mobile), (value,+1 214 555 1214)))), (addresses,List(List((type,work), (format,us), (value,1234 Main StnSpringfield, TX 78080-1216)), List((type,home), (format,us), (value,5678 Main StnSpringfield, TX 78080-1316)))), (urls,List(List((type,work), (value,http://seankelly.biz/)), List((type,home), (value,http://seankelly.tv/))))))
+Passed parse : {"addresses" : [{"format" : "us", "type" : "work", "value" : "1234 Main StnSpringfield, TX 78080-1216"}, {"format" : "us", "type" : "home", "value" : "5678 Main StnSpringfield, TX 78080-1316"}], "emailaddrs" : [{"type" : "work", "value" : "kelly@seankelly.biz"}, {"pref" : 1.0, "type" : "home", "value" : "kelly@seankelly.tv"}], "fullname" : "Sean Kelly", "org" : "SK Consulting", "telephones" : [{"pref" : 1.0, "type" : "work", "value" : "+1 214 555 1212"}, {"type" : "fax", "value" : "+1 214 555 1213"}, {"type" : "mobile", "value" : "+1 214 555 1214"}], "urls" : [{"type" : "work", "value" : "http:\/\/seankelly.biz\/"}, {"type" : "home", "value" : "http:\/\/seankelly.tv\/"}]}
-Some(List((web-app,List((servlet,List(List((servlet-name,cofaxCDS), (servlet-class,org.cofax.cds.CDSServlet), (init-param,List((configGlossary:installationAt,Philadelphia, PA), (configGlossary:adminEmail,ksm@pobox.com), (configGlossary:poweredBy,Cofax), (configGlossary:poweredByIcon,/images/cofax.gif), (configGlossary:staticPath,/content/static), (templateProcessorClass,org.cofax.WysiwygTemplate), (templateLoaderClass,org.cofax.FilesTemplateLoader), (templatePath,templates), (templateOverridePath,), (defaultListTemplate,listTemplate.htm), (defaultFileTemplate,articleTemplate.htm), (useJSP,false), (jspListTemplate,listTemplate.jsp), (jspFileTemplate,articleTemplate.jsp), (cachePackageTagsTrack,200.0), (cachePackageTagsStore,200.0), (cachePackageTagsRefresh,60.0), (cacheTemplatesTrack,100.0), (cacheTemplatesStore,50.0), (cacheTemplatesRefresh,15.0), (cachePagesTrack,200.0), (cachePagesStore,100.0), (cachePagesRefresh,10.0), (cachePagesDirtyRead,10.0), (searchEngineListTemplate,forSearchEnginesList.htm), (searchEngineFileTemplate,forSearchEngines.htm), (searchEngineRobotsDb,WEB-INF/robots.db), (useDataStore,true), (dataStoreClass,org.cofax.SqlDataStore), (redirectionClass,org.cofax.SqlRedirection), (dataStoreName,cofax), (dataStoreDriver,com.microsoft.jdbc.sqlserver.SQLServerDriver), (dataStoreUrl,jdbc:microsoft:sqlserver://LOCALHOST:1433;DatabaseName=goon), (dataStoreUser,sa), (dataStorePassword,dataStoreTestQuery), (dataStoreTestQuery,SET NOCOUNT ON;select test='test';), (dataStoreLogFile,/usr/local/tomcat/logs/datastore.log), (dataStoreInitConns,10.0), (dataStoreMaxConns,100.0), (dataStoreConnUsageLimit,100.0), (dataStoreLogLevel,debug), (maxUrlLength,500.0)))), List((servlet-name,cofaxEmail), (servlet-class,org.cofax.cds.EmailServlet), (init-param,List((mailHost,mail1), (mailHostOverride,mail2)))), List((servlet-name,cofaxAdmin), (servlet-class,org.cofax.cds.AdminServlet)), List((servlet-name,fileServlet), (servlet-class,org.cofax.cds.FileServlet)), List((servlet-name,cofaxTools), (servlet-class,org.cofax.cms.CofaxToolsServlet), (init-param,List((templatePath,toolstemplates/), (log,1.0), (logLocation,/usr/local/tomcat/logs/CofaxTools.log), (logMaxSize,), (dataLog,1.0), (dataLogLocation,/usr/local/tomcat/logs/dataLog.log), (dataLogMaxSize,), (removePageCache,/content/admin/remove?cache=pages&id=), (removeTemplateCache,/content/admin/remove?cache=templates&id=), (fileTransferFolder,/usr/local/tomcat/webapps/content/fileTransferFolder), (lookInContext,1.0), (adminGroupID,4.0), (betaServer,true)))))), (servlet-mapping,List((cofaxCDS,/), (cofaxEmail,/cofaxutil/aemail/*), (cofaxAdmin,/admin/*), (fileServlet,/static/*), (cofaxTools,/tools/*))), (taglib,List((taglib-uri,cofax.tld), (taglib-location,/WEB-INF/tlds/cofax.tld)))))))
+Passed parse : {"web-app" : {"servlet" : [{"init-param" : {"cachePackageTagsRefresh" : 60.0, "cachePackageTagsStore" : 200.0, "cachePackageTagsTrack" : 200.0, "cachePagesDirtyRead" : 10.0, "cachePagesRefresh" : 10.0, "cachePagesStore" : 100.0, "cachePagesTrack" : 200.0, "cacheTemplatesRefresh" : 15.0, "cacheTemplatesStore" : 50.0, "cacheTemplatesTrack" : 100.0, "configGlossary:adminEmail" : "ksm@pobox.com", "configGlossary:installationAt" : "Philadelphia, PA", "configGlossary:poweredBy" : "Cofax", "configGlossary:poweredByIcon" : "\/images\/cofax.gif", "configGlossary:staticPath" : "\/content\/static", "dataStoreClass" : "org.cofax.SqlDataStore", "dataStoreConnUsageLimit" : 100.0, "dataStoreDriver" : "com.microsoft.jdbc.sqlserver.SQLServerDriver", "dataStoreInitConns" : 10.0, "dataStoreLogFile" : "\/usr\/local\/tomcat\/logs\/datastore.log", "dataStoreLogLevel" : "debug", "dataStoreMaxConns" : 100.0, "dataStoreName" : "cofax", "dataStorePassword" : "dataStoreTestQuery", "dataStoreTestQuery" : "SET NOCOUNT ON;select test='test';", "dataStoreUrl" : "jdbc:microsoft:sqlserver:\/\/LOCALHOST:1433;DatabaseName=goon", "dataStoreUser" : "sa", "defaultFileTemplate" : "articleTemplate.htm", "defaultListTemplate" : "listTemplate.htm", "jspFileTemplate" : "articleTemplate.jsp", "jspListTemplate" : "listTemplate.jsp", "maxUrlLength" : 500.0, "redirectionClass" : "org.cofax.SqlRedirection", "searchEngineFileTemplate" : "forSearchEngines.htm", "searchEngineListTemplate" : "forSearchEnginesList.htm", "searchEngineRobotsDb" : "WEB-INF\/robots.db", "templateLoaderClass" : "org.cofax.FilesTemplateLoader", "templateOverridePath" : "", "templatePath" : "templates", "templateProcessorClass" : "org.cofax.WysiwygTemplate", "useDataStore" : true, "useJSP" : false}, "servlet-class" : "org.cofax.cds.CDSServlet", "servlet-name" : "cofaxCDS"}, {"init-param" : {"mailHost" : "mail1", "mailHostOverride" : "mail2"}, "servlet-class" : "org.cofax.cds.EmailServlet", "servlet-name" : "cofaxEmail"}, {"servlet-class" : "org.cofax.cds.AdminServlet", "servlet-name" : "cofaxAdmin"}, {"servlet-class" : "org.cofax.cds.FileServlet", "servlet-name" : "fileServlet"}, {"init-param" : {"adminGroupID" : 4.0, "betaServer" : true, "dataLog" : 1.0, "dataLogLocation" : "\/usr\/local\/tomcat\/logs\/dataLog.log", "dataLogMaxSize" : "", "fileTransferFolder" : "\/usr\/local\/tomcat\/webapps\/content\/fileTransferFolder", "log" : 1.0, "logLocation" : "\/usr\/local\/tomcat\/logs\/CofaxTools.log", "logMaxSize" : "", "lookInContext" : 1.0, "removePageCache" : "\/content\/admin\/remove?cache=pages&id=", "removeTemplateCache" : "\/content\/admin\/remove?cache=templates&id=", "templatePath" : "toolstemplates\/"}, "servlet-class" : "org.cofax.cms.CofaxToolsServlet", "servlet-name" : "cofaxTools"}], "servlet-mapping" : {"cofaxAdmin" : "\/admin\/*", "cofaxCDS" : "\/", "cofaxEmail" : "\/cofaxutil\/aemail\/*", "cofaxTools" : "\/tools\/*", "fileServlet" : "\/static\/*"}, "taglib" : {"taglib-location" : "\/WEB-INF\/tlds\/cofax.tld", "taglib-uri" : "cofax.tld"}}}
diff --git a/test/files/run/json.scala b/test/files/run/json.scala
index ec0bad7ebe..a81f12564c 100644
--- a/test/files/run/json.scala
+++ b/test/files/run/json.scala
@@ -1,14 +1,122 @@
import scala.util.parsing.json._
+import scala.collection.immutable.TreeMap
-object Test extends Application {
- def printJSON(s: String) {
- println(JSON parse s)
+object Test extends App {
+ /* This method converts parsed JSON back into real JSON notation with objects in
+ * sorted-key order. Not required by the spec, but it allows us to do a stable
+ * toString comparison. */
+ def jsonToString(in : Any) : String = in match {
+ case l : List[_] => "[" + l.map(jsonToString).mkString(", ") + "]"
+ case m : Map[String,_] => "{" + m.iterator.toList
+ .sortWith({ (x,y) => x._1 < y._1 })
+ .map({ case (k,v) => "\"" + k + "\": " + jsonToString(v) })
+ .mkString(", ") + "}"
+ case s : String => "\"" + s + "\""
+ case x => x.toString
}
- printJSON("{\"name\": \"value\"}")
- printJSON("{\"name\": \"va1ue\"}") // ticket #136
- printJSON("{\"name\": { \"name1\": \"va1ue1\", \"name2\": \"va1ue2\" } }")
- printJSON("{\"name\": \"\\u0022\"}")
+
+ /*
+ * This method takes input JSON values and sorts keys on objects.
+ */
+ def sortJSON(in : Any) : Any = in match {
+ case l : List[_] => l.map(sortJSON)
+ case m : Map[String,_] => TreeMap(m.mapValues(sortJSON).iterator.toSeq : _*)
+ // For the object versions, sort their contents, ugly casts and all...
+ case JSONObject(data) => JSONObject(sortJSON(data).asInstanceOf[Map[String,Any]])
+ case JSONArray(data) => JSONArray(sortJSON(data).asInstanceOf[List[Any]])
+ case x => x
+ }
+
+ // For this one, just parsing should be considered a pass
+ def printJSON(given : String) {
+ JSON parseRaw given match {
+ case None => println("Parse failed for \"%s\"".format(given))
+ case Some(parsed) => println("Passed parse : " + sortJSON(parsed))
+ }
+ }
+
+ // For this usage, do a raw parse (to JSONObject/JSONArray)
+ def printJSON(given : String, expected : JSONType) {
+ printJSON(given, JSON.parseRaw, expected)
+ }
+
+ // For this usage, do a raw parse (to JSONType and subclasses)
+ def printJSONFull(given : String, expected : Any) {
+ printJSON(given, JSON.parseFull, expected)
+ }
+
+ // For this usage, do configurable parsing so that you can do raw if desired
+ def printJSON[T](given : String, parser : String => T, expected : Any) {
+ parser(given) match {
+ case None => println("Parse failed for \"%s\"".format(given))
+ case Some(parsed) => if (parsed == expected) {
+ println("Passed compare: " + parsed)
+ } else {
+ val eStr = sortJSON(expected).toString
+ val pStr = sortJSON(parsed).toString
+ stringDiff(eStr,pStr)
+ }
+ }
+ }
+
+ def stringDiff (expected : String, actual : String) {
+ if (expected != actual) {
+ // Figure out where the Strings differ and generate a marker
+ val mismatchPosition = expected.toList.zip(actual.toList).indexWhere({case (x,y) => x != y}) match {
+ case -1 => Math.min(expected.length, actual.length)
+ case x => x
+ }
+ val reason = (" " * mismatchPosition) + "^"
+ println("Expected: %s\nGot : %s \n %s".format(expected, actual, reason))
+
+ } else {
+ println("Passed compare: " + actual)
+ }
+ }
+
+
+ // The library should differentiate between lower case "l" and number "1" (ticket #136)
+ printJSON("{\"name\" : \"value\"}", JSONObject(Map("name" -> "value")))
+ printJSON("{\"name\" : \"va1ue\"}", JSONObject(Map("name" -> "va1ue")))
+ printJSON("{\"name\" : { \"name1\" : \"va1ue1\", \"name2\" : \"va1ue2\" } }",
+ JSONObject(Map("name" -> JSONObject(Map("name1" -> "va1ue1", "name2" -> "va1ue2")))))
+
+ // Unicode escapes should be handled properly
+ printJSON("{\"name\" : \"\\u0022\"}")
+
+ // The library should return a map for JSON objects (ticket #873)
+ printJSONFull("{\"function\" : \"add_symbol\"}", Map("function" -> "add_symbol"))
+
+ // The library should recurse into arrays to find objects (ticket #2207)
+ printJSON("[{\"a\" : \"team\"},{\"b\" : 52}]", JSONArray(List(JSONObject(Map("a" -> "team")), JSONObject(Map("b" -> 52.0)))))
+
+ // The library should differentiate between empty maps and lists (ticket #3284)
+ printJSONFull("{}", Map())
+ printJSONFull("[]", List())
+
+ // Lists should be returned in the same order as specified
+ printJSON("[4,1,3,2,6,5,8,7]", JSONArray(List[Double](4,1,3,2,6,5,8,7)))
+
+ // Additional tests
printJSON("{\"age\": 0}")
+
+ // The library should do a proper toString representation using default and custom renderers (ticket #3605)
+ stringDiff("{\"name\" : \"va1ue\"}", JSONObject(Map("name" -> "va1ue")).toString)
+ stringDiff("{\"name\" : {\"name1\" : \"va1ue1\", \"name2\" : \"va1ue2\"}}",
+ JSONObject(Map("name" -> JSONObject(TreeMap("name1" -> "va1ue1", "name2" -> "va1ue2")))).toString)
+
+ stringDiff("[4.0, 1.0, 3.0, 2.0, 6.0, 5.0, 8.0, 7.0]", JSONArray(List[Double](4,1,3,2,6,5,8,7)).toString)
+
+ // A test method that escapes all characters in strings
+ def escapeEverything (in : Any) : String = in match {
+ case s : String => "\"" + s.map(c => "\\u%04x".format(c : Int)).mkString + "\""
+ case jo : JSONObject => jo.toString(escapeEverything)
+ case ja : JSONArray => ja.toString(escapeEverything)
+ case other => other.toString
+ }
+
+ stringDiff("{\"\\u006e\\u0061\\u006d\\u0065\" : \"\\u0076\\u0061\\u006c\"}", JSONObject(Map("name" -> "val")).toString(escapeEverything))
+
println
// from http://en.wikipedia.org/wiki/JSON
@@ -27,8 +135,25 @@ object Test extends Application {
"646 123-4567"
]
}"""
- //println(sample1)
- printJSON(sample1)
+
+ // Should be equivalent to:
+ val sample1Obj = Map(
+ "firstName" -> "John",
+ "lastName" -> "Smith",
+ "address" -> Map(
+ "streetAddress" -> "21 2nd Street",
+ "city" -> "New York",
+ "state" -> "NY",
+ "postalCode" -> 10021
+ ),
+ "phoneNumbers"-> List(
+ "212 732-1234",
+ "646 123-4567"
+ )
+ )
+
+
+ printJSONFull(sample1, sample1Obj)
println
// from http://www.developer.com/lang/jscript/article.php/3596836
@@ -56,14 +181,14 @@ object Test extends Application {
{"type": "home", "value": "http://seankelly.tv/"}
]
}"""
- //println(sample2)
+
printJSON(sample2)
println
// from http://json.org/example.html
val sample3 = """
{"web-app": {
- "servlet": [
+ "servlet": [
{
"servlet-name": "cofaxCDS",
"servlet-class": "org.cofax.cds.CDSServlet",
@@ -119,7 +244,7 @@ object Test extends Application {
{
"servlet-name": "cofaxAdmin",
"servlet-class": "org.cofax.cds.AdminServlet"},
-
+
{
"servlet-name": "fileServlet",
"servlet-class": "org.cofax.cds.FileServlet"},
@@ -146,13 +271,13 @@ object Test extends Application {
"cofaxAdmin": "/admin/*",
"fileServlet": "/static/*",
"cofaxTools": "/tools/*"},
-
+
"taglib": {
"taglib-uri": "cofax.tld",
"taglib-location": "/WEB-INF/tlds/cofax.tld"}
}
}"""
- //println(sample3)
+
printJSON(sample3)
println
}
diff --git a/test/files/run/kmpSliceSearch.check b/test/files/run/kmpSliceSearch.check
new file mode 100644
index 0000000000..9ce0eba5a8
--- /dev/null
+++ b/test/files/run/kmpSliceSearch.check
@@ -0,0 +1,4 @@
+6 6
+5 10
+-1 -1
+4 4
diff --git a/test/files/run/kmpSliceSearch.scala b/test/files/run/kmpSliceSearch.scala
new file mode 100644
index 0000000000..0f7e052d5f
--- /dev/null
+++ b/test/files/run/kmpSliceSearch.scala
@@ -0,0 +1,60 @@
+object Test {
+ import scala.collection.SeqLike
+ def slowSearch[A](xs: Seq[A], ys: Seq[A], start: Int = 0): Int = {
+ if (xs startsWith ys) start
+ else if (xs.isEmpty) -1
+ else slowSearch(xs.tail, ys, start+1)
+ }
+ def bkwSlowSearch[A](xs: Seq[A], ys: Seq[A]) = {
+ val i = slowSearch(xs.reverse, ys.reverse)
+ if (i<0) i
+ else xs.length - ys.length - i
+ }
+ def main(args: Array[String]) {
+ val rng = new scala.util.Random(java.lang.Integer.parseInt("kmp",36))
+
+ // Make sure we agree with naive implementation
+ for (h <- Array(2,5,1000)) {
+ for (i <- 0 to 100) {
+ for (j <- 0 to 10) {
+ val xs = (0 to j).map(_ => (rng.nextInt & 0x7FFFFFFF) % h)
+ val xsa = xs.toArray
+ val xsv = Vector() ++ xs
+ val xsl = xs.toList
+ val xss = Vector[Seq[Int]](xs,xsa,xsv,xsl)
+ for (k <- 0 to 5) {
+ val ys = (0 to k).map(_ => (rng.nextInt & 0x7FFFFFFF) % h)
+ val ysa = ys.toArray
+ val ysv = Vector() ++ ys
+ val ysl = ys.toList
+ val yss = Vector[Seq[Int]](ys,ysa,ysv,ysl)
+ val fwd_slow = slowSearch(xs,ys)
+ val bkw_slow = bkwSlowSearch(xs,ys)
+ val fwd_fast = xss.flatMap(xs => yss.map(ys => SeqLike.indexOf(xs,0,xs.length,ys,0,ys.length,0)))
+ val bkw_fast = xss.flatMap(xs => yss.map(ys => SeqLike.lastIndexOf(xs,0,xs.length,ys,0,ys.length,xs.length)))
+ assert(fwd_fast.forall(_ == fwd_slow))
+ assert(bkw_fast.forall(_ == bkw_slow))
+ }
+ }
+ }
+ }
+
+ // Check performance^Wcorrectness of common small test cases
+ val haystacks = List[Seq[Int]](
+ Array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15),
+ Vector(99,2,99,99,2,99,99,99,2,99,99,99,99,2),
+ List(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1),
+ 1 to 15
+ )
+ val needles = List[Seq[Int]](
+ Array(7,8,9,10),
+ Vector(99,99,99),
+ List(1,1,1,1,1,2),
+ 5 to 9
+ )
+ (haystacks zip needles) foreach {
+ case (hay, nee) =>
+ println(hay.indexOfSlice(nee,2) + " " + hay.lastIndexOfSlice(nee,13))
+ }
+ }
+}
diff --git a/test/files/run/lazy-concurrent.check b/test/files/run/lazy-concurrent.check
new file mode 100644
index 0000000000..33cff9d4f8
--- /dev/null
+++ b/test/files/run/lazy-concurrent.check
@@ -0,0 +1 @@
+Initializing singleton.
diff --git a/test/files/run/lazy-concurrent.scala b/test/files/run/lazy-concurrent.scala
new file mode 100644
index 0000000000..4699ed6a15
--- /dev/null
+++ b/test/files/run/lazy-concurrent.scala
@@ -0,0 +1,17 @@
+object Test {
+ def main(args: Array[String]) {
+ class Singleton {
+ val field = ()
+ println("Initializing singleton.")
+ }
+ lazy val Singleton = new Singleton
+
+ var i = 0
+ while (i < 4) {
+ new Thread(new Runnable {
+ def run = Singleton.field
+ }).start
+ i += 1
+ }
+ }
+}
diff --git a/test/files/run/lazy-exprs.scala b/test/files/run/lazy-exprs.scala
index 8a80423646..fc724bd10b 100644
--- a/test/files/run/lazy-exprs.scala
+++ b/test/files/run/lazy-exprs.scala
@@ -2,7 +2,7 @@ object TestExpressions {
def patmatchScrut {
lazy val z1: Option[String] = { println("forced <z1>"); Some("lazy z1") }
-
+
val res = z1 match {
case Some(msg) => msg
case None => "failed"
@@ -17,10 +17,10 @@ object TestExpressions {
def patmatchCase {
val t: Option[String] = Some("test")
val res = t match {
- case Some(msg) =>
+ case Some(msg) =>
lazy val z1 = { println("forced <z1>"); "lazy z1" }
z1
-
+
case None => "failed"
}
print("lazy val in case: ")
@@ -36,9 +36,9 @@ object TestExpressions {
print("lazy val in case: ")
val t: Option[String] = Some("lazy Z1")
t match {
- case Some(Z1) =>
+ case Some(Z1) =>
println("ok")
-
+
case None =>
println("failed")
}
@@ -60,13 +60,13 @@ object TestExpressions {
print("lazy val in pattern: ")
val t: Option[String] = Some("LazyField")
t match {
- case Some(LazyField) =>
+ case Some(LazyField) =>
println("ok")
-
+
case None =>
println("failed")
}
- }
+ }
lazy val (x, y) = ({print("x"); "x"}, {print("y"); "y"})
def testPatLazyVal {
@@ -89,7 +89,7 @@ object TestExpressions {
}
-object Test extends Application {
+object Test extends App {
TestExpressions.test
}
diff --git a/test/files/run/lazy-leaks.scala b/test/files/run/lazy-leaks.scala
index e7073b5b60..22a3770d07 100644
--- a/test/files/run/lazy-leaks.scala
+++ b/test/files/run/lazy-leaks.scala
@@ -2,14 +2,14 @@ class Lazy(f: => Int) {
lazy val get: Int = f
}
-object Test extends Application
+object Test extends App
{
val buffer = new scala.collection.mutable.ListBuffer[Lazy]
// This test requires 4 Mb of RAM if Lazy is discarding thunks
// It consumes 4 Gb of RAM if Lazy is not discarding thunks
- for (val idx <- Iterator.range(0, 1024)) {
+ for (idx <- Iterator.range(0, 1024)) {
val data = new Array[Int](1024*1024)
val lz: Lazy = new Lazy(data.length)
buffer += lz
diff --git a/test/files/run/lazy-locals.scala b/test/files/run/lazy-locals.scala
index be738a0f70..696aeeba96 100644
--- a/test/files/run/lazy-locals.scala
+++ b/test/files/run/lazy-locals.scala
@@ -1,5 +1,5 @@
-object Test extends Application {
+object Test extends App {
lazy val w = 10
@@ -162,24 +162,24 @@ object Test extends Application {
}
// see #1589
- object NestedLazyVals extends Application {
- lazy val x = {
+ object NestedLazyVals {
+ lazy val x = {
lazy val y = { println("forcing y"); 42; }
println("forcing x")
- y
+ y
}
-
+
val x1 = 5 + { lazy val y = 10 ; y }
-
+
println(x)
println(x1)
}
-
+
trait TNestedLazyVals {
lazy val x = { lazy val y = 42; y }
}
- object ONestedLazyVals extends Application with TNestedLazyVals {
+ object ONestedLazyVals extends TNestedLazyVals {
println(x)
}
diff --git a/test/files/run/lazy-override.check b/test/files/run/lazy-override-run.check
index a8f658d7b5..a8f658d7b5 100644
--- a/test/files/run/lazy-override.check
+++ b/test/files/run/lazy-override-run.check
diff --git a/test/files/run/lazy-override-run.scala b/test/files/run/lazy-override-run.scala
new file mode 100644
index 0000000000..d197408775
--- /dev/null
+++ b/test/files/run/lazy-override-run.scala
@@ -0,0 +1,26 @@
+class A {
+ lazy val x: Int = { print("/*A.x*/"); 2 }
+ lazy val y: Int = { print("/*A.y*/"); 2 }
+ lazy val z: Int = { print("/*A.z*/"); 2 }
+}
+
+class B extends A {
+ override lazy val x: Int = { print("/*B.x*/"); 3 }
+ override lazy val y: Int = { print("/*B.y*/"); 3 }
+ override lazy val z: Int = { print("/*B.z/"); 3 }
+}
+
+
+
+
+object Test extends App {
+ val a = new A
+ print("a.x=")
+ println(a.x)
+
+ val b = new B
+ print("b.x=")
+ println(b.x)
+ print("b.z=")
+ println(b.z)
+}
diff --git a/test/files/run/lazy-override.scala b/test/files/run/lazy-override.scala
deleted file mode 100644
index e5884257a8..0000000000
--- a/test/files/run/lazy-override.scala
+++ /dev/null
@@ -1,26 +0,0 @@
-class A {
- lazy val x: Int = { print("/*A.x*/"); 2 }
- lazy val y: Int = { print("/*A.y*/"); 2 }
- lazy val z: Int = { print("/*A.z*/"); 2 }
-}
-
-class B extends A {
- override lazy val x: Int = { print("/*B.x*/"); 3 }
- override lazy val y: Int = { print("/*B.y*/"); 3 }
- override lazy val z: Int = { print("/*B.z/"); 3 }
-}
-
-
-
-
-object Test extends Application {
- val a = new A
- print("a.x=")
- println(a.x)
-
- val b = new B
- print("b.x=")
- println(b.x)
- print("b.z=")
- println(b.z)
-}
diff --git a/test/files/run/lazy-traits.scala b/test/files/run/lazy-traits.scala
index 5a8d3f3db7..f04c0b8b1f 100644
--- a/test/files/run/lazy-traits.scala
+++ b/test/files/run/lazy-traits.scala
@@ -1,5 +1,5 @@
trait A {
- lazy val z1 = {
+ lazy val z1 = {
println("<forced z1>")
"lazy z1"
}
@@ -7,7 +7,7 @@ trait A {
/** Simple class which mixes in one lazy val. */
class Cls extends AnyRef with A {
- override def toString =
+ override def toString =
"z1 = " + z1
}
@@ -18,7 +18,7 @@ class Cls2 extends AnyRef with A {
"lazy z2"
}
- override def toString =
+ override def toString =
"z1 = " + z1 + " z2 = " + z2
}
@@ -34,7 +34,7 @@ class ClsB extends Object with B {
println("<forced zc1>")
"lazy zc1"
}
- override def toString =
+ override def toString =
"z1 = " + z1 + " zb1 = " + zb1 + " zc1 = " + zc1
}
@@ -73,39 +73,39 @@ class OverflownLazyFields extends Object with A {
lazy val zc30 = { println("<forced zc30>"); "lazy zc30" }
lazy val zc31 = { println("<forced zc31>"); "lazy zc31" }
- override def toString =
- "\nzc00 = " + zc00 +
- "\nzc01 = " + zc01 +
- "\nzc02 = " + zc02 +
- "\nzc03 = " + zc03 +
- "\nzc04 = " + zc04 +
- "\nzc05 = " + zc05 +
- "\nzc06 = " + zc06 +
- "\nzc07 = " + zc07 +
- "\nzc08 = " + zc08 +
- "\nzc09 = " + zc09 +
- "\nzc10 = " + zc10 +
- "\nzc11 = " + zc11 +
- "\nzc12 = " + zc12 +
- "\nzc13 = " + zc13 +
- "\nzc14 = " + zc14 +
- "\nzc15 = " + zc15 +
- "\nzc16 = " + zc16 +
- "\nzc17 = " + zc17 +
- "\nzc18 = " + zc18 +
- "\nzc19 = " + zc19 +
- "\nzc20 = " + zc20 +
- "\nzc21 = " + zc21 +
- "\nzc22 = " + zc22 +
- "\nzc23 = " + zc23 +
- "\nzc24 = " + zc24 +
- "\nzc25 = " + zc25 +
- "\nzc26 = " + zc26 +
- "\nzc27 = " + zc27 +
- "\nzc28 = " + zc28 +
- "\nzc29 = " + zc29 +
- "\nzc30 = " + zc30 +
- "\nzc31 = " + zc31 +
+ override def toString =
+ "\nzc00 = " + zc00 +
+ "\nzc01 = " + zc01 +
+ "\nzc02 = " + zc02 +
+ "\nzc03 = " + zc03 +
+ "\nzc04 = " + zc04 +
+ "\nzc05 = " + zc05 +
+ "\nzc06 = " + zc06 +
+ "\nzc07 = " + zc07 +
+ "\nzc08 = " + zc08 +
+ "\nzc09 = " + zc09 +
+ "\nzc10 = " + zc10 +
+ "\nzc11 = " + zc11 +
+ "\nzc12 = " + zc12 +
+ "\nzc13 = " + zc13 +
+ "\nzc14 = " + zc14 +
+ "\nzc15 = " + zc15 +
+ "\nzc16 = " + zc16 +
+ "\nzc17 = " + zc17 +
+ "\nzc18 = " + zc18 +
+ "\nzc19 = " + zc19 +
+ "\nzc20 = " + zc20 +
+ "\nzc21 = " + zc21 +
+ "\nzc22 = " + zc22 +
+ "\nzc23 = " + zc23 +
+ "\nzc24 = " + zc24 +
+ "\nzc25 = " + zc25 +
+ "\nzc26 = " + zc26 +
+ "\nzc27 = " + zc27 +
+ "\nzc28 = " + zc28 +
+ "\nzc29 = " + zc29 +
+ "\nzc30 = " + zc30 +
+ "\nzc31 = " + zc31 +
"\nz1 = " + z1
}
@@ -153,7 +153,7 @@ class MixedUnitLazy extends UnitLazy with UnitLazyT {
}
}
-object Test extends Application {
+object Test extends App {
def test(name: String, v: A) {
println(name + " test:")
diff --git a/test/files/run/lift-and-unlift.scala b/test/files/run/lift-and-unlift.scala
new file mode 100644
index 0000000000..b944c70155
--- /dev/null
+++ b/test/files/run/lift-and-unlift.scala
@@ -0,0 +1,27 @@
+import Function.unlift
+
+object Test {
+ def evens1(x: Int) = if (x % 2 == 0) Some(x) else None
+ def evens2: PartialFunction[Int, Int] = {
+ case x if x % 2 == 0 => x
+ }
+
+ def main(args: Array[String]): Unit = {
+ val f1 = evens1 _
+ val f2 = evens2.lift
+
+ assert(1 to 10 forall (x => f1(x) == f2(x)))
+
+ val f3 = unlift(f1)
+ val f4 = unlift(f2)
+
+ assert(1 to 10 forall { x =>
+ if (!f3.isDefinedAt(x)) !f4.isDefinedAt(x)
+ else f3(x) == f4(x)
+ })
+
+ assert(f1 eq f3.lift)
+ // Hmm, why is this not true:
+ // assert(f2 eq f4.lift)
+ }
+}
diff --git a/test/files/run/lists-run.scala b/test/files/run/lists-run.scala
new file mode 100644
index 0000000000..ccfe5bc260
--- /dev/null
+++ b/test/files/run/lists-run.scala
@@ -0,0 +1,185 @@
+/** Test the Scala implementation of class <code>scala.List</code>.
+ *
+ * @author Stephane Micheloud
+ */
+object Test {
+ def main(args: Array[String]) {
+ Test_multiset.run() // multiset operations: union, intersect, diff
+ Test1.run() //count, exists, filter, ..
+ Test2.run() //#468
+ Test3.run() //#1691
+ Test4.run() //#1721
+ Test5.run()
+ }
+}
+
+object Test_multiset {
+ def run() {
+ def isSubListOf[A](thiz: List[A], that: List[A]): Boolean =
+ thiz forall (that contains _)
+ val xs = List(1, 1, 2)
+ val ys = List(1, 2, 2, 3)
+ assert(List(1, 1, 2, 1, 2, 2, 3) == (xs union ys), "xs_union_ys")
+ assert(List(1, 2, 2, 3, 1, 1, 2) == (ys union xs), "ys_union_xs")
+ assert(List(1, 2) == (xs intersect ys), "xs_intersect_ys")
+ assert(List(1, 2) == (ys intersect xs), "ys_intersect_xs")
+ assert(List(1) == (xs diff ys), "xs_diff_ys")
+ assert(List(2, 3) == (ys diff xs), "ys_diff_xs")
+ assert(isSubListOf(xs filterNot (ys contains), xs diff ys), "xs_subset_ys")
+
+ val zs = List(0, 1, 1, 2, 2, 2)
+ assert(List(0, 1, 1, 2, 2, 2, 1, 2, 2, 3) == (zs union ys), "zs_union_ys")
+ assert(List(1, 2, 2, 3, 0, 1, 1, 2, 2, 2) == (ys union zs), "ys_union_zs")
+ assert(List(1, 2, 2) == (zs intersect ys), "zs_intersect_ys")
+ assert(List(1, 2, 2) == (ys intersect zs), "ys_intersect_zs")
+ assert(List(0, 1, 2) == (zs diff ys), "zs_diff_ys")
+ assert(List(3) == (ys diff zs), "ys_diff_zs")
+ assert(isSubListOf(zs filterNot (ys contains), zs diff ys), "xs_subset_ys")
+
+ val ws = List(2)
+ assert(List(2, 1, 2, 2, 3) == (ws union ys), "ws_union_ys")
+ assert(List(1, 2, 2, 3, 2) == (ys union ws), "ys_union_ws")
+ assert(List(2) == (ws intersect ys), "ws_intersect_ys")
+ assert(List(2) == (ys intersect ws), "ys_intersect_ws")
+ assert(List() == (ws diff ys), "ws_diff_ys")
+ assert(List(1, 2, 3) == (ys diff ws), "ys_diff_ws")
+ assert(isSubListOf(ws filterNot (ys contains), ws diff ys), "ws_subset_ys")
+
+ val vs = List(3, 2, 2, 1)
+ assert(List(1, 1, 2, 3, 2, 2, 1) == (xs union vs), "xs_union_vs")
+ assert(List(3, 2, 2, 1, 1, 1, 2) == (vs union xs), "vs_union_xs")
+ assert(List(1, 2) == (xs intersect vs), "xs_intersect_vs")
+ assert(List(2, 1) == (vs intersect xs), "vs_intersect_xs")
+ assert(List(1) == (xs diff vs), "xs_diff_vs")
+ assert(List(3, 2) == (vs diff xs), "vs_diff_xs")
+ assert(isSubListOf(xs filterNot (vs contains), xs diff vs), "xs_subset_vs")
+
+ // tests adapted from Thomas Jung
+ assert({
+ def sort(zs: List[Int]) = zs sortWith ( _ > _ )
+ sort(xs intersect ys) == sort(ys intersect xs)
+ }, "be symmetric after sorting")
+ assert({
+ def cardinality[A](zs: List[A], e: A): Int = zs count (e == _)
+ val intersection = xs intersect ys
+ xs forall (e => cardinality(intersection, e) == (cardinality(xs, e)
+min cardinality(ys, e)))
+ }, "obey min cardinality")
+ assert({
+ val intersection = xs intersect ys
+ val unconsumed = xs.foldLeft(intersection){(rest, e) =>
+ if (! rest.isEmpty && e == rest.head) rest.tail else rest
+ }
+ unconsumed.isEmpty
+ }, "maintain order")
+ assert(xs == (xs intersect xs),
+ "has the list as again intersection")
+ }
+}
+
+object Test1 {
+ def run() {
+ val xs1 = List(1, 2, 3)
+ val xs2 = List('a', 'b')
+ val xs3 = List(List(1, 2), List(4, 5))
+ val xs4 = List(2, 4, 6, 8)
+ val xs5 = List(List(3, 4), List(3), List(4, 5))
+
+ {
+ val n1 = xs1 count { e => e % 2 != 0 }
+ val n2 = xs4 count { e => e < 5 }
+ assert(4 == (n1 + n2), "check_count")
+ }
+ {
+ val b1 = xs1 exists { e => e % 2 == 0 }
+ val b2 = xs4 exists { e => e == 5 }
+ assert(!(b1 & b2), "check_exists")
+ }
+ {
+ val ys1 = xs1 filter { e => e % 2 == 0 }
+ val ys2 = xs4 filter { e => e < 5 }
+ assert(3 == ys1.length + ys2.length, "check_filter")
+ }
+ {
+ val n1 = xs1.foldLeft(0)((e1, e2) => e1 + e2)
+ val ys1 = xs4.foldLeft(List[Int]())((e1, e2) => e2 :: e1)
+ assert(10 == n1 + ys1.length, "check_foldLeft")
+ }
+ {
+ val b1 = xs1 forall { e => e < 10}
+ val b2 = xs4 forall { e => e % 2 == 0 }
+ assert(b1 & b2, "check_forall")
+ }
+ {
+ val ys1 = xs1 filterNot { e => e % 2 != 0 }
+ val ys2 = xs4 filterNot { e => e < 5 }
+ assert(3 == ys1.length + ys2.length, "check_remove")
+ }
+ {
+ val ys1 = xs1 zip xs2
+ val ys2 = xs1 zip xs3
+ assert(4 == ys1.length + ys2.length, "check_zip")
+ }
+ {
+ val ys1 = xs1.zipAll(xs2, 0, '_')
+ val ys2 = xs2.zipAll(xs1, '_', 0)
+ val ys3 = xs1.zipAll(xs3, 0, List(-1))
+ assert(9 == ys1.length + ys2.length + ys3.length, "check_zipAll")
+ }
+ }
+}
+
+object Test2 {
+ def run() {
+ val xs1 = List(1, 2, 3)
+ val xs2 = List(0)
+
+ val ys1 = xs1 ::: List(4)
+ assert(List(1, 2, 3, 4) == ys1, "check_:::")
+
+ val ys2 = ys1 filterNot (_ == 4)
+ assert(xs1 == ys2, "check_-")
+
+ val n2 = (xs1 ++ ys1).length
+ val n3 = (xs1 ++ Nil).length
+ val n4 = (xs1 ++ ((new collection.mutable.ArrayBuffer[Int]) += 0)).length
+ assert(14 == n2 + n3 + n4, "check_++")
+ }
+}
+
+object Test3 {
+ def run() {
+ try {
+ List.range(1, 10, 0)
+ } catch {
+ case e: IllegalArgumentException => ()
+ case _ => throw new Error("List.range(1, 10, 0)")
+ }
+ assert(List.range(10, 0, -2) == List(10, 8, 6, 4, 2))
+ }
+}
+
+object Test4 {
+ def run() {
+ assert(List(1,2,3).endsWith(List(2,3)))
+ assert(!List(1,2,3).endsWith(List(1,3)))
+ assert(List(1,2,3).endsWith(List()))
+ assert(!List(1,2,3).endsWith(List(0,1,2,3)))
+ assert(List(1,2,3).endsWith(List(1,2,3)))
+ assert(!List().endsWith(List(1,2,3)))
+ assert(List().endsWith(List()))
+ }
+}
+
+object Test5 {
+ def show(xs: List[String]) = xs match {
+ case "foo" :: args => args.toString
+ case List(x) => x.toString
+ case Nil => "Nil"
+ }
+ def run() {
+ assert(show(List()) == "Nil")
+ assert(show(List("a")) == "a")
+ assert(show(List("foo", "b")) == "List(b)")
+ }
+}
diff --git a/test/files/run/lists.scala b/test/files/run/lists.scala
deleted file mode 100644
index 695d5a0336..0000000000
--- a/test/files/run/lists.scala
+++ /dev/null
@@ -1,210 +0,0 @@
-//############################################################################
-// Lists
-//############################################################################
-
-//############################################################################
-
-import testing.SUnit._
-
-/** Test the Scala implementation of class <code>scala.List</code>.
- *
- * @author Stephane Micheloud
- */
-object Test extends TestConsoleMain {
- def suite = new TestSuite(
- Test_multiset, // multiset operations: union, intersect, diff
- Test1, //count, exists, filter, ..
- Test2, //#468
- Test3, //#1691
- Test4, //#1721
- Test5
- )
-}
-
-object Test_multiset extends TestCase("multiset") with Assert {
- override def enableStackTrace = false
- override def runTest {
- def isSubListOf[A](thiz: List[A], that: List[A]): Boolean =
- thiz forall (that contains _)
- val xs = List(1, 1, 2)
- val ys = List(1, 2, 2, 3)
- assertEquals("xs_union_ys", List(1, 1, 2, 1, 2, 2, 3), xs union ys)
- assertEquals("ys_union_xs", List(1, 2, 2, 3, 1, 1, 2), ys union xs)
- assertEquals("xs_intersect_ys", List(1, 2), xs intersect ys)
- assertEquals("ys_intersect_xs", List(1, 2), ys intersect xs)
- assertEquals("xs_diff_ys", List(1), xs diff ys)
- assertEquals("ys_diff_xs", List(2, 3), ys diff xs)
- assertTrue("xs_subset_ys", isSubListOf(xs -- ys, xs diff ys))
-
- val zs = List(0, 1, 1, 2, 2, 2)
- assertEquals("zs_union_ys", List(0, 1, 1, 2, 2, 2, 1, 2, 2, 3), zs union ys)
- assertEquals("ys_union_zs", List(1, 2, 2, 3, 0, 1, 1, 2, 2, 2), ys union zs)
- assertEquals("zs_intersect_ys", List(1, 2, 2), zs intersect ys)
- assertEquals("ys_intersect_zs", List(1, 2, 2), ys intersect zs)
- assertEquals("zs_diff_ys", List(0, 1, 2), zs diff ys)
- assertEquals("ys_diff_zs", List(3), ys diff zs)
- assertTrue("xs_subset_ys", isSubListOf(zs -- ys, zs diff ys))
-
- val ws = List(2)
- assertEquals("ws_union_ys", List(2, 1, 2, 2, 3), ws union ys)
- assertEquals("ys_union_ws", List(1, 2, 2, 3, 2), ys union ws)
- assertEquals("ws_intersect_ys", List(2), ws intersect ys)
- assertEquals("ys_intersect_ws", List(2), ys intersect ws)
- assertEquals("ws_diff_ys", List(), ws diff ys)
- assertEquals("ys_diff_ws", List(1, 2, 3), ys diff ws)
- assertTrue("ws_subset_ys", isSubListOf(ws -- ys, ws diff ys))
-
- val vs = List(3, 2, 2, 1)
- assertEquals("xs_union_vs", List(1, 1, 2, 3, 2, 2, 1), xs union vs)
- assertEquals("vs_union_xs", List(3, 2, 2, 1, 1, 1, 2), vs union xs)
- assertEquals("xs_intersect_vs", List(1, 2), xs intersect vs)
- assertEquals("vs_intersect_xs", List(2, 1), vs intersect xs)
- assertEquals("xs_diff_vs", List(1), xs diff vs)
- assertEquals("vs_diff_xs", List(3, 2), vs diff xs)
- assertTrue("xs_subset_vs", isSubListOf(xs -- vs, xs diff vs))
-
- // tests adapted from Thomas Jung
- assertTrue(
- "be symmetric after sorting", {
- def sort(zs: List[Int]) = zs sort ( _ > _ )
- sort(xs intersect ys) == sort(ys intersect xs)
- })
- assertTrue(
- "obey min cardinality", {
- def cardinality[A](zs: List[A], e: A): Int = zs count (e == _)
- val intersection = xs intersect ys
- xs forall (e => cardinality(intersection, e) == (cardinality(xs, e)
-min cardinality(ys, e)))
- })
- assertTrue(
- "maintain order", {
- val intersection = xs intersect ys
- val unconsumed = xs.foldLeft(intersection){(rest, e) =>
- if (! rest.isEmpty && e == rest.head) rest.tail else rest
- }
- unconsumed.isEmpty
- })
- assertTrue(
- "has the list as again intersection",
- xs == (xs intersect xs)
- )
- }
-}
-
-object Test1 extends TestCase("ctor") with Assert {
- override def enableStackTrace = false
- override def runTest {
- val xs1 = List(1, 2, 3)
- val xs2 = List('a', 'b')
- val xs3 = List(List(1, 2), List(4, 5))
- val xs4 = List(2, 4, 6, 8)
- val xs5 = List(List(3, 4), List(3), List(4, 5))
-
- {
- val n1 = xs1 count { e => e % 2 != 0 }
- val n2 = xs4 count { e => e < 5 }
- assertEquals("check_count", 4, n1 + n2)
- }
- {
- val b1 = xs1 exists { e => e % 2 == 0 }
- val b2 = xs4 exists { e => e == 5 }
- assertEquals("check_exists", false , b1 & b2)
- }
- {
- val ys1 = xs1 filter { e => e % 2 == 0 }
- val ys2 = xs4 filter { e => e < 5 }
- assertEquals("check_filter", 3, ys1.length + ys2.length)
- }
- {
- val n1 = xs1.foldLeft(0)((e1, e2) => e1 + e2)
- val ys1 = xs4.foldLeft(List[Int]())((e1, e2) => e2 :: e1)
- assertEquals("check_foldLeft", 10, n1 + ys1.length)
- }
- {
- val b1 = xs1 forall { e => e < 10}
- val b2 = xs4 forall { e => e % 2 == 0 }
- assertEquals("check_forall", true, b1 & b2)
- }
- {
- val ys1 = xs1 remove { e => e % 2 != 0 }
- val ys2 = xs4 remove { e => e < 5 }
- assertEquals("check_remove", 3, ys1.length + ys2.length)
- }
- {
- val ys1 = xs1 zip xs2
- val ys2 = xs1 zip xs3
- assertEquals("check_zip", 4, ys1.length + ys2.length)
- }
- {
- val ys1 = xs1.zipAll(xs2, 0, '_')
- val ys2 = xs2.zipAll(xs1, '_', 0)
- val ys3 = xs1.zipAll(xs3, 0, List(-1))
- assertEquals("check_zipAll", 9, ys1.length + ys2.length + ys3.length)
- }
- }
-}
-
-object Test2 extends TestCase("t0468") with Assert {
- override def enableStackTrace = false
- override def runTest {
- val xs1 = List(1, 2, 3)
- val xs2 = List(0)
-
- val ys1 = xs1 ::: List(4)
- assertEquals("check_:::", List(1, 2, 3, 4), ys1)
-
- val ys2 = ys1 - 4
- assertEquals("check_-", xs1, ys2)
-
- val n2 = (xs1 ++ ys1).length
- val n3 = (xs1 ++ Nil).length
- val n4 = (xs1 ++ ((new collection.mutable.ArrayBuffer[Int]) + 0)).length
- assertEquals("check_++", 14, n2 + n3 + n4)
- }
-}
-
-object Test3 extends TestCase("t1691") with Assert {
- override def enableStackTrace = false
- override def runTest {
- try {
- List.range(1, 10, 0)
- } catch {
- case e: IllegalArgumentException => ()
- case _ => throw new Error("List.range(1, 10, 0)")
- }
- try {
- List.range(1, 10, x => 4)
- } catch {
- case e: IllegalArgumentException => ()
- case _ => throw new Error("List.range(1, 10, x => 4)")
- }
- assertEquals(List.range(10, 0, x => x - 2),
- List(10, 8, 6, 4, 2))
- }
-}
-
-object Test4 extends TestCase("t1721") with Assert {
- override def enableStackTrace = false
- override def runTest {
- assertTrue(List(1,2,3).endsWith(List(2,3)))
- assertFalse(List(1,2,3).endsWith(List(1,3)))
- assertTrue(List(1,2,3).endsWith(List()))
- assertFalse(List(1,2,3).endsWith(List(0,1,2,3)))
- assertTrue(List(1,2,3).endsWith(List(1,2,3)))
- assertFalse(List().endsWith(List(1,2,3)))
- assertTrue(List().endsWith(List()))
- }
-}
-
-object Test5 extends TestCase("list pattern matching") {
- def show(xs: List[String]) = xs match {
- case "foo" :: args => args.toString
- case List(x) => x.toString
- case Nil => "Nil"
- }
- override def runTest {
- assert(show(List()) == "Nil")
- assert(show(List("a")) == "a")
- assert(show(List("foo", "b")) == "List(b)")
- }
-}
diff --git a/test/files/run/manifests.scala b/test/files/run/manifests.scala
new file mode 100644
index 0000000000..1da06b8aee
--- /dev/null
+++ b/test/files/run/manifests.scala
@@ -0,0 +1,147 @@
+object Test
+{
+ object Variances extends Enumeration {
+ val CO, IN, CONTRA = Value
+ }
+ import Variances.{ CO, IN, CONTRA }
+
+ object SubtypeRelationship extends Enumeration {
+ val NONE, SAME, SUB, SUPER = Value
+ }
+ import SubtypeRelationship.{ NONE, SAME, SUB, SUPER }
+
+ class VarianceTester[T, U, CC[_]](expected: Variances.Value)(
+ implicit ev1: Manifest[T], ev2: Manifest[U], ev3: Manifest[CC[T]], ev4: Manifest[CC[U]]) {
+
+ def elements = List(ev1 <:< ev2, ev2 <:< ev1)
+ def containers = List(ev3 <:< ev4, ev4 <:< ev3)
+
+ def isUnrelated = typeCompare[T, U] == NONE
+ def isSame = typeCompare[T, U] == SAME
+ def isSub = typeCompare[T, U] == SUB
+ def isSuper = typeCompare[T, U] == SUPER
+
+ def showsCovariance = (elements == containers)
+ def showsContravariance = (elements == containers.reverse)
+ def showsInvariance = containers forall (_ == isSame)
+
+ def allContainerVariances = List(showsCovariance, showsInvariance, showsContravariance)
+
+ def showsExpectedVariance =
+ if (isUnrelated) allContainerVariances forall (_ == false)
+ else if (isSame) allContainerVariances forall (_ == true)
+ else expected match {
+ case CO => showsCovariance && !showsContravariance && !showsInvariance
+ case IN => showsInvariance && !showsCovariance && !showsContravariance
+ case CONTRA => showsContravariance && !showsCovariance && !showsInvariance
+ }
+ }
+
+ def showsCovariance[T, U, CC[_]](implicit ev1: Manifest[T], ev2: Manifest[U], ev3: Manifest[CC[T]], ev4: Manifest[CC[U]]) =
+ new VarianceTester[T, U, CC](CO) showsExpectedVariance
+
+ def showsInvariance[T, U, CC[_]](implicit ev1: Manifest[T], ev2: Manifest[U], ev3: Manifest[CC[T]], ev4: Manifest[CC[U]]) =
+ new VarianceTester[T, U, CC](IN) showsExpectedVariance
+
+ def showsContravariance[T, U, CC[_]](implicit ev1: Manifest[T], ev2: Manifest[U], ev3: Manifest[CC[T]], ev4: Manifest[CC[U]]) =
+ new VarianceTester[T, U, CC](CONTRA) showsExpectedVariance
+
+ def typeCompare[T, U](implicit ev1: Manifest[T], ev2: Manifest[U]) = (ev1 <:< ev2, ev2 <:< ev1) match {
+ case (true, true) => SAME
+ case (true, false) => SUB
+ case (false, true) => SUPER
+ case (false, false) => NONE
+ }
+
+ def assertAnyRef[T: Manifest] = List(
+ manifest[T] <:< manifest[Any],
+ manifest[T] <:< manifest[AnyRef],
+ !(manifest[T] <:< manifest[AnyVal])
+ ) foreach (assert(_, "assertAnyRef"))
+
+ def assertAnyVal[T: Manifest] = List(
+ manifest[T] <:< manifest[Any],
+ !(manifest[T] <:< manifest[AnyRef]),
+ manifest[T] <:< manifest[AnyVal]
+ ) foreach (assert(_, "assertAnyVal"))
+
+ def assertSameType[T: Manifest, U: Manifest] = assert(typeCompare[T, U] == SAME, "assertSameType")
+ def assertSuperType[T: Manifest, U: Manifest] = assert(typeCompare[T, U] == SUPER, "assertSuperType")
+ def assertSubType[T: Manifest, U: Manifest] = assert(typeCompare[T, U] == SUB, "assertSubType")
+ def assertNoRelationship[T: Manifest, U: Manifest] = assert(typeCompare[T, U] == NONE, "assertNoRelationship")
+
+ def testVariancesVia[T: Manifest, U: Manifest] = assert(
+ typeCompare[T, U] == SUB &&
+ showsCovariance[T, U, List] &&
+ showsInvariance[T, U, Set],
+ "testVariancesVia"
+ )
+
+ def runAllTests = {
+ assertAnyVal[AnyVal]
+ assertAnyVal[Unit]
+ assertAnyVal[Int]
+ assertAnyVal[Double]
+ assertAnyVal[Boolean]
+ assertAnyVal[Char]
+
+ assertAnyRef[AnyRef]
+ assertAnyRef[java.lang.Object]
+ assertAnyRef[java.lang.Integer]
+ assertAnyRef[java.lang.Double]
+ assertAnyRef[java.lang.Boolean]
+ assertAnyRef[java.lang.Character]
+ assertAnyRef[String]
+ assertAnyRef[scala.List[String]]
+ assertAnyRef[scala.List[_]]
+
+ // variance doesn't work yet
+ // testVariancesVia[String, Any]
+ // testVariancesVia[String, AnyRef]
+
+ assertSubType[List[String], List[Any]]
+ assertSubType[List[String], List[AnyRef]]
+ assertNoRelationship[List[String], List[AnyVal]]
+
+ assertSubType[List[Int], List[Any]]
+ assertSubType[List[Int], List[AnyVal]]
+ assertNoRelationship[List[Int], List[AnyRef]]
+
+ // Nothing
+ assertSubType[Nothing, Any]
+ assertSubType[Nothing, AnyVal]
+ assertSubType[Nothing, AnyRef]
+ assertSubType[Nothing, String]
+ assertSubType[Nothing, List[String]]
+ assertSubType[Nothing, Null]
+ assertSameType[Nothing, Nothing]
+
+ // Null
+ assertSubType[Null, Any]
+ assertNoRelationship[Null, AnyVal]
+ assertSubType[Null, AnyRef]
+ assertSubType[Null, String]
+ assertSubType[Null, List[String]]
+ assertSameType[Null, Null]
+ assertSuperType[Null, Nothing]
+
+ // Any
+ assertSameType[Any, Any]
+ assertSuperType[Any, AnyVal]
+ assertSuperType[Any, AnyRef]
+ assertSuperType[Any, String]
+ assertSuperType[Any, List[String]]
+ assertSuperType[Any, Null]
+ assertSuperType[Any, Nothing]
+
+ // Misc unrelated types
+ assertNoRelationship[Unit, AnyRef]
+ assertNoRelationship[Unit, Int]
+ assertNoRelationship[Int, Long]
+ assertNoRelationship[Boolean, String]
+ assertNoRelationship[List[Boolean], List[String]]
+ assertNoRelationship[Set[Boolean], Set[String]]
+ }
+
+ def main(args: Array[String]): Unit = runAllTests
+}
diff --git a/test/files/run/mapConserve.scala b/test/files/run/mapConserve.scala
new file mode 100644
index 0000000000..013095b1de
--- /dev/null
+++ b/test/files/run/mapConserve.scala
@@ -0,0 +1,53 @@
+import scala.annotation.tailrec
+import scala.collection.mutable.ListBuffer
+
+object Test {
+ val maxListLength = 7 // up to 16, but larger is slower
+ var testCount = 0
+
+ def checkStackOverflow() = {
+ var xs: List[String] = Nil
+ for (i <- 0 until 250000)
+ xs = "X" :: xs
+
+ val lowers = xs.mapConserve(_.toLowerCase)
+ assert(xs.mapConserve(x => x) eq xs)
+ }
+
+ def checkBehaviourUnchanged(input: List[_], oldOutput: List[_], newOutput: List[_]) {
+ if (oldOutput eq input)
+ assert(newOutput eq oldOutput)
+ else {
+ assert(newOutput.head == oldOutput.head)
+ checkBehaviourUnchanged(input.tail, oldOutput.tail, newOutput.tail)
+ }
+ testCount += 1
+ }
+
+ var callCount = 0
+ val lastHexDigit: Function1[BigInt, AnyRef] = { x: BigInt => callCount+=1; if (x < 16) x else x % 16 }
+
+ def main(args: Array[String]) {
+ for (length <- 0 to maxListLength;
+ bitmap <- 0 until (1 << length);
+ data = List.range(0, length) map { x: Int =>
+ if ((bitmap & (1 << x)) != 0) BigInt(x+16)
+ else BigInt(x)
+ })
+ {
+ // Behaves like map with respect to ==
+ callCount = 0
+ val numUnconserved = data.reverse.dropWhile(_ < 16).length
+ val result = data mapConserve lastHexDigit
+ val mapResult = data map lastHexDigit
+ assert(result == mapResult)
+ assert((result drop numUnconserved) eq (data drop numUnconserved))
+ assert(callCount == 2 * length) // map, mapConserve call transform for each element in the list
+
+ // Behaves like existing mapConserve with respect to eq
+ checkBehaviourUnchanged(data, data mapConserve lastHexDigit, data mapConserve lastHexDigit)
+ }
+
+ checkStackOverflow();
+ }
+} \ No newline at end of file
diff --git a/test/files/run/mapValues.scala b/test/files/run/mapValues.scala
new file mode 100644
index 0000000000..bd1794bc51
--- /dev/null
+++ b/test/files/run/mapValues.scala
@@ -0,0 +1,8 @@
+object Test {
+ val m = Map(1 -> 1, 2 -> 2)
+ val mv = (m mapValues identity) - 1
+
+ def main(args: Array[String]): Unit = {
+ assert(mv.size == 1)
+ }
+}
diff --git a/test/files/run/map_java_conversions.scala b/test/files/run/map_java_conversions.scala
new file mode 100644
index 0000000000..7714b2cc74
--- /dev/null
+++ b/test/files/run/map_java_conversions.scala
@@ -0,0 +1,60 @@
+
+
+
+
+
+object Test {
+
+ def main(args: Array[String]) {
+ import collection.JavaConversions._
+
+ test(new java.util.HashMap[String, String])
+ test(new java.util.Properties)
+ testConcMap
+ }
+
+ def testConcMap {
+ import collection.JavaConversions._
+
+ val concMap = new java.util.concurrent.ConcurrentHashMap[String, String]
+
+ test(concMap)
+ val cmap = asScalaConcurrentMap(concMap)
+ cmap.putIfAbsent("absentKey", "absentValue")
+ cmap.put("somekey", "somevalue")
+ assert(cmap.remove("somekey", "somevalue") == true)
+ assert(cmap.replace("absentKey", "newAbsentValue") == Some("absentValue"))
+ assert(cmap.replace("absentKey", "newAbsentValue", ".......") == true)
+ }
+
+ def test(m: collection.mutable.Map[String, String]) {
+ m.clear
+ assert(m.size == 0)
+
+ m.put("key", "value")
+ assert(m.size == 1)
+
+ assert(m.put("key", "anotherValue") == Some("value"))
+ assert(m.put("key2", "value2") == None)
+ assert(m.size == 2)
+
+ m += (("key3", "value3"))
+ assert(m.size == 3)
+
+ m -= "key2"
+ assert(m.size == 2)
+ assert(m.nonEmpty)
+ assert(m.remove("key") == Some("anotherValue"))
+
+ m.clear
+ for (i <- 0 until 10) m += (("key" + i, "value" + i))
+ for ((k, v) <- m) assert(k.startsWith("key"))
+ }
+
+}
+
+
+
+
+
+
diff --git a/test/files/run/map_test.scala b/test/files/run/map_test.scala
index 4358878a81..1ea864ed58 100644
--- a/test/files/run/map_test.scala
+++ b/test/files/run/map_test.scala
@@ -1,6 +1,6 @@
import scala.collection.immutable.{ListMap, Map, TreeMap}
-object Test extends Application {
+object Test extends App {
test1()
test2()
println("OK")
@@ -16,15 +16,15 @@ object Test extends Application {
}
def test_map(myMap: Map[Int, String]) {
- val map1 = myMap.update(42,"The answer")
- val map2 = map1.update(17,"A small random number")
- val map3 = map2.update(666,"A bigger random number")
- val map4 = map3.update(4711,"A big random number")
+ val map1 = myMap.updated(42,"The answer")
+ val map2 = map1.updated(17,"A small random number")
+ val map3 = map2.updated(666,"A bigger random number")
+ val map4 = map3.updated(4711,"A big random number")
map1 == myMap + Pair(42, "The answer")
var i = 0
var map = map4
while(i < 43) {
- map = map.update(i,i.toString())
+ map = map.updated(i,i.toString())
i += 1
}
i = 0
diff --git a/test/files/run/matcharraytail.check b/test/files/run/matcharraytail.check
index 15381501a9..f2844d41a9 100644
--- a/test/files/run/matcharraytail.check
+++ b/test/files/run/matcharraytail.check
@@ -1,2 +1,2 @@
Array(foo, bar, baz)
-ArrayBuffer(bar, baz)
+Vector(bar, baz)
diff --git a/test/files/run/matcharraytail.scala b/test/files/run/matcharraytail.scala
index 0ee95bc014..24a8dd12b2 100644
--- a/test/files/run/matcharraytail.scala
+++ b/test/files/run/matcharraytail.scala
@@ -1,4 +1,4 @@
-object Test extends Application{
+object Test extends App{
Array("foo", "bar", "baz") match {
case x@Array("foo", bar @_*) => println(x.deep.toString); println(bar.toString);
case Array(x, y, z) => println("shouldn't have fallen through");
diff --git a/test/files/run/matchbytes.scala b/test/files/run/matchbytes.scala
index 73e55d47cb..7190886bab 100644
--- a/test/files/run/matchbytes.scala
+++ b/test/files/run/matchbytes.scala
@@ -1,7 +1,7 @@
-object Test extends Application{
+object Test extends App{
val x = (1 : Byte) match {
case 2 => println(2);
case 1 => println(1);
case _ => println("????");
}
-}
+}
diff --git a/test/files/run/matchemptyarray.scala b/test/files/run/matchemptyarray.scala
index a7147f29f6..1fa53b4829 100644
--- a/test/files/run/matchemptyarray.scala
+++ b/test/files/run/matchemptyarray.scala
@@ -1,4 +1,4 @@
-object Test extends Application{
+object Test extends App{
Array[String]() match {
case x@Array() => println(x.deep.toString());
}
diff --git a/test/files/run/matchintasany.scala b/test/files/run/matchintasany.scala
index 2c732b98b5..c6764b31b9 100644
--- a/test/files/run/matchintasany.scala
+++ b/test/files/run/matchintasany.scala
@@ -1,8 +1,8 @@
-object Test extends Application{
+object Test extends App{
val x = (1 : Any) match {
case 0xFFFFFFFF00000001L => println("Oops, overflow!");
case 2L => println(2);
case 1L => println(1);
case _ => println("????");
}
-}
+}
diff --git a/test/files/run/matchnull.scala b/test/files/run/matchnull.scala
index 2cc8550d47..cfb3049239 100644
--- a/test/files/run/matchnull.scala
+++ b/test/files/run/matchnull.scala
@@ -3,7 +3,7 @@ object Test
def f1 = null match { case x: AnyRef => 1 case _ => -1 }
def f2(x: Any) = x match { case 52 => 1 ; case null => -1 ; case _ => 0 }
def f3(x: AnyRef) = x match { case x: String => 1 ; case List(_) => 0 ; case null => -1 ; case _ => -2 }
-
+
def main(args: Array[String]): Unit = {
println(f1)
println(f2(null))
diff --git a/test/files/run/matchonstream.scala b/test/files/run/matchonstream.scala
index d38d81d9fc..c9bfefc216 100644
--- a/test/files/run/matchonstream.scala
+++ b/test/files/run/matchonstream.scala
@@ -1,3 +1,3 @@
-object Test extends Application{
+object Test extends App{
Stream.from(1) match { case Stream(1, 2, x @_*) => println("It worked!") }
}
diff --git a/test/files/run/misc.scala b/test/files/run/misc.scala
index 2ae76bd968..139d2d70f7 100644
--- a/test/files/run/misc.scala
+++ b/test/files/run/misc.scala
@@ -60,7 +60,7 @@ object Test {
Console.println;
val x = 13;
x;
- // !!! why are DefDef replaced by Block(Tree[0])? we should use Empty!
+ // !!! why are DefDef replaced by Block(Tree[0])? we should use Empty!
def f = 19;
f;
def f0() = 11;
diff --git a/test/files/run/missingparams.scala b/test/files/run/missingparams.scala
index 3672fdf76f..e9b1d27d68 100644
--- a/test/files/run/missingparams.scala
+++ b/test/files/run/missingparams.scala
@@ -6,14 +6,14 @@ final class Foo(val x: Int) {
// test that the closure elimination is not wrongly replacing
// 'that' by 'this'
- def intersect(that: Foo) =
- filter { dummy =>
+ def intersect(that: Foo) =
+ filter { dummy =>
// x // dummy
that.x > 0
}
}
-object Test extends Application {
+object Test extends App {
val foo1 = new Foo(42)
val foo2 = new Foo(-42)
diff --git a/test/files/run/mock.check b/test/files/run/mock.check
new file mode 100644
index 0000000000..967c4e20bb
--- /dev/null
+++ b/test/files/run/mock.check
@@ -0,0 +1,3 @@
+Hi, thanks for calling: that makes 1 times.
+Hi, thanks for calling: that makes 2 times.
+Hi, thanks for calling: that makes 3 times.
diff --git a/test/files/run/mock.scala b/test/files/run/mock.scala
new file mode 100644
index 0000000000..8778e20ef5
--- /dev/null
+++ b/test/files/run/mock.scala
@@ -0,0 +1,29 @@
+import scala.tools.reflect._
+import java.util.concurrent.Callable
+import java.io.Closeable
+
+object Test {
+ // It'd be really nice about now if functions had a common parent.
+ implicit def interfaceify(x: AnyRef): UniversalFn = UniversalFn(x)
+
+ def runner(x: Runnable) = x.run()
+ def caller[T](x: Callable[T]): T = x.call()
+ def closer(x: Closeable) = x.close()
+
+ def main(args: Array[String]): Unit = {
+ var counter = 0
+ val closure = () => {
+ counter += 1
+ println("Hi, thanks for calling: that makes " + counter + " times.")
+ counter
+ }
+
+ val int1 = closure.as[Runnable]
+ val int2 = closure.as[Callable[Int]]
+ val int3 = closure.as[Closeable]
+
+ runner(int1)
+ caller(int2)
+ closer(int3)
+ }
+}
diff --git a/test/files/run/multi-array.scala b/test/files/run/multi-array.scala
index 42f64751fd..36e21ae539 100644
--- a/test/files/run/multi-array.scala
+++ b/test/files/run/multi-array.scala
@@ -1,6 +1,6 @@
-object Test extends Application {
+object Test extends App {
val a = Array(1, 2, 3)
- println(a.deepToString)
+ println(a.deep.toString)
val aaiIncomplete = new Array[Array[Array[Int]]](3)
println(aaiIncomplete(0))
@@ -9,6 +9,6 @@ object Test extends Application {
println(aaiComplete.deep)
for (i <- 0 until 3; j <- 0 until 3)
aaiComplete(i)(j) = i + j
- println(aaiComplete.deepToString)
+ println(aaiComplete.deep.toString)
assert(aaiComplete.last.last == 4)
}
diff --git a/test/files/run/names-defaults.check b/test/files/run/names-defaults.check
index 937f95962b..5656d1a276 100644
--- a/test/files/run/names-defaults.check
+++ b/test/files/run/names-defaults.check
@@ -18,29 +18,20 @@ get: [
get: 4
get: @
4: @
+get: 10
+get: flu
+10: flu
get: 8
get: 9
get: %
get: 5
5: %, 17
12: ', 13, 16
+1: bird, swine, 10
+20
+30
+40
6: ~
-get: 7
-get: +
-7: +
-get: +
-get: 8
-8: +
-9: ?
-get: 39
-get: 38
-get: |
-10: |, 77
-get: 2.233
-get: <
-get: 13
-get: x
-13: x, 2.233, <
14: /
100: 100: nix, nix, 982, 982, 0
100: overridden, bla, 0, 0, 555
@@ -77,13 +68,12 @@ get: 20
get: 20
20
0
+1
dlkfj0dlkfj102
lskf2dkflj2
dlkd5nixda10nixdadklfj1dklfj
C(dlkf,234,struct)struct???
C(dflkj,234,Some(209))None!!
-20020100
-C(dlfkj,11,10)35dlkf
dflk10
1-1jupee
12.39
@@ -115,3 +105,18 @@ klfj1
blublu1
my text
List(1, 2)
+3
+1
+2
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+(1,0), (1,2)
diff --git a/test/files/run/names-defaults.scala b/test/files/run/names-defaults.scala
index 008939cc9d..e1bc7cbf59 100644
--- a/test/files/run/names-defaults.scala
+++ b/test/files/run/names-defaults.scala
@@ -1,4 +1,4 @@
-object Test extends Application {
+object Test extends App {
def get[T](x: T) = { println("get: "+ x); x }
// TESTS
@@ -13,21 +13,27 @@ object Test extends Application {
// mixing named and positional
test1(get(4), b = get("@"))
+ test1(a = get(10), get("flu"))
test2(get(8), v = get(9))(get("%"), l = get(5))
test3(12, 13)("'", d = 16)
+ test3(a = 1, "swine")(c = "bird", d = 10L)
// anonymous functions
- val f1: (Int, String) => Unit = test1(_, _); f1(6, "~")
- val f2: Int => Unit = test1(a = _, b = get("+")); f2(get(7))
- val f3 = test1(b = _: String, a = get(8)); f3(get("+"))
- val f4: (Int, String) => Unit = test1(_, b = _); f4(9, "?")
+ {
+ def doMod(f: Int => Unit) { f(20) }
+ var var1 = 0
+ doMod(var1 = _)
+ println(var1)
- val f5: Int => (String, Int) => Unit = test2(v = get(38), u = _)_
- f5(get(39))(get("|"), 10)
+ synchronized(var1 = 30)
+ println(var1)
- val f6: (Double, String) => Unit = test3(get(13), _)(d = _, c = get("x"))
- f6(get(2.233), get("<"))
+ var var2 = 0
+ def delay(var2: => Int) = { var2 }
+ println(delay(var2 = 40))
+ }
+ val f1: (Int, String) => Unit = test1(_, _); f1(6, "~")
test4(14)
@@ -133,6 +139,10 @@ object Test extends Application {
println(bn4())
println(bn4(a = 0))
+ class t2929(x: => Int = 1) {
+ def foo = x
+ }
+ println((new t2929()).foo)
// constructors
val a1 = new A(b = "dlkfj")(d = 102)
@@ -145,10 +155,6 @@ object Test extends Application {
println(c1.print)
val c2 = C("dflkj", c = Some(209): Option[Int])(None, "!!")
println(c2.print)
- val a_f: String => A[String, Nothing] = new A[String, Nothing](b = _)(d = 100)
- println(a_f("20").print)
- val c_f: Int => C[Int] = C("dlfkj", c = 10, b = _)(35, e = "dlkf")
- println(c_f(11).print)
// "super" qualifier
@@ -250,6 +256,9 @@ object Test extends Application {
def test11[T[P]](x: T[T[List[T[X forSome { type X }]]]] = List(1,2)) = x
// (cannot call f using the default, List(1,2) doesn't match the param type)
+ def multinest = { def bar(x: Int = 1) = { def bar(x: Int = 2) = x; bar() + x }; bar() }
+ println(multinest)
+
// #2290
def spawn(a: Int, b: => Unit) = { () }
@@ -263,6 +272,132 @@ object Test extends Application {
// #2390
case class A2390[T](x: Int) { def copy(a: Int)(b: Int = 0) = 0 }
+ // #2489
+ class A2489 { def foo { def bar(a: Int = 1) = a; bar(); val u = 0 } }
+ class A2489x2 { def foo { val v = 10; def bar(a: Int = 1, b: Int = 2) = a; bar(); val u = 0 } }
+
+ // a bug reported on the mailing lists, related to #2489
+ class Test2489 {
+ def foo(): Int = {
+ val i = 10
+ case class Foo(j: Int)
+ i
+ }
+ }
+
+ // #2784
+ class Test2784 {
+ object t { def f(x: Int) = x }
+ val one = t f (x = 1)
+ }
+
+ // #2820
+ class Test2820 {
+ class A[T](f: String = "ski!")
+ class C extends A
+ }
+
+ object t3178 {
+ def foo(x: String) = x
+ def foo(x: Int) = x
+ def bar(foo: Int) = foo
+ bar(foo = 1)
+ }
+
+
+ // #3207
+ trait P3207[T] {
+ class Inner(val f: T => Unit = (x: T) => println(x))
+ }
+
+ object Test3207_1 {
+ val p = new P3207[Int] {}
+ val q = new p.Inner() {
+ def g = 0
+ }
+ }
+
+ object Test3207_2 {
+ val p = new P3207[Int] {
+ val inner = new Inner() {
+ def g = 0
+ }
+ }
+ }
+
+ // #3344
+ def m3344_1 = { case class C(x: Int); C(1).copy(2).x }
+ m3344_1
+ def m3344_2 = { class C(val x: Int = 1); new C().x }
+ m3344_2
+
+ // #3338
+ object t3338 {
+ class Container {
+ class GenericClass[T](arg: String = "")
+ }
+
+ object Container extends Container
+
+ class Test {
+ val a = new Container.GenericClass()
+ }
+ }
+ (new t3338.Test).a
+
+
+ // subclassing and defaults in both class constructors
+ class CBLAH(val x: Int = 1)
+ class DBLAH(val y: String = "2") extends CBLAH()
+ (new DBLAH())
+
+ // deprecated names
+ def deprNam1(@deprecatedName('x) a: Int, @deprecatedName('y) b: Int) = a + b
+ deprNam1(y = 10, a = 1)
+ deprNam1(b = 2, x = 10)
+
+ object deprNam2 {
+ def f(@deprecatedName('s) x: String) = 1
+ def f(s: Object) = 2
+
+ def g(@deprecatedName('x) s: Object) = 3
+ def g(s: String) = 4
+ }
+ println(deprNam2.f(s = "dlf"))
+ println(deprNam2.f(s = new Object))
+ println(deprNam2.g(x = "sljkfd"))
+
+
+ // #3697
+ object t3697 {
+ def a(x: Int*)(s: Int = 3) = s
+ def b(a: Int, b: Int, c: Int*) = a + b
+ }
+ println(t3697.a(Seq(3): _*)())
+ println(t3697.a(3)())
+ println(t3697.a()())
+ println(t3697.a(2,3,1)())
+ println(t3697.b(a = 1, b = 2))
+ println(t3697.b(a = 1, b = 2, 3))
+ println(t3697.b(b = 1, a = 2, c = 3))
+ println(t3697.b(a = 1, b = 2, 3, 4))
+ println(t3697.b(a = 1, b = 2, Seq(3, 4): _*))
+ println(t3697.b(b = 1, a = 2, c = Seq(3, 4): _*))
+
+
+ // #4041
+ object t4041 {
+ def _1 = (0, 0) copy (_1 = 1)
+ def _2 = (1, 1) copy (_2 = 2)
+ }
+ println(""+ t4041._1 +", "+ t4041._2)
+
+ // #4441
+ case class C4441a()
+ case class C4441b()()
+ C4441a().copy()
+ C4441b()().copy()()
+
// DEFINITIONS
def test1(a: Int, b: String) = println(a +": "+ b)
def test2(u: Int, v: Int)(k: String, l: Int) = println(l +": "+ k +", "+ (u + v))
diff --git a/test/files/run/nodebuffer-array.check b/test/files/run/nodebuffer-array.check
new file mode 100644
index 0000000000..49f8bfaf8d
--- /dev/null
+++ b/test/files/run/nodebuffer-array.check
@@ -0,0 +1,3 @@
+<entry>
+ <elem>a</elem><elem>b</elem><elem>c</elem>
+ </entry>
diff --git a/test/files/run/nodebuffer-array.scala b/test/files/run/nodebuffer-array.scala
new file mode 100644
index 0000000000..4e1ffe1e5e
--- /dev/null
+++ b/test/files/run/nodebuffer-array.scala
@@ -0,0 +1,15 @@
+object Test {
+
+ def f(s: String) = {
+ <entry>
+ {
+ for (item <- s split ',') yield
+ <elem>{ item }</elem>
+ }
+ </entry>
+ }
+
+ def main(args: Array[String]): Unit = {
+ println(f("a,b,c"))
+ }
+}
diff --git a/test/files/run/null-and-intersect.check b/test/files/run/null-and-intersect.check
new file mode 100644
index 0000000000..81890cfeff
--- /dev/null
+++ b/test/files/run/null-and-intersect.check
@@ -0,0 +1,9 @@
+1
+2
+3
+4
+1
+2
+1
+2
+2
diff --git a/test/files/run/null-and-intersect.scala b/test/files/run/null-and-intersect.scala
new file mode 100644
index 0000000000..1437fa4b25
--- /dev/null
+++ b/test/files/run/null-and-intersect.scala
@@ -0,0 +1,34 @@
+object Test {
+ trait Immortal
+ class Bippy extends Immutable with Immortal
+ class Boppy extends Immutable
+
+ def f[T](x: Traversable[T]) = x match {
+ case _: Map[_, _] => 3
+ case _: Seq[_] => 2
+ case _: Iterable[_] => 1
+ case _ => 4
+ }
+ def g(x: Bippy) = x match {
+ case _: Immutable with Immortal => 1
+ case _ => 2
+ }
+ def h(x: Immutable) = x match {
+ case _: Immortal => 1
+ case _ => 2
+ }
+
+ def main(args: Array[String]): Unit = {
+ println(f(Set(1)))
+ println(f(Seq(1)))
+ println(f(Map(1 -> 2)))
+ println(f(null))
+
+ println(g(new Bippy))
+ println(g(null))
+
+ println(h(new Bippy))
+ println(h(new Boppy))
+ println(h(null))
+ }
+}
diff --git a/test/files/run/null-hash.scala b/test/files/run/null-hash.scala
new file mode 100644
index 0000000000..abf15e8166
--- /dev/null
+++ b/test/files/run/null-hash.scala
@@ -0,0 +1,15 @@
+object Test {
+ def f1 = List(5, 10, null: String).##
+ def f2(x: Any) = x.##
+ def f3 = ((55, "abc", null: List[Int])).##
+
+ def main(args: Array[String]): Unit = {
+ f1
+ f2(null)
+ f2(null: String)
+ f3
+ null.##
+ (null: Any).##
+ (null: String).##
+ }
+}
diff --git a/test/files/run/number-parsing.scala b/test/files/run/number-parsing.scala
new file mode 100644
index 0000000000..21551a3a07
--- /dev/null
+++ b/test/files/run/number-parsing.scala
@@ -0,0 +1,31 @@
+object Test {
+ def numTests() = {
+ val MinusZero = Float.box(-0.0f)
+ val PlusZero = Float.box(0.0f)
+
+ assert(PlusZero match { case MinusZero => false ; case _ => true })
+ assert(MinusZero match { case PlusZero => false ; case _ => true })
+ assert((MinusZero: scala.Float) == (PlusZero: scala.Float))
+ assert(!(MinusZero equals PlusZero))
+
+ List(
+ -5f.max(2) ,
+ -5f max 2 ,
+ -5.max(2) ,
+ -5 max 2
+ ) foreach (num => assert(num == 2))
+ }
+
+ case class Foo(val x: Double) {
+ def unary_- : Foo = Foo(-x)
+ def +(other: Foo): Foo = Foo(x + other.x)
+ }
+ def objTests = {
+ assert(-Foo(5.0) + Foo(10.0) == Foo(5.0))
+ assert(-Foo(5.0).+(Foo(10.0)) == Foo(-15.0))
+ }
+
+ def main(args: Array[String]): Unit = {
+ numTests()
+ }
+}
diff --git a/test/files/run/numbereq.scala b/test/files/run/numbereq.scala
new file mode 100644
index 0000000000..77a217df36
--- /dev/null
+++ b/test/files/run/numbereq.scala
@@ -0,0 +1,41 @@
+object Test {
+ def mkNumbers(x: Int): List[AnyRef] = {
+ val base = List(
+ BigDecimal(x),
+ BigInt(x),
+ new java.lang.Double(x.toDouble),
+ new java.lang.Float(x.toFloat),
+ new java.lang.Long(x.toLong),
+ new java.lang.Integer(x)
+ )
+ val extras = List(
+ if (x >= Short.MinValue && x <= Short.MaxValue) List(new java.lang.Short(x.toShort)) else Nil,
+ if (x >= Byte.MinValue && x <= Byte.MaxValue) List(new java.lang.Byte(x.toByte)) else Nil,
+ if (x >= Char.MinValue && x <= Char.MaxValue) List(new java.lang.Character(x.toChar)) else Nil
+ ).flatten
+
+ base ::: extras
+ }
+
+
+ def main(args: Array[String]): Unit = {
+ val ints = (0 to 15).toList map (Short.MinValue >> _)
+ val ints2 = ints map (x => -x)
+ val ints3 = ints map (_ + 1)
+ val ints4 = ints2 map (_ - 1)
+
+ val setneg1 = ints map mkNumbers
+ val setneg2 = ints3 map mkNumbers
+ val setpos1 = ints2 map mkNumbers
+ val setpos2 = ints4 map mkNumbers
+ val zero = mkNumbers(0)
+
+ val sets = setneg1 ++ setneg2 ++ List(zero) ++ setpos1 ++ setpos2
+
+ for (set <- sets ; x <- set ; y <- set) {
+ // println("'%s' == '%s' (%s == %s) (%s == %s)".format(x, y, x.hashCode, y.hashCode, x.##, y.##))
+ assert(x == y, "%s/%s != %s/%s".format(x, x.getClass, y, y.getClass))
+ assert(x.## == y.##, "%s != %s".format(x.getClass, y.getClass))
+ }
+ }
+} \ No newline at end of file
diff --git a/test/files/run/numeric-range.scala b/test/files/run/numeric-range.scala
new file mode 100644
index 0000000000..4645db6ef0
--- /dev/null
+++ b/test/files/run/numeric-range.scala
@@ -0,0 +1,13 @@
+
+
+
+
+object Test {
+ def main(args: Array[String]) {
+ val r = 'a' to 'z'
+ for (i <- -2 to (r.length + 2)) {
+ assert(r.take(i) == r.toList.take(i), (i, r.take(i)))
+ assert(r.drop(i) == r.toList.drop(i), (i, r.drop(i)))
+ }
+ }
+}
diff --git a/test/files/run/optimizer-array-load.check b/test/files/run/optimizer-array-load.check
new file mode 100644
index 0000000000..e8371f0060
--- /dev/null
+++ b/test/files/run/optimizer-array-load.check
@@ -0,0 +1,6 @@
+0
+1
+2
+3
+4
+5
diff --git a/test/files/run/optimizer-array-load.flags b/test/files/run/optimizer-array-load.flags
new file mode 100644
index 0000000000..eb4d19bcb9
--- /dev/null
+++ b/test/files/run/optimizer-array-load.flags
@@ -0,0 +1 @@
+-optimise \ No newline at end of file
diff --git a/test/files/run/optimizer-array-load.scala b/test/files/run/optimizer-array-load.scala
new file mode 100644
index 0000000000..a4d76f7385
--- /dev/null
+++ b/test/files/run/optimizer-array-load.scala
@@ -0,0 +1,16 @@
+object Test {
+ def f() = {
+ val ar = Array.ofDim[Int](5)
+ var x = 0
+
+ while (x<=5) {
+ println(x)
+ val a = ar(x)
+ x+=1
+ }
+ }
+ def main(args: Array[String]): Unit = {
+ try { f() ; assert(false, "should have thrown exception") }
+ catch { case _: ArrayIndexOutOfBoundsException => () }
+ }
+}
diff --git a/test/files/run/origins.check b/test/files/run/origins.check
new file mode 100644
index 0000000000..ffbf1c1f44
--- /dev/null
+++ b/test/files/run/origins.check
@@ -0,0 +1,6 @@
+
+>> Origins goxbox.Socks.boop logged 65 calls from 3 distinguished sources.
+
+ 50 Test$$anonfun$f3$1.apply(origins.scala:16)
+ 10 Test$$anonfun$f2$1.apply(origins.scala:15)
+ 5 Test$$anonfun$f1$1.apply(origins.scala:14)
diff --git a/test/files/run/origins.flags b/test/files/run/origins.flags
new file mode 100644
index 0000000000..a7e64e4f0c
--- /dev/null
+++ b/test/files/run/origins.flags
@@ -0,0 +1 @@
+-no-specialization \ No newline at end of file
diff --git a/test/files/run/origins.scala b/test/files/run/origins.scala
new file mode 100644
index 0000000000..ab873bca89
--- /dev/null
+++ b/test/files/run/origins.scala
@@ -0,0 +1,21 @@
+import scala.tools.nsc.util.Origins
+
+package goxbox {
+ object Socks {
+ val origins = Origins[Socks.type]("boop")
+
+ def boop(x: Int): Int = origins { 5 }
+ }
+}
+
+object Test {
+ import goxbox.Socks.boop
+
+ def f1() = 1 to 5 map boop
+ def f2() = 1 to 10 map boop
+ def f3() = 1 to 50 map boop
+
+ def main(args: Array[String]): Unit = {
+ f1() ; f2() ; f3()
+ }
+}
diff --git a/test/files/run/packrat1.scala b/test/files/run/packrat1.scala
index 26fa8e76f2..b5a4687378 100644
--- a/test/files/run/packrat1.scala
+++ b/test/files/run/packrat1.scala
@@ -2,11 +2,11 @@ import scala.util.parsing.combinator._
import scala.util.parsing.combinator.syntactical.StandardTokenParsers
import scala.util.parsing.input._
-import scala.util.parsing.syntax._
+import scala.util.parsing.combinator.token._
import scala.collection.mutable.HashMap
-object Test extends Application{
+object Test extends App{
import grammars._
val head = phrase(term)
@@ -21,15 +21,15 @@ object Test extends Application{
}
object grammars extends StandardTokenParsers with PackratParsers{
-
+
def extractResult(r : ParseResult[_]) = r match {
case Success(a,_) => a
case NoSuccess(a,_) => a
}
-
+
lexical.delimiters ++= List("+","-","*","/","(",")")
lexical.reserved ++= List("Hello","World")
-
+
/****
* term = term + fact | term - fact | fact
* fact = fact * num | fact / num | num
@@ -39,7 +39,7 @@ object grammars extends StandardTokenParsers with PackratParsers{
val term: PackratParser[Int] = (term~("+"~>fact) ^^ {case x~y => x+y}
|term~("-"~>fact) ^^ {case x~y => x-y}
|fact)
-
+
val fact: PackratParser[Int] = (fact~("*"~>numericLit) ^^ {case x~y => x*y.toInt}
|fact~("/"~>numericLit) ^^ {case x~y => x/y.toInt}
|"("~>term<~")"
diff --git a/test/files/run/packrat2.scala b/test/files/run/packrat2.scala
index e5c8db0f50..f55021a6a8 100644
--- a/test/files/run/packrat2.scala
+++ b/test/files/run/packrat2.scala
@@ -2,11 +2,11 @@ import scala.util.parsing.combinator._
import scala.util.parsing.combinator.syntactical.StandardTokenParsers
import scala.util.parsing.input._
-import scala.util.parsing.syntax._
+import scala.util.parsing.combinator.token._
import scala.collection.mutable.HashMap
-object Test extends Application{
+object Test extends App{
import grammars2._
val head = phrase(exp)
@@ -22,15 +22,15 @@ object Test extends Application{
}
object grammars2 extends StandardTokenParsers with PackratParsers{
-
+
def extractResult(r : ParseResult[_]) = r match{
case Success(a,_) => a
case NoSuccess(a,_) => a
}
-
+
lexical.delimiters ++= List("+","-","*","/","(",")")
lexical.reserved ++= List("Hello","World")
-
+
/*
* exp = sum | prod | num
* sum = exp ~ "+" ~ num
@@ -40,18 +40,18 @@ object grammars2 extends StandardTokenParsers with PackratParsers{
val exp : PackratParser[Int] = sum | prod | numericLit ^^{_.toInt} | "("~>exp<~")"
val sum : PackratParser[Int] = exp~("+"~>exp) ^^ {case x~y => x+y}
val prod: PackratParser[Int] = exp~("*"~>(numericLit ^^{_.toInt} | exp)) ^^ {case x~y => x*y}
-
-
+
+
/* lexical.reserved ++= List("a","b", "c")
val a : PackratParser[Any] = numericLit^^{x => primeFactors(x.toInt)}
val b : PackratParser[Any] = memo("b")
val c : PackratParser[Any] = memo("c")
- val AnBnCn : PackratParser[Any] =
+ val AnBnCn : PackratParser[Any] =
parseButDontEat(repMany1(a,b))~not(b)~>rep1(a)~repMany1(b,c)// ^^{case x~y => x:::y}
//val c : PackratParser[Any] = parseButDontEat(a)~a~a
//println(c((new PackratReader(new lexical.Scanner("45 24")))))
val r = new PackratReader(new lexical.Scanner("45 b c"))
println(AnBnCn(r))
println(r.getCache.size)
-*/
+*/
}
diff --git a/test/files/run/packrat3.scala b/test/files/run/packrat3.scala
index 3820f05158..216ef8f0af 100644
--- a/test/files/run/packrat3.scala
+++ b/test/files/run/packrat3.scala
@@ -2,7 +2,7 @@ import scala.util.parsing.combinator._
import scala.util.parsing.combinator.syntactical.StandardTokenParsers
import scala.util.parsing.input._
-import scala.util.parsing.syntax._
+import scala.util.parsing.combinator.token._
import scala.collection.mutable.HashMap
@@ -24,28 +24,28 @@ object Test {
}
object grammars3 extends StandardTokenParsers with PackratParsers {
-
+
def extractResult(r: ParseResult[_]) = r match {
case Success(a,_) => a
case NoSuccess(a,_) => a
}
-
+
lexical.reserved ++= List("a","b", "c")
val a: PackratParser[Any] = memo("a")
val b: PackratParser[Any] = memo("b")
val c: PackratParser[Any] = memo("c")
- val AnBnCn: PackratParser[Any] =
+ val AnBnCn: PackratParser[Any] =
guard(repMany1(a,b) ~ not(b)) ~ rep1(a) ~ repMany1(b,c)// ^^{case x~y => x:::y}
- private def repMany[T](p: => Parser[T], q: => Parser[T]): Parser[List[T]] =
+ private def repMany[T](p: => Parser[T], q: => Parser[T]): Parser[List[T]] =
( p~repMany(p,q)~q ^^ {case x~xs~y => x::xs:::(y::Nil)}
| success(Nil)
)
- def repMany1[T](p: => Parser[T], q: => Parser[T]): Parser[List[T]] =
+ def repMany1[T](p: => Parser[T], q: => Parser[T]): Parser[List[T]] =
p~opt(repMany(p,q))~q ^^ {case x~Some(xs)~y => x::xs:::(y::Nil)}
-}
+}
diff --git a/test/files/run/parmap-ops.scala b/test/files/run/parmap-ops.scala
new file mode 100644
index 0000000000..f93bd7b77e
--- /dev/null
+++ b/test/files/run/parmap-ops.scala
@@ -0,0 +1,48 @@
+import collection._
+
+object Test {
+
+ def main(args: Array[String]) {
+ val gm: GenMap[Int, Int] = GenMap(0 -> 0, 1 -> 1).par
+
+ // ops
+ assert(gm.isDefinedAt(1))
+ assert(gm.contains(1))
+ assert(gm.getOrElse(1, 2) == 1)
+ assert(gm.getOrElse(2, 3) == 3)
+ assert(gm.keysIterator.toSet == Set(0, 1))
+ assert(gm.valuesIterator.toSet == Set(0, 1))
+ assert(gm.keySet == Set(0, 1))
+ assert(gm.keys.toSet == Set(0, 1))
+ assert(gm.values.toSet == Set(0, 1))
+ try {
+ gm.default(-1)
+ assert(false)
+ } catch {
+ case e: NoSuchElementException => // ok
+ }
+
+ assert(gm.filterKeys(_ % 2 == 0)(0) == 0)
+ assert(gm.filterKeys(_ % 2 == 0).get(1) == None)
+ assert(gm.mapValues(_ + 1)(0) == 1)
+
+ // with defaults
+ val pm = parallel.mutable.ParMap(0 -> 0, 1 -> 1)
+ val dm = pm.withDefault(x => -x)
+ assert(dm(0) == 0)
+ assert(dm(1) == 1)
+ assert(dm(2) == -2)
+ assert(dm.updated(2, 2) == parallel.ParMap(0 -> 0, 1 -> 1, 2 -> 2))
+ dm.put(3, 3)
+ assert(dm(3) == 3)
+ assert(pm(3) == 3)
+ assert(dm(4) == -4)
+
+ val imdm = parallel.immutable.ParMap(0 -> 0, 1 -> 1).withDefault(x => -x)
+ assert(imdm(0) == 0)
+ assert(imdm(1) == 1)
+ assert(imdm(2) == -2)
+ assert(imdm.updated(2, 2) == parallel.ParMap(0 -> 0, 1 -> 1, 2 -> 2))
+ }
+
+}
diff --git a/test/files/run/parserFilter.check b/test/files/run/parserFilter.check
new file mode 100644
index 0000000000..be04454426
--- /dev/null
+++ b/test/files/run/parserFilter.check
@@ -0,0 +1,9 @@
+[1.3] failure: Input doesn't match filter: false
+
+if false
+ ^
+[1.1] failure: Input doesn't match filter: not
+
+not true
+^
+[1.8] parsed: (if~true)
diff --git a/test/files/run/parserFilter.scala b/test/files/run/parserFilter.scala
new file mode 100644
index 0000000000..d007d441f4
--- /dev/null
+++ b/test/files/run/parserFilter.scala
@@ -0,0 +1,15 @@
+object Test extends scala.util.parsing.combinator.RegexParsers {
+ val keywords = Set("if", "false")
+ def word: Parser[String] = "\\w+".r
+
+ def keyword: Parser[String] = word filter (keywords.contains)
+ def ident: Parser[String] = word filter(!keywords.contains(_))
+
+ def test = keyword ~ ident
+
+ def main(args: Array[String]) {
+ println(parseAll(test, "if false"))
+ println(parseAll(test, "not true"))
+ println(parseAll(test, "if true"))
+ }
+}
diff --git a/test/files/run/parserForFilter.check b/test/files/run/parserForFilter.check
new file mode 100644
index 0000000000..a53c147719
--- /dev/null
+++ b/test/files/run/parserForFilter.check
@@ -0,0 +1 @@
+[1.13] parsed: (second,first)
diff --git a/test/files/run/parserForFilter.scala b/test/files/run/parserForFilter.scala
new file mode 100644
index 0000000000..1bc44f8033
--- /dev/null
+++ b/test/files/run/parserForFilter.scala
@@ -0,0 +1,12 @@
+object Test extends scala.util.parsing.combinator.RegexParsers {
+ def word: Parser[String] = "\\w+".r
+
+ def twoWords = for {
+ (a ~ b) <- word ~ word
+ } yield (b, a)
+
+ def main(args: Array[String]) {
+ println(parseAll(twoWords, "first second"))
+ }
+}
+
diff --git a/test/files/run/parserNoSuccessMessage.check b/test/files/run/parserNoSuccessMessage.check
new file mode 100644
index 0000000000..fe00d2fd3a
--- /dev/null
+++ b/test/files/run/parserNoSuccessMessage.check
@@ -0,0 +1,20 @@
+[1.2] failure: string matching regex `\d+' expected but `x' found
+
+-x
+ ^
+[1.1] failure: string matching regex `\d+' expected but `x' found
+
+x
+^
+[1.3] parsed: (Some(-)~5)
+[1.2] parsed: (None~5)
+[1.2] error: Number expected!
+
+-x
+ ^
+[1.1] error: Number expected!
+
+x
+^
+[1.3] parsed: (Some(-)~5)
+[1.2] parsed: (None~5)
diff --git a/test/files/run/parserNoSuccessMessage.scala b/test/files/run/parserNoSuccessMessage.scala
new file mode 100644
index 0000000000..93aa252db0
--- /dev/null
+++ b/test/files/run/parserNoSuccessMessage.scala
@@ -0,0 +1,19 @@
+object Test extends scala.util.parsing.combinator.RegexParsers {
+ def sign = "-"
+ def number = "\\d+".r
+ def p = sign.? ~ number withErrorMessage "Number expected!"
+ def q = sign.? ~! number withErrorMessage "Number expected!"
+
+ def main(args: Array[String]) {
+ println(parseAll(p, "-x"))
+ println(parseAll(p, "x"))
+ println(parseAll(p, "-5"))
+ println(parseAll(p, "5"))
+ println(parseAll(q, "-x"))
+ println(parseAll(q, "x"))
+ println(parseAll(q, "-5"))
+ println(parseAll(q, "5"))
+ }
+}
+
+
diff --git a/test/files/run/patch-boundary.scala b/test/files/run/patch-boundary.scala
new file mode 100644
index 0000000000..8381956859
--- /dev/null
+++ b/test/files/run/patch-boundary.scala
@@ -0,0 +1,8 @@
+object Test {
+ def f = collection.mutable.ArrayBuffer(1, 2, 3, 4, 5, 6, 7, 8)
+ def g = f.patch(4, List(1, 2), 10)
+
+ def main(args: Array[String]): Unit = {
+ assert(g.size == 6)
+ }
+}
diff --git a/test/files/run/patmat-exprs.check b/test/files/run/patmat-exprs.check
new file mode 100644
index 0000000000..b6df9385fa
--- /dev/null
+++ b/test/files/run/patmat-exprs.check
@@ -0,0 +1 @@
+((5 + 10) + 300)
diff --git a/test/files/run/patmat-exprs.scala b/test/files/run/patmat-exprs.scala
new file mode 100644
index 0000000000..dfc78e2ca5
--- /dev/null
+++ b/test/files/run/patmat-exprs.scala
@@ -0,0 +1,579 @@
+import runtime.ScalaRunTime
+
+object Test {
+ val p = new Pattern { }
+ import p._
+ implicit object IntOps extends NumericOps[Int] {
+ def zero = 0
+ def one = 1
+
+ def add(a: Int, b: Int): Int = a + b
+ def sub(a: Int, b: Int): Int = a - b
+ def mul(a: Int, b: Int): Int = a * b
+ def mul(a: Int, b: Double): Int = (a * b).toInt
+ def div(a: Int, b: Int): Int = a / b
+ def div(a: Int, b: Double): Int = (a / b).toInt
+ def similar(a: Int, b: Int): Boolean = a == b
+ def abs(a: Int): Double = math.abs(a).toDouble
+ def sqr(a: Int): Int = a * a
+ def sqrt(a: Int): Int = math.sqrt(a).toInt
+ def log(a: Int): Int = math.log(a).toInt
+ def exp(a: Int): Int = math.exp(a).toInt
+ def sin(a: Int): Int = math.sin(a).toInt
+ def cos(a: Int): Int = math.cos(a).toInt
+
+ def fromDouble(a: Double): Int = a.toInt
+ def fromInt(a: Int): Int = a
+ }
+
+ def main(args: Array[String]): Unit = {
+ println((5: Expr[Int]) + 10 + 15 * 20)
+ }
+}
+
+
+trait Pattern {
+ // For trying out 2.7.7
+ //
+ // type Numeric[T]
+ // import java.io.Serializable
+ //
+ // implicit def compat27a[T](x: Iterable[T]) = new {
+ // def iterator: Iterator[T] = x.elements
+ // def sum: Int = 5
+ // def collect[U](pf: PartialFunction[T, U]): Iterable[U] = x map pf
+ // }
+
+ /** Function that returns object of the same type it was passed */
+ trait EndoFunction[-A] {
+ def apply[B <: A](x: B): B
+ }
+
+ /** Allows for smart construction of EndoFunction from an ordinary function */
+ object EndoFunction {
+ def apply[A](f: A => A): EndoFunction[A] = new EndoFunction[A] {
+ def apply[B <: A](x: B): B = f(x).asInstanceOf[B]
+ }
+ }
+
+ trait NumericOps[T] extends Serializable {
+ def zero: T
+ def one: T
+ def two = add(one, one)
+ def three = add(two, one)
+
+ def add(a: T, b: T): T
+ def add(a: T, b: T, c: T): T = add(a, add(b, c))
+ def sub(a: T, b: T): T
+ def mul(a: T, b: T): T
+ def mul(a: T, b: Double): T
+ def div(a: T, b: T): T
+ def div(a: T, b: Double): T
+ def similar(a: T, b: T): Boolean
+ def neg(a: T) = sub(zero, a)
+ def abs(a: T): Double
+ def sqr(a: T): T
+ def sqrt(a: T): T
+ def log(a: T): T
+ def exp(a: T): T
+ def sin(a: T): T
+ def cos(a: T): T
+ def tan(a: T): T = div(sin(a), cos(a))
+
+ def fromDouble(a: Double): T
+ def fromInt(a: Int): T
+
+ def sum(terms: Iterable[T]) = terms.foldLeft(zero)(add)
+ def sum(terms: Iterator[T]) = terms.foldLeft(zero)(add)
+ def product(terms: Iterable[T]) = terms.foldLeft(one)(mul)
+ def product(terms: Iterator[T]) = terms.foldLeft(one)(mul)
+
+
+ def similar(a: Iterable[T], b: Iterable[T]): Boolean = {
+ val i1 = a.iterator
+ val i2 = b.iterator
+ while (i1.hasNext && i2.hasNext)
+ if (!similar(i1.next, i2.next))
+ return false;
+ true;
+ }
+ }
+
+ /**
+ * Simple expression interpreter with some basic symbolic manipulation.
+ * Able to evaluate derivatives.
+ */
+
+ trait Expr[T] {
+
+ import Expr._
+
+ /** Evaluates value of the expression. */
+ def eval(context: Any => Any): T
+
+ /** Symbolically calculates derivative of this expression. Does not simplify it. */
+ def derivative(variable: Var[T]): Expr[T]
+
+ /** Returns arguments of this operator */
+ def args: Iterable[Expr[_]]
+
+ /** Transforms arguments of this operator by applying given function. */
+ def mapArgs(f: EndoFunction[Expr[_]]): Expr[T]
+
+ /** Transforms this operator and its arguments by applying given function */
+ def map(f: EndoFunction[Expr[_]]): Expr[T] =
+ f(mapArgs(EndoFunction[Expr[_]](x => x.map(f))))
+
+ /** Folds all subexpressions in this expression in depth-first order */
+ def fold[A](v: A)(f: (A, Expr[_]) => A): A =
+ f(args.foldLeft(v) { (a, b) => b.fold(a)(f) }, this)
+
+ /** Replaces all occurrences of one subexpression with another one */
+ def replace(from: Expr[_], to: Expr[_]): Expr[T] =
+ map(EndoFunction[Expr[_]](x => if (x == from) to else x))
+
+ /** Returns true if this expression contains given subexpression */
+ def contains(s: Expr[_]): Boolean =
+ this == s || args.exists(_ contains s)
+
+ /** Counts number of occurrences of the given subexpression. */
+ def count(condition: Expr[_] => Boolean): Int =
+ (if (condition(this)) 1 else 0) + args.map(_.count(condition)).sum
+
+ /** Executes some code for every subexpression in the depth-first order */
+ def foreach[U](block: Expr[_] => U): Unit = {
+ args.foreach(_.foreach(block))
+ block(this)
+ }
+
+ /** Collects subexpressions successfully transformed by the given partial function, in depth-first order. */
+ def collect[U](f: PartialFunction[Expr[_], U]): List[U] = {
+ val a = args.flatMap(_.collect(f)).toList
+ if (f.isDefinedAt(this)) (f(this) :: a) else a
+ }
+
+ def leaves: List[Leaf[T]] = collect { case l: Leaf[T] => l }
+
+ def + (other: Expr[T])(implicit n: NumericOps[T]) = Add(List(this, other))
+ def - (other: Expr[T])(implicit n: NumericOps[T]) = Sub(this, other)
+ def * (other: Expr[T])(implicit n: NumericOps[T]) = Mul(this, other)
+ def / (other: Expr[T])(implicit n: NumericOps[T]) = Div(this, other)
+
+ def unary_- (implicit n: NumericOps[T]) = Neg(this)
+ def sqr(implicit n: NumericOps[T]) = Sqr(this)
+
+ def < (other: Expr[T])(implicit n: NumericOps[T], o: Ordering[T]) = LT(this, other)
+ def <= (other: Expr[T])(implicit n: NumericOps[T], o: Ordering[T]) = LE(this, other)
+ def > (other: Expr[T])(implicit n: NumericOps[T], o: Ordering[T]) = GT(this, other)
+ def >= (other: Expr[T])(implicit n: NumericOps[T], o: Ordering[T]) = GE(this, other)
+
+ private def generalize(implicit num: NumericOps[T]): Expr[T] = {
+ this match {
+ case Add2(a, b) => Add(a :: b :: Nil)
+ case Add3(a, b, c) => Add(a :: b :: c :: Nil)
+ case Sub(a, b) => Add(a :: Neg(b) :: Nil)
+ case Add(x) => Add(x flatMap {
+ case Neg(Add(y)) => y.map(Neg(_))
+ case Add(y) => y
+ case y => y :: Nil
+ })
+ case x => x
+ }
+ }
+
+ private def specialize(implicit num: NumericOps[T]): Expr[T] = {
+ this match {
+ case Add(Seq(a, b)) => Add2(a, b)
+ case Add(Seq(a, b, c)) => Add3(a, b, c)
+ case x => x
+ }
+ }
+
+ /** Eliminates common negated components of a sum */
+ private def reduceComponents(components: List[Expr[T]])(implicit num: NumericOps[T]): List[Expr[T]] = {
+ val pairs =
+ for (a <- components; b <- components if Neg(a) == b || a == Neg(b))
+ yield (a, b)
+ pairs.foldLeft(components) { (c, pair) =>
+ if (c.contains(pair._1) && c.contains(pair._2))
+ c.diff(pair._1 :: pair._2 :: Nil)
+ else
+ c
+ }
+ }
+
+
+ /** Simplifies this expression to make evaluation faster and more accurate.
+ * Performs only one pass. */
+ private def reduce(implicit num: NumericOps[T]): Expr[T] = {
+ this match {
+ case Add(Seq(Neg(x), Neg(y), Neg(z))) => Neg(Add(List(x, y, z)))
+ case Add(Seq(Mul(x, y), z)) if (x == z) => Mul(x, Add(List(y, One[T])))
+ case Add(Seq(Mul(x, y), z)) if (y == z) => Mul(y, Add(List(z, One[T])))
+ case Add(Seq(Mul(x, y), Mul(u, w))) if (x == u) => Mul(x, Add(List(y, w)))
+ case Add(Seq(Mul(x, y), Mul(u, w))) if (y == w) => Mul(y, Add(List(x, u)))
+ case Add(Seq(Add(x), Add(y))) => Add(x.toList ::: y.toList).simplify
+ case Add(Seq(Add(x), y)) => Add(y :: x.toList).simplify
+ case Add(Seq(x, Add(y))) => Add(x :: y.toList).simplify
+ case Add(x) => {
+ val noZeros = x.filter(_ != Zero[T])
+ val noOnes = noZeros.map { case y: One[_] => Const(num.one); case y => y }
+ val constant = num.sum(noOnes.collect { case c: Const[T] => c.value })
+ val rest = noOnes.filter(x => !x.isInstanceOf[Const[_]]).toList
+ val reduced = reduceComponents(rest)
+ val args = if (num.similar(constant, num.zero)) reduced else reduced ::: Const(constant) :: Nil
+ args.size match {
+ case 0 => Zero[T]
+ case 1 => args.head
+ case 2 => Add2(args(0), args(1))
+ case 3 => Add3(args(0), args(1), args(2))
+ case _ => Add(args)
+ }
+ }
+ case Sub(x: Zero[_], y) => Neg(y)
+ case Sub(x, y: Zero[_]) => x
+ case Sub(x, y) if x == y => Zero[T]
+ case Sub(Mul(x, y), z) if (x == z) => Mul(x, Sub(y, One[T]))
+ case Sub(Mul(x, y), z) if (y == z) => Mul(y, Sub(z, One[T]))
+ case Sub(Mul(x, y), Mul(u, w)) if (x == u) => Mul(x, Sub(y, w))
+ case Sub(Mul(x, y), Mul(u, w)) if (y == w) => Mul(y, Sub(x, u))
+ case Mul(x: Zero[_], y) => Zero[T]
+ case Mul(x, y: Zero[_]) => Zero[T]
+ case Mul(x: One[_], y) => y
+ case Mul(x, y: One[_]) => x
+ case Mul(Neg(x: One[_]), y) => Neg(y)
+ case Mul(x, Neg(y: One[_])) => Neg(x)
+
+ case Mul(x, y) if (x == y) => Sqr(x)
+ case Div(x: Zero[_], y) => Zero[T] // warning: possibly extends domain
+ case Div(x, y: One[_]) => x
+ case Div(Sqr(x), y) if x == y => x
+ case Div(Mul(x, y), z) if (x == z) => y
+ case Div(Mul(x, y), z) if (y == z) => y
+ case Div(Mul(Mul(x, y), z), w) if (x == w) => Mul(y, z)
+ case Div(Mul(Mul(x, y), z), w) if (y == w) => Mul(x, z)
+ case Div(Mul(z, Mul(x, y)), w) if (x == w) => Mul(y, z)
+ case Div(Mul(z, Mul(x, y)), w) if (y == w) => Mul(x, z)
+ case Div(Mul(x, y), Mul(u, w)) if (x == u) => Div(y, w)
+ case Div(Mul(x, y), Mul(u, w)) if (y == w) => Div(x, u)
+ case Div(x: One[_], y) => Inv(y)
+ case Div(x, Sqr(y)) if x == y => Inv(y)
+ case Div(Mul(x, y), Sqr(Mul(u, w))) if x == u && y == w => Inv(Mul(x, y))
+ case Div(x, y) if x == y => One[T]
+
+ case Mul(Neg(a), Neg(b)) => Mul(a, b)
+ case Div(Neg(a), Neg(b)) => Div(a, b)
+
+ case Neg(x: Zero[_]) => Zero[T]
+ case Neg(x: One[_]) => Const(num.neg(num.one))
+ case Sub(Const(x), Const(y)) => const(num.sub(x, y))
+ case Mul(Const(x), Const(y)) => const(num.mul(x, y))
+ case Div(Const(x), Const(y)) => const(num.div(x, y))
+ case Neg(Const(x)) => const(num.neg(x))
+ case Sqr(Const(x)) => const(num.sqr(x))
+
+ case Mul(Const(x), Mul(Const(y), z)) => Mul(const(num.mul(x, y)), z)
+ case Mul(Const(x), Mul(y, Const(z))) => Mul(const(num.mul(x, z)), y)
+ case Mul(Mul(Const(y), z), Const(x)) => Mul(const(num.mul(x, y)), z)
+ case Mul(Mul(y, Const(z)), Const(x)) => Mul(const(num.mul(x, z)), y)
+
+ case Const(x) if x == num.one => One[T]
+ case Const(x) if x == num.zero => Zero[T]
+
+ case Sub(x, Neg(y)) => Add(List(x, y))
+ case Sub(Neg(x), y) => Neg(Add(List(x, y)))
+ case Neg(Neg(x)) => x
+ case Neg(Mul(a: Const[T], x)) => Mul(const(num.neg(a.value)), x)
+ case Neg(Mul(x, a: Const[T])) => Mul(const(num.neg(a.value)), x)
+ case Neg(Div(Neg(a), b)) => Div(a, b)
+ case Neg(Div(a, Neg(b))) => Div(a, b)
+ case Neg(Mul(Neg(a), b)) => Mul(a, b)
+ case Neg(Mul(a, Neg(b))) => Mul(a, b)
+
+ case Log(Exp(x)) => x
+ case x => x
+ }
+ }
+
+ private def optimizeWith(f: Expr[T] => Expr[T]): Expr[T] = {
+ f(mapArgs(EndoFunction[Expr[_]](
+ a => a match { case x: Expr[T] => x.optimizeWith(f) }
+ )))
+ }
+
+ /** Simplifies this expression to make evaluation faster and more accurate.*/
+ def simplify(implicit num: NumericOps[T]): Expr[T] = {
+ val a1 = optimizeWith(_.generalize)
+ val a2 = a1.optimizeWith(_.generalize)
+ val b = a2.optimizeWith(_.reduce)
+ val c = b.optimizeWith(_.reduce)
+ val d = c.optimizeWith(_.specialize)
+ d
+ }
+ }
+
+
+ trait Leaf[T] extends Expr[T] {
+ val args = List[Expr[T]]()
+ def mapArgs(f: EndoFunction[Expr[_]]) = this
+ }
+
+ trait OneArg[T] extends Expr[T] {
+ val expr: Expr[T]
+ val args = List(expr)
+ }
+
+
+ trait TwoArg[T] extends Expr[T] {
+ val left: Expr[T]
+ val right: Expr[T]
+ val args = List(left, right)
+ }
+
+ trait ManyArg[T] extends Expr[T]
+
+ /** Marker trait for specifying that you can safely divide by this */
+ trait NonZero[T] extends Expr[T]
+
+ case class Const[T](value: T)(implicit num: NumericOps[T]) extends Leaf[T] with NonZero[T] {
+ def derivative(variable: Var[T]) = Zero[T]
+ def eval(f: Any => Any) = value
+ override def toString = value.toString
+ }
+
+
+ case class Zero[T] (implicit num: NumericOps[T]) extends Leaf[T] {
+ def derivative(variable: Var[T]) = Zero[T]
+ def eval(f: Any => Any) = num.zero
+ override def toString = "0"
+ }
+
+ case class One[T] (implicit num: NumericOps[T]) extends Leaf[T] {
+ def derivative(variable: Var[T]) = Zero[T]
+ def eval(f: Any => Any) = num.one
+ override def toString = "1"
+ }
+
+ abstract class Var[T](implicit num: NumericOps[T]) extends Leaf[T] {
+ def derivative(variable: Var[T]) = if (variable == this) One[T] else Zero[T]
+ def eval(f: Any => Any) = f(this).asInstanceOf[T]
+ }
+
+ case class NamedVar[T](name: String)(implicit num: NumericOps[T]) extends Var[T] {
+ override lazy val hashCode = ScalaRunTime._hashCode(this)
+ override def toString = name
+ }
+
+ case class Add[T](args: Iterable[Expr[T]])(implicit num: NumericOps[T]) extends ManyArg[T] {
+ def eval(f: Any => Any) = num.sum(for (i <- args.iterator) yield i.eval(f))
+ def derivative(v: Var[T]) = Add(args.map(_.derivative(v)))
+ def mapArgs(f: EndoFunction[Expr[_]]) = Add(args map (x => f(x)))
+ override def toString = "(" + args.mkString(" + ") + ")"
+ override lazy val hashCode = ScalaRunTime._hashCode(this);
+ }
+
+
+ case class Add2[T](left: Expr[T], right: Expr[T])
+ (implicit num: NumericOps[T]) extends TwoArg[T] {
+ def eval(f: Any => Any) = num.add(left.eval(f), right.eval(f))
+ def derivative(v: Var[T]) = Add2(left.derivative(v), right.derivative(v))
+ def mapArgs(f: EndoFunction[Expr[_]]) = Add2(f(left), f(right))
+ override def toString = "(" + left + " + " + right + ")"
+ override lazy val hashCode = ScalaRunTime._hashCode(this);
+ }
+
+ case class Add3[T](a1: Expr[T], a2: Expr[T], a3: Expr[T])
+ (implicit num: NumericOps[T]) extends ManyArg[T] {
+ val args = List(a1, a2, a3)
+ def eval(f: Any => Any) = num.add(a1.eval(f), a2.eval(f), a3.eval(f))
+ def derivative(v: Var[T]) = Add3(a1.derivative(v), a2.derivative(v), a3.derivative(v))
+ def mapArgs(f: EndoFunction[Expr[_]]) = Add3(f(a1), f(a2), f(a3))
+ override def toString = "(" + a1 + " + " + a2 + " + " + a3 + ")"
+ override lazy val hashCode = ScalaRunTime._hashCode(this);
+ }
+
+
+ case class Sub[T](left: Expr[T], right: Expr[T])
+ (implicit num: NumericOps[T]) extends TwoArg[T] {
+ def derivative(v: Var[T]) = Sub(left.derivative(v), right.derivative(v))
+ def eval(f: Any => Any) = num.sub(left.eval(f), right.eval(f))
+ def mapArgs(f: EndoFunction[Expr[_]]) = Sub(f(left), f(right))
+ override def toString = "(" + left + " - " + right + ")"
+ override lazy val hashCode = ScalaRunTime._hashCode(this);
+ }
+
+ case class Neg[T](expr: Expr[T])
+ (implicit num: NumericOps[T]) extends OneArg[T] {
+ def derivative(v: Var[T]) = Neg(expr.derivative(v))
+ def eval(f: Any => Any) = num.neg(expr.eval(f))
+ def mapArgs(f: EndoFunction[Expr[_]]) = Neg(f(expr))
+ override def toString = "(-" + expr + ")"
+ override lazy val hashCode = ScalaRunTime._hashCode(this);
+
+ }
+
+ case class Mul[T](left: Expr[T], right: Expr[T])
+ (implicit num: NumericOps[T]) extends TwoArg[T] {
+ def derivative(v: Var[T]) =
+ Add(List(
+ Mul(left, right.derivative(v)),
+ Mul(right, left.derivative(v))))
+
+ def eval(f: Any => Any) = num.mul(left.eval(f), right.eval(f))
+ def mapArgs(f: EndoFunction[Expr[_]]) = Mul(f(left), f(right))
+ override def toString = "(" + left + " * " + right + ")"
+ override lazy val hashCode = ScalaRunTime._hashCode(this);
+ }
+
+ case class Div[T](left: Expr[T], right: Expr[T])
+ (implicit num: NumericOps[T]) extends TwoArg[T] {
+
+ // [f(x) / g(x)]' = [f(x) * 1 / g(x)]' = f'(x) * 1 / g(x) + f(x) * [1 / g(x)]' =
+ // f'(x) / g(x) + f(x) * [-1 / g(x) ^ 2] * g'(x) = (f'(x) * g(x) - f(x) * g'(x)) / g(x)^2
+ def derivative(v: Var[T]) =
+ Div(
+ Sub(
+ Mul(left.derivative(v), right),
+ Mul(left, right.derivative(v))),
+ Sqr(right)
+ )
+
+ def eval(f: Any => Any) = num.div(left.eval(f), right.eval(f))
+ def mapArgs(f: EndoFunction[Expr[_]]) =
+ Div(f(left), f(right))
+ override def toString = "(" + left + " / " + right + ")"
+ override lazy val hashCode = ScalaRunTime._hashCode(this);
+ }
+
+ case class Inv[T](expr: Expr[T])(implicit num: NumericOps[T]) extends OneArg[T] {
+
+ // [1 / f(x)]' = - f'(x) / f(x) ^ 2
+ def derivative(v: Var[T]) = Neg(Div(expr.derivative(v), Sqr(expr)))
+ def eval(f: Any => Any) = num.div(num.one, expr.eval(f))
+ def mapArgs(f: EndoFunction[Expr[_]]) = Inv(f(expr))
+ override def toString = "(1 / " + expr + ")"
+ override lazy val hashCode = ScalaRunTime._hashCode(this);
+ }
+
+ case class Sqr[T](expr: Expr[T])(implicit num: NumericOps[T]) extends OneArg[T] {
+ // [f(x) ^ 2]' = 2 * f(x) * f'(x)
+ def derivative(v: Var[T]) = Mul(Mul(Const(num.two), expr), expr.derivative(v))
+ def eval(f: Any => Any) = num.sqr(expr.eval(f))
+ def mapArgs(f: EndoFunction[Expr[_]]) = Sqr(f(expr))
+ override def toString = expr + " ^ 2"
+ override lazy val hashCode = ScalaRunTime._hashCode(this);
+ }
+
+
+ case class Log[T](expr: Expr[T])(implicit num: NumericOps[T]) extends OneArg[T] {
+ def derivative(v: Var[T]) = Div(expr.derivative(v), expr)
+ def eval(f: Any => Any) = num.log(expr.eval(f))
+ def mapArgs(f: EndoFunction[Expr[_]]) = Log(f(expr))
+ override def toString = "log(" + expr + ")"
+ override lazy val hashCode = ScalaRunTime._hashCode(this);
+ }
+
+
+ case class Exp[T](expr: Expr[T])(implicit num: NumericOps[T]) extends OneArg[T] {
+ def derivative(v: Var[T]) = Mul(expr.derivative(v), Exp(expr))
+ def eval(f: Any => Any) = num.exp(expr.eval(f))
+ def mapArgs(f: EndoFunction[Expr[_]]) = Exp(f(expr))
+ override def toString = "exp(" + expr + ")"
+ override lazy val hashCode = ScalaRunTime._hashCode(this);
+ }
+
+ case class Sqrt[T](expr: Expr[T])(implicit num: NumericOps[T]) extends OneArg[T] {
+ def derivative(v: Var[T]) = Neg(Div(expr.derivative(v), Sqrt(expr)))
+ def eval(f: Any => Any) = num.sqrt(expr.eval(f))
+ def mapArgs(f: EndoFunction[Expr[_]]) = Sqrt(f(expr))
+ override def toString = "sqrt(" + expr + ")"
+ override lazy val hashCode = ScalaRunTime._hashCode(this);
+ }
+
+
+ case class Sin[T](expr: Expr[T])(implicit num: NumericOps[T]) extends OneArg[T] {
+ def derivative(v: Var[T]) = Mul(expr.derivative(v), Cos(expr))
+ def eval(f: Any => Any) = num.sin(expr.eval(f))
+ def mapArgs(f: EndoFunction[Expr[_]]) = Sin(f(expr))
+ override def toString = "sin(" + expr + ")"
+ override lazy val hashCode = ScalaRunTime._hashCode(this);
+ }
+
+
+ case class Cos[T](expr: Expr[T])(implicit num: NumericOps[T]) extends OneArg[T] {
+ def derivative(v: Var[T]) = Neg(Mul(expr.derivative(v), Sin(expr)))
+ def eval(f: Any => Any) = num.cos(expr.eval(f))
+ def mapArgs(f: EndoFunction[Expr[_]]) = Cos(f(expr))
+ override def toString = "cos(" + expr + ")"
+ override lazy val hashCode = ScalaRunTime._hashCode(this);
+ }
+
+
+ abstract class Compare[T](left: Expr[T], right: Expr[T], cmp: (T, T) => Boolean)(implicit num: NumericOps[T])
+ extends Expr[Boolean] {
+ def derivative(v: Var[Boolean]) = throw new IllegalStateException("Derivative of Boolean not allowed")
+ def eval(f: Any => Any) = cmp(left.eval(f), right.eval(f))
+ val args = List(left, right)
+ }
+
+ case class LE[T](left: Expr[T], right: Expr[T])(implicit num: NumericOps[T], ord: Ordering[T])
+ extends Compare[T](left, right, ord.compare(_, _) <= 0) {
+ def mapArgs(f: EndoFunction[Expr[_]]) = LE(
+ f(left), f(right))
+ override def toString = left.toString + " <= " + right.toString
+ }
+
+ case class LT[T](left: Expr[T], right: Expr[T])(implicit num: NumericOps[T], ord: Ordering[T])
+ extends Compare[T](left, right, ord.compare(_, _) < 0) {
+ def mapArgs(f: EndoFunction[Expr[_]]) = LT(
+ f(left), f(right))
+ override def toString = left.toString + " < " + right.toString
+ }
+
+ case class GE[T](left: Expr[T], right: Expr[T])(implicit num: NumericOps[T], ord: Ordering[T])
+ extends Compare[T](left, right, ord.compare(_, _) >= 0) {
+ def mapArgs(f: EndoFunction[Expr[_]]) = GE(
+ f(left), f(right))
+ override def toString = left.toString + " >= " + right.toString
+ }
+
+ case class GT[T](left: Expr[T], right: Expr[T])(implicit num: NumericOps[T], ord: Ordering[T])
+ extends Compare[T](left, right, ord.compare(_, _) > 0) {
+ def mapArgs(f: EndoFunction[Expr[_]]) = GT(
+ f(left), f(right))
+ override def toString = left.toString + " > " + right.toString
+ }
+
+ case class IfElse[T <: Numeric[T]]
+ (condition: Expr[Boolean], left: Expr[T], right: Expr[T])(implicit num: NumericOps[T]) extends Expr[T] {
+
+ val args = List(condition, left, right)
+ def derivative(v: Var[T]) = IfElse(condition, left.derivative(v), right.derivative(v))
+ def eval(f: Any => Any) = if (condition.eval(f)) left.eval(f) else right.eval(f)
+ def mapArgs(f: EndoFunction[Expr[_]]) = IfElse(
+ f(condition).asInstanceOf[Expr[Boolean]],
+ f(left),
+ f(right))
+ override def toString = "if (" + condition + ")(" + left + ") else (" + right + ")"
+ override lazy val hashCode = ScalaRunTime._hashCode(this);
+ }
+
+ object Expr {
+ /** Creates a constant expression */
+ def const[T](value: T)(implicit num: NumericOps[T]): Leaf[T] =
+ if (num.zero == value) Zero[T]
+ else Const(value)
+
+ implicit def double2Constant[T](d: Double)(implicit num: NumericOps[T]): Leaf[T] =
+ const(num.fromDouble(d))
+
+ implicit def float2Constant[T](f: Float)(implicit num: NumericOps[T]): Leaf[T] =
+ const(num.fromDouble(f.toDouble))
+
+ implicit def int2Constant[T](i: Int)(implicit num: NumericOps[T]): Leaf[T] =
+ const(num.fromDouble(i.toDouble))
+
+ implicit def long2Constant[T](l: Long)(implicit num: NumericOps[T]): Leaf[T] =
+ const(num.fromDouble(l.toDouble))
+ }
+} \ No newline at end of file
diff --git a/test/files/run/patmat-seqs.check b/test/files/run/patmat-seqs.check
new file mode 100644
index 0000000000..bb2a5ee44a
--- /dev/null
+++ b/test/files/run/patmat-seqs.check
@@ -0,0 +1,13 @@
+s3
+s2
+s1
+s0
+ss6
+d
+s3
+s3
+d
+s1
+s3
+d
+d
diff --git a/test/files/run/patmat-seqs.scala b/test/files/run/patmat-seqs.scala
new file mode 100644
index 0000000000..e23711697c
--- /dev/null
+++ b/test/files/run/patmat-seqs.scala
@@ -0,0 +1,42 @@
+object Test {
+ def f1(x: Any) = x match {
+ case Seq(1, 2, 3) => "s3"
+ case Seq(4, 5) => "s2"
+ case Seq(7) => "s1"
+ case Nil => "s0"
+ case Seq(_, _, _, _, _, x: String) => "ss6"
+ case _ => "d"
+ }
+
+ def f2(x: Any) = x match {
+ case Seq("a", "b", _*) => "s2"
+ case Seq(1, _*) => "s1"
+ case Seq(5, 6, 7, _*) => "s3"
+ case _ => "d"
+ }
+
+ def main(args: Array[String]): Unit = {
+ val xs1 = List(
+ List(1,2,3),
+ List(4,5),
+ Vector(7),
+ Seq(),
+ Seq(1, 2, 3, 4, 5, "abcd"),
+ "abc"
+ ) map f1
+
+ xs1 foreach println
+
+ val xs2 = List(
+ Seq(5, 6, 7),
+ Seq(5, 6, 7, 8, 9),
+ Seq("a"),
+ Seq(1, 6, 7),
+ List(5, 6, 7),
+ Nil,
+ 5
+ ) map f2
+
+ xs2 foreach println
+ }
+}
diff --git a/test/files/run/patmat_unapp_abstype.check b/test/files/run/patmat_unapp_abstype.check
new file mode 100644
index 0000000000..ac28ccdb95
--- /dev/null
+++ b/test/files/run/patmat_unapp_abstype.check
@@ -0,0 +1,2 @@
+TypeRef
+none of the above
diff --git a/test/files/run/patmat_unapp_abstype.scala b/test/files/run/patmat_unapp_abstype.scala
new file mode 100644
index 0000000000..e5adec5c16
--- /dev/null
+++ b/test/files/run/patmat_unapp_abstype.scala
@@ -0,0 +1,39 @@
+// abstract types and extractors, oh my!
+trait TypesAPI {
+ trait Type
+
+ // an alternative fix (implemented in the virtual pattern matcher, is to replace the isInstanceOf by a manifest-based run-time test)
+ // that's what typeRefMani is for
+ type TypeRef <: Type //; implicit def typeRefMani: Manifest[TypeRef]
+ val TypeRef: TypeRefExtractor; trait TypeRefExtractor {
+ def apply(x: Int): TypeRef
+ def unapply(x: TypeRef): Option[(Int)]
+ }
+
+ // just for illustration, should follow the same pattern as TypeRef
+ case class MethodType(n: Int) extends Type
+}
+
+// user should not be exposed to the implementation
+trait TypesUser extends TypesAPI {
+ def shouldNotCrash(tp: Type): Unit = {
+ tp match {
+ case TypeRef(x) => println("TypeRef")
+ case MethodType(x) => println("MethodType")
+ case _ => println("none of the above")
+ }
+ }
+}
+
+trait TypesImpl extends TypesAPI {
+ object TypeRef extends TypeRefExtractor // this will have a bridged unapply(x: Type) = unapply(x.asInstanceOf[TypeRef])
+ case class TypeRef(n: Int) extends Type // this has a bridge from TypesAPI#Type to TypesImpl#TypeRef
+ // --> the cast in the bridge will fail because the pattern matcher can't type test against the abstract types in TypesUser
+ //lazy val typeRefMani = manifest[TypeRef]
+}
+
+object Test extends TypesImpl with TypesUser with App {
+ shouldNotCrash(TypeRef(10)) // should and does print "TypeRef"
+ // once #1697/#2337 are fixed, this should generate the correct output
+ shouldNotCrash(MethodType(10)) // should print "MethodType" but prints "none of the above" -- good one, pattern matcher!
+} \ No newline at end of file
diff --git a/test/files/run/patmatnew.scala b/test/files/run/patmatnew.scala
index 025d6bf2ef..a6f8199457 100644
--- a/test/files/run/patmatnew.scala
+++ b/test/files/run/patmatnew.scala
@@ -1,102 +1,81 @@
-trait Treez { self: Shmeez =>
- abstract class Tree
- case class Beez(i:Int) extends Tree
- case object HagbardCeline extends Tree
-}
-
-trait Shmeez extends AnyRef with Treez {
- val tree: Tree
-
- def foo = tree match {
- case Beez(2) => 1
- case HagbardCeline => 0
- }
-}
-
-import scala.testing.SUnit._
-
-object Test extends TestConsoleMain {
-
- //just compilation
- def zipFun[a,b](xs:List[a], ys:List[b]):List[Pair[a,b]] = (Pair(xs,ys): @unchecked) match {
- // !!! case Pair(List(), _), Pair(_, List()) => List()
- case (x :: xs1, y :: ys1) => (x, y) :: zipFun(xs1, ys1)
- }
-
- def suite = new TestSuite(
- new TestSimpleIntSwitch,
- new SimpleUnapply,
- SeqUnapply,
- applyFromJcl,
- new Test717,
- TestGuards,
- TestEqualsPatternOpt,
- TestSequence01,
- TestSequence02,
- TestSequence03,
- TestSequence04,
- TestSequence05,
- TestSequence06,
- TestSequence07,
- TestSequence08,
- TestStream,
- new Test903,
- new Test1163_Order,
- new TestUnbox,
- Bug457,
- Bug508,
- Bug789,
- Bug995,
- Bug1093,
- Bug1094,
- ClassDefInGuard,
- Ticket2,
- Ticket11,
- Ticket37,
- Ticket44,
- Ticket346
- )
-
- class Foo(j:Int) {
- case class Bar(i:Int)
- }
- class SimpleUnapply extends TestCase("simpleUnapply") {
- override def runTest() { // from sortedmap, old version
+object Test {
+
+ def main(args: Array[String]) {
+ ApplyFromJcl.run()
+ Bug1093.run()
+ Bug1094.run()
+ Bug1270.run()
+ Bug1281.run()
+ Bug457.run()
+ Bug508.run()
+ Bug789.run()
+ Bug881.run()
+ Bug995.run()
+ ClassDefInGuard.run()
+ SeqUnapply.run()
+ SimpleUnapply.run()
+ Test1163_Order.run()
+ Test717.run()
+ Test903.run()
+ TestEqualsPatternOpt.run()
+ TestGuards.run()
+ TestSequence01.run()
+ TestSequence02.run()
+ TestSequence03.run()
+ TestSequence04.run()
+ TestSequence05.run()
+ TestSequence06.run()
+ TestSequence07.run()
+ TestSequence08.run()
+ TestSimpleIntSwitch.run()
+ TestStream.run()
+ TestUnbox.run()
+ Ticket11.run()
+ Ticket2.run()
+ Ticket346.run()
+ Ticket37.run()
+ Ticket44.run()
+ }
+
+ def assertEquals(a: Any, b: Any) { assert(a == b) }
+ def assertEquals(msg: String, a: Any, b: Any) { assert(a == b, msg) }
+
+ object SimpleUnapply {
+ def run() { // from sortedmap, old version
List((1, 2)).head match {
- case kv @ Pair(key, _) => kv.toString + " " + key.toString
+ case kv@Pair(key, _) => kv.toString + " " + key.toString
}
-
}
}
- object SeqUnapply extends TestCase("seqUnapply") {
+ object SeqUnapply {
case class SFB(i: Int, xs: List[Int])
- override def runTest() {
- List(1,2) match {
+ def run() {
+ List(1, 2) match {
case List(1) => assert(false, "wrong case")
- case List(1,2,xs @ _*) => assert(xs.isEmpty, "not empty")
+ case List(1, 2, xs@_*) => assert(xs.isEmpty, "not empty")
case Nil => assert(false, "wrong case")
}
- SFB(1,List(1)) match {
+ SFB(1, List(1)) match {
case SFB(_, List(x)) => assert(x == 1)
case SFB(_, _) => assert(false)
}
}
}
- object applyFromJcl extends TestCase("applyFromJcl") {
- override def runTest {
- val p = (1,2)
- Some(2) match {
- case Some(p._2) =>
- case _ => assert(false)
- }
+ object ApplyFromJcl {
+ def run() {
+ val p = (1, 2)
+ Some(2) match {
+ case Some(p._2) =>
+ case _ => assert(false)
+ }
}
}
- class TestSimpleIntSwitch extends TestCase("SimpleIntSwitch") {
- override def runTest() = {
+ object TestSimpleIntSwitch {
+ def run() {
assertEquals("s1", 1, 1 match {
case 3 => 3
case 2 => 2
@@ -107,12 +86,12 @@ object Test extends TestConsoleMain {
case 1 => 1
case _ => 0
})
- assertEquals("s2boxed", 1, (1:Any) match {
+ assertEquals("s2boxed", 1, (1: Any) match {
case 1 => 1
case _ => 0
})
assertEquals("s3", 1, ("hello") match {
- case s:String => 1
+ case s: String => 1
//case _ => 0 // unreachable!
})
val xyz: (Int, String, Boolean) = (1, "abc", true);
@@ -122,69 +101,93 @@ object Test extends TestConsoleMain {
})
}
}
- class Test717 extends TestCase("#717 test path of case classes") {
+
+ // #717 test path of case classes
+ object Test717 {
+ class Foo(j: Int) {
+ case class Bar(i: Int)
+ }
val foo1 = new Foo(1)
val foo2 = new Foo(2)
-
- override def runTest() = {
- val res = (foo1.Bar(2):Any) match {
- case foo2.Bar(2) => false
- case foo1.Bar(2) => true
+ def run() {
+ val res = (foo1.Bar(2): Any) match {
+ case foo2.Bar(2) => false
+ case foo1.Bar(2) => true
}
- assertTrue("ok", res);
+ assert(res)
}
}
- object TestGuards extends TestCase("multiple guards for same pattern") with Shmeez {
- val tree:Tree = Beez(2)
- override def runTest = {
+ ///
+
+ trait Treez { self: Shmeez =>
+ abstract class Tree
+ case class Beez(i: Int) extends Tree
+ case object HagbardCeline extends Tree
+ }
+
+ trait Shmeez extends AnyRef with Treez {
+ val tree: Tree
+
+ def foo = tree match {
+ case Beez(2) => 1
+ case HagbardCeline => 0
+ }
+ }
+
+ // multiple guards for same pattern
+ object TestGuards extends Shmeez {
+ val tree: Tree = Beez(2)
+ def run() {
val res = tree match {
case Beez(x) if x == 3 => false
case Beez(x) if x == 2 => true
}
- assertTrue("ok", res);
- val ret = (Beez(3):Tree) match {
+ assert(res)
+ val ret = (Beez(3): Tree) match {
case Beez(x) if x == 3 => true
case Beez(x) if x == 2 => false
}
- assertTrue("ok", ret);
+ assert(ret)
}
}
- object TestEqualsPatternOpt extends TestCase("test EqualsPatternClass in combination with MixTypes opt, bug #1276") {
+ // test EqualsPatternClass in combination with MixTypes opt, bug #1276
+ object TestEqualsPatternOpt {
val NoContext = new Object
- override def runTest {
- assertEquals(1,((NoContext:Any) match {
- case that : AnyRef if this eq that => 0
+ def run() {
+ assertEquals(1, ((NoContext: Any) match {
+ case that: AnyRef if this eq that => 0
case NoContext => 1
case _ => 2
}))
}
}
- object TestSequence01 extends TestCase("uno (all ignoring patterns on List)") {
+ // all ignoring patterns on List
+ object TestSequence01 {
def doMatch(xs: List[String]): String = xs match {
case List(_*) => "ok"
}
def doMatch2(xs: List[String]): List[String] = xs match {
- case List(_, rest @ _*) => rest.toList
+ case List(_, rest@_*) => rest.toList
}
- override def runTest() {
+ def run() {
val list1 = List()
assertEquals(doMatch(list1), "ok")
- val list2 = List("1","2","3")
+ val list2 = List("1", "2", "3")
assertEquals(doMatch(list2), "ok")
- val list3 = List("1","2","3")
- assertEquals(doMatch2(list3), List("2","3"))
+ val list3 = List("1", "2", "3")
+ assertEquals(doMatch2(list3), List("2", "3"))
}
}
-
- object TestSequence02 extends TestCase("due (all ignoring patterns on Seq)") {
+ // all ignoring patterns on Seq
+ object TestSequence02 {
def doMatch(l: Seq[String]): String = l match {
case Seq(_*) => "ok"
}
- override def runTest() {
+ def run() {
val list1 = List()
assertEquals(doMatch(list1), "ok")
val list2 = List("1", "2", "3")
@@ -196,112 +199,104 @@ object Test extends TestConsoleMain {
}
}
- object TestSequence03 extends TestCase("tre (right-ignoring patterns on List, defaults)") {
+ // right-ignoring patterns on List, defaults
+ object TestSequence03 {
def doMatch(xs: List[String]): String = xs match {
- case List(_,_,_,_*) => "ok"
+ case List(_, _, _, _*) => "ok"
case _ => "not ok"
}
- override def runTest() {
+ def run() {
val list1 = List()
assertEquals(doMatch(list1), "not ok")
- val list2 = List("1","2","3")
+ val list2 = List("1", "2", "3")
assertEquals(doMatch(list2), "ok")
- val list3 = List("1","2","3","4")
+ val list3 = List("1", "2", "3", "4")
assertEquals(doMatch(list3), "ok")
}
}
-
- object TestSequence04 extends TestCase("quattro (all- and right-ignoring pattern on case class w/ seq param)") {
+ // all- and right-ignoring pattern on case class w/ seq param
+ object TestSequence04 {
case class Foo(i: Int, chars: Char*)
- override def runTest() = {
+ def run() {
val a = Foo(0, 'a') match {
- case Foo(i, c, chars @ _*) => c
+ case Foo(i, c, chars@_*) => c
case _ => null
}
assertEquals(a, 'a')
val b = Foo(0, 'a') match {
- case Foo(i, chars @ _*) => 'b'
+ case Foo(i, chars@_*) => 'b'
case _ => null
}
assertEquals(b, 'b')
}
}
- object TestSequence05 extends TestCase("cinque (sealed case class with ignoring seq patterns)") {
+ // sealed case class with ignoring seq patterns
+ object TestSequence05 {
sealed abstract class Con;
case class Foo() extends Con
- case class Bar(xs:Con*) extends Con
+ case class Bar(xs: Con*) extends Con
- override def runTest() {
- val res = (Bar(Foo()):Con) match {
+ def run() {
+ val res = (Bar(Foo()): Con) match {
case Bar(xs@_*) => xs // this should be optimized away to a pattern Bar(xs)
case _ => Nil
}
- assertEquals("res instance"+res.isInstanceOf[Seq[Con] forSome { type Con }]+" res(0)="+res(0), true, res.isInstanceOf[Seq[Foo] forSome { type Foo}] && res(0) == Foo() )
+ assertEquals("res instance" + res.isInstanceOf[Seq[Con] forSome { type Con }] + " res(0)=" + res(0), true, res.isInstanceOf[Seq[Foo] forSome { type Foo }] && res(0) == Foo())
}
}
- object TestSequence06 extends TestCase("sei (not regular) fancy guards / bug#644 ") {
+ // (not regular) fancy guards / bug#644
+ object TestSequence06 {
case class A(i: Any)
def doMatch(x: Any, bla: Int) = x match {
- case x:A if (bla==1) => 0
+ case x: A if (bla == 1) => 0
case A(1) => 1
case A(A(1)) => 2
}
- override def runTest() {
- assertEquals(doMatch(A(null),1), 0)
- assertEquals(doMatch(A(1),2), 1)
- assertEquals(doMatch(A(A(1)),2), 2)
+ def run() {
+ assertEquals(doMatch(A(null), 1), 0)
+ assertEquals(doMatch(A(1), 2), 1)
+ assertEquals(doMatch(A(A(1)), 2), 2)
}
}
- object TestSequence07 extends TestCase("sette List of chars") {
+ // List of chars
+ object TestSequence07 {
def doMatch1(xs: List[Char]) = xs match {
- case List(x, y, _*) => x::y::Nil
+ case List(x, y, _*) => x :: y :: Nil
}
def doMatch2(xs: List[Char]) = xs match {
- case List(x, y, z, w) => List(z,w)
- }
- //def doMatch3(xs:List[char]) = xs match {
- // case List(_*, z, w) => w::Nil
- //}
- //
- // Since the second case should have been unreachable all along,
- // let's just comment this one out.
- //
- // def doMatch4(xs:Seq[Char]) = xs match {
- // case Seq(x, y, _*) => x::y::Nil
- // case Seq(x, y, z, w) => List(z,w) // redundant!
- // }
- def doMatch5(xs:Seq[Char]) = xs match {
- case Seq(x, y, 'c', w @ _*) => x::y::Nil
- case Seq(x, y, z @ _*) => z
- }
- def doMatch6(xs:Seq[Char]) = xs match {
- case Seq(x, 'b') => x::'b'::Nil
- case Seq(x, y, z @ _*) => z.toList
- }
-
- override def runTest() {
- assertEquals(List('a','b'), doMatch1(List('a','b','c','d')))
- assertEquals(List('c','d'), doMatch2(List('a','b','c','d')))
- // assertEquals(doMatch3(List('a','b','c','d')), List('d'))
- // assertEquals(List('a','b'), doMatch4(List('a','b','c','d')))
- assertEquals(List('a','b'), doMatch5(List('a','b','c','d')))
- assertEquals(List('c','d'), doMatch6(List('a','b','c','d')))
- }
- }
-
- object TestSequence08 extends TestCase("backquoted identifiers in pattern") {
- override def runTest() {
+ case List(x, y, z, w) => List(z, w)
+ }
+ def doMatch3(xs: Seq[Char]) = xs match {
+ case Seq(x, y, 'c', w@_*) => x :: y :: Nil
+ case Seq(x, y, z@_*) => z
+ }
+ def doMatch4(xs: Seq[Char]) = xs match {
+ case Seq(x, 'b') => x :: 'b' :: Nil
+ case Seq(x, y, z@_*) => z.toList
+ }
+
+ def run() {
+ assertEquals(List('a', 'b'), doMatch1(List('a', 'b', 'c', 'd')))
+ assertEquals(List('c', 'd'), doMatch2(List('a', 'b', 'c', 'd')))
+ assertEquals(List('a', 'b'), doMatch3(List('a', 'b', 'c', 'd')))
+ assertEquals(List('c', 'd'), doMatch4(List('a', 'b', 'c', 'd')))
+ }
+ }
+
+ // backquoted identifiers in pattern
+ object TestSequence08 {
+ def run() {
val xs = List(2, 3)
val ys = List(1, 2, 3) match {
case x :: `xs` => xs
@@ -311,20 +306,21 @@ object Test extends TestConsoleMain {
}
}
-
- object TestStream extends TestCase("unapply for Streams") {
+ // unapply for Streams
+ object TestStream {
def sum(stream: Stream[Int]): Int =
stream match {
case Stream.Empty => 0
case Stream.cons(hd, tl) => hd + sum(tl)
}
- val str: Stream[Int] = List(1,2,3).iterator.toStream
+ val str: Stream[Int] = List(1, 2, 3).iterator.toStream
- def runTest() = assertEquals(sum(str), 6)
+ def run() { assertEquals(sum(str), 6) }
}
- class Test1163_Order extends TestCase("bug#1163 order of temps must be preserved") {
+ // bug#1163 order of temps must be preserved
+ object Test1163_Order {
abstract class Function
case class Var(n: String) extends Function
case class Const(v: Double) extends Function
@@ -342,11 +338,11 @@ object Test extends TestConsoleMain {
case n :: ls => flips((l take n reverse) ::: (l drop n)) + 1
}
- def runTest() = assertEquals("both", (Var("x"),Var("y")), f)
+ def run() { assertEquals("both", (Var("x"), Var("y")), f) }
}
- class TestUnbox extends TestCase("unbox") {
- override def runTest() {
+ object TestUnbox {
+ def run() {
val xyz: (Int, String, Boolean) = (1, "abc", true)
xyz._1 match {
case 1 => "OK"
@@ -356,82 +352,41 @@ object Test extends TestConsoleMain {
}
}
- class Test806_818 { // #806, #811 compile only -- type of bind
- // bug811
- trait Core {
- trait NodeImpl
- trait OtherImpl extends NodeImpl
- trait DoubleQuoteImpl extends NodeImpl
- def asDQ(node : OtherImpl) = node match {
- case dq : DoubleQuoteImpl => dq
- }
+ object Test903 {
+ class Person(_name: String, _father: Person) {
+ def name = _name
+ def father = _father
}
- trait IfElseMatcher {
- type Node <: NodeImpl
- trait NodeImpl
- trait IfImpl
- private def coerceIf(node: Node) = node match {
- case node : IfImpl => node // var node is of type Node with IfImpl!
- case _ => null
- }
+ object PersonFather {
+ def unapply(p: Person): Option[Person] =
+ if (p.father == null)
+ None
+ else
+ Some(p.father)
+ }
+ def run() {
+ val p1 = new Person("p1", null)
+ val p2 = new Person("p2", p1)
+ assertEquals((p2.name, p1.name), p2 match {
+ case aPerson@PersonFather(f) => (aPerson.name, f.name)
+ case _ => "No father"
+ })
}
}
+ object Bug881 {
+ object Foo1 {
+ class Bar1(val x: String)
+ def p(b: Bar1) = b.x
- class Person(_name : String, _father : Person) {
- def name = _name
- def father = _father
- }
-
- object PersonFather {
- def unapply(p : Person) : Option[Person] =
- if (p.father == null)
- None
- else
- Some(p.father)
- }
-
- class Test903 extends TestCase("bug903") {
-
- override def runTest = {
- val p1 = new Person("p1",null)
- val p2 = new Person("p2",p1)
- assertEquals((p2.name, p1.name), p2 match {
- case aPerson@PersonFather(f) => (aPerson.name,f.name)
- case _ => "No father"
- })
- }
- }
-
-
- object Test1253 { // compile-only
- def foo(t : (Int, String)) = t match {
- case (1, "") => throw new Exception
- case (r, _) => throw new Exception(r.toString)
+ def unapply(s: String): Option[Bar1] =
+ Some(new Bar1(s))
}
- }
-
- object Foo1258 {
- case object baz
- def foo(bar : AnyRef) = {
- val Baz = baz
- bar match {
- case Baz => ()
- }
+ class Foo(j: Int) {
+ case class Bar(i: Int)
}
- }
-
- object Foo1 {
- class Bar1(val x : String)
- def p(b : Bar1) = Console.println(b.x)
-
- def unapply(s : String) : Option[Bar1] =
- Some(new Bar1(s))
- }
-
- object bug881 extends TestCase("881") {
- override def runTest = {
+ def run() {
"baz" match {
case Foo1(x) =>
Foo1.p(x)
@@ -439,32 +394,31 @@ object Test extends TestConsoleMain {
}
}
-
// these are exhaustive matches
// should not generate any warnings
- def f[A](z:(Option[A],Option[A])) = z match {
- case Pair(None,Some(x)) => 1
- case Pair(Some(x),None ) => 2
- case Pair(Some(x),Some(y)) => 3
+ def f[A](z: (Option[A], Option[A])) = z match {
+ case Pair(None, Some(x)) => 1
+ case Pair(Some(x), None) => 2
+ case Pair(Some(x), Some(y)) => 3
case _ => 4
}
- def g1[A](z:Option[List[A]]) = z match {
+ def g1[A](z: Option[List[A]]) = z match {
case Some(Nil) => true
- case Some(x::Nil) => true
+ case Some(x :: Nil) => true
case _ => true
}
- def g2[A](z:Option[List[A]]) = z match {
- case Some(x::Nil) => true
+ def g2[A](z: Option[List[A]]) = z match {
+ case Some(x :: Nil) => true
case Some(_) => false
case _ => true
}
- def h[A](x: (Option[A],Option[A])) = x match {
- case Pair(None,_:Some[_]) => 1
- case Pair(_:Some[_],None ) => 2
- case Pair(_:Some[_],_:Some[_]) => 3
+ def h[A](x: (Option[A], Option[A])) = x match {
+ case Pair(None, _: Some[_]) => 1
+ case Pair(_: Some[_], None) => 2
+ case Pair(_: Some[_], _: Some[_]) => 3
case _ => 4
}
@@ -474,7 +428,7 @@ object Test extends TestConsoleMain {
case (h1 :: t1, h2 :: t2) => 'c'
}
- def k (x:AnyRef) = x match {
+ def k(x: AnyRef) = x match {
case null => 1
case _ => 2
}
@@ -484,125 +438,59 @@ object Test extends TestConsoleMain {
case FooBar => true
}
- object Bug1270 { // unapply13
-
+ object Bug1270 { // unapply13
class Sync {
def apply(x: Int): Int = 42
def unapply(scrut: Any): Option[Int] = None
}
-
class Buffer {
object Get extends Sync
var ps: PartialFunction[Any, Any] = {
- case Get(y) if y > 4 => // y gets a wildcard type for some reason?! hack
+ case Get(y) if y > 4 => // y gets a wildcard type for some reason?! hack
}
}
-
- println((new Buffer).ps.isDefinedAt(42))
- }
-
- object Bug1261 {
- sealed trait Elem
- case class Foo() extends Elem
- case class Bar() extends Elem
- trait Row extends Elem
- object Row {
- def unapply(r: Row) = true
-
- def f(elem: Elem) {
- elem match {
- case Bar() => ;
- case Row() => ;
- case Foo() => ; // used to give ERROR (unreachable code)
- }}}
- }
-/*
- object Feature1196 {
- def f(l: List[Int]) { }
-
- val l: Seq[Int] = List(1, 2, 3)
-
- l match {
- case x @ List(1, _) => f(x) // x needs to get better type List[int] here
- }
- }
-*/
- object TestIfOpt { //compile-only "test EqualsPatternClass in combination with MixTypes opt, bug #1278"
- trait Token {
- val offset : Int
- def matching : Option[Token]
- }
- def go(tok : Token) = (tok.matching: @unchecked) match {
- case Some(other) if true => Some(other)
- case _ if true => tok.matching match {
- case Some(other) => Some(other)
- case _ => None
- }
+ def run() {
+ assert(!(new Buffer).ps.isDefinedAt(42))
}
}
- object Go { // bug #1277 compile-only
- trait Core { def next : Position = null }
- trait Dir
- val NEXT = new Dir{}
-
- trait Position extends Core
-
- (null:Core, null:Dir) match {
- case (_, NEXT) if true => false // no matter whether NEXT test succeed, cannot throw column because of guard
- case (at2:Position,dir) => true
- }
- }
-
- trait Outer { // bug #1282 compile-only
- object No
- trait File {
- (null:AnyRef) match {
- case No => false
- }
- }
- }
-
- object cast2 { // #1281
-
+ object Bug1281 {
class Sync {
def unapplySeq(scrut: Int): Option[Seq[Int]] = {
- println("unapplySeq: "+scrut)
if (scrut == 42) Some(List(1, 2))
else None
}
}
-
class Buffer {
val Get = new Sync
-
val jp: PartialFunction[Any, Any] = {
- case Get(xs) => println(xs) // the argDummy <unapply-selector> should have proper arg.tpe (Int in this case)
+ case Get(xs) => // the argDummy <unapply-selector> should have proper arg.tpe (Int in this case)
}
}
-
- println((new Buffer).jp.isDefinedAt(40))
- println((new Buffer).jp.isDefinedAt(42))
+ def run() {
+ assert(!(new Buffer).jp.isDefinedAt(40))
+ assert(!(new Buffer).jp.isDefinedAt(42))
+ }
}
- object ClassDefInGuard extends TestCase("classdef in guard") { // compile-and-load only
- val z:PartialFunction[Any,Any] = {
- case x::xs if xs.forall { y => y.hashCode() > 0 } => 1
+ object ClassDefInGuard {
+ val z: PartialFunction[Any, Any] = {
+ case x :: xs if xs.forall { y => y.hashCode() > 0 } => 1
}
- override def runTest {
- val s:PartialFunction[Any,Any] = {
- case List(4::xs) => 1
- case List(5::xs) => 1
- case _ if false =>
- case List(3::xs) if List(3:Any).forall { g => g.hashCode() > 0 } => 1
- }
+ def run() {
+ val s: PartialFunction[Any, Any] = {
+ case List(4 :: xs) => 1
+ case List(5 :: xs) => 1
+ case _ if false =>
+ case List(3 :: xs) if List(3: Any).forall { g => g.hashCode() > 0 } => 1
+ }
z.isDefinedAt(42)
s.isDefinedAt(42)
// just load the thing, to see if the classes are found
- (None:Option[Boolean] @unchecked) match {
+ (None: Option[Boolean] @unchecked) match {
case x if x.map(x => x).isEmpty =>
}
}
@@ -610,33 +498,33 @@ object Test extends TestConsoleMain {
// bug#457
- object Bug457 extends TestCase("Bug457") {
+ object Bug457 {
def method1() = {
val x = "Hello, world"; val y = 100;
y match {
case _: Int if (x match { case t => t.trim().length() > 0 }) => false;
case _ => true;
- }}
+ }
+ }
def method2(): scala.Boolean = {
val x: String = "Hello, world"; val y: scala.Int = 100; {
var temp1: scala.Int = y
var result: scala.Boolean = false
- if (
- {
- var result1: scala.Boolean = true;
- if (y == 100)
- result1
- else
- throw new MatchError("crazybox.scala, line 11")
- } && (y > 90)
- )
+ if ({
+ var result1: scala.Boolean = true;
+ if (y == 100)
+ result1
+ else
+ throw new MatchError("crazybox.scala, line 11")
+ } && (y > 90))
result
- else
- throw new MatchError("crazybox.scala, line 9")
- }}
+ else
+ throw new MatchError("crazybox.scala, line 9")
+ }
+ }
- override def runTest {
+ def run() {
method1();
method2();
}
@@ -644,7 +532,7 @@ object Test extends TestConsoleMain {
// bug#508
- object Bug508 extends TestCase("aladdin #508") {
+ object Bug508 {
case class Operator(x: Int);
val EQ = new Operator(2);
@@ -653,7 +541,7 @@ object Test extends TestConsoleMain {
case Pair(EQ, 1) => "1"
case Pair(EQ, 2) => "2"
}
- override def runTest {
+ def run() {
val x = Pair(EQ, 0);
assertEquals("0", analyze(x)); // should print "0"
val y = Pair(EQ, 1);
@@ -665,7 +553,7 @@ object Test extends TestConsoleMain {
// bug#789
- object Bug789 extends TestCase("aladdin #789") { // don't do this at home
+ object Bug789 { // don't do this at home
trait Impl
@@ -675,21 +563,21 @@ object Test extends TestConsoleMain {
type Both = SizeImpl with ColorImpl
- def info(x:Impl) = x match {
- case x:Both => "size "+x.size+" color "+x.color // you wish
- case x:SizeImpl => "!size "+x.size
- case x:ColorImpl => "color "+x.color
- case _ => "n.a."
+ def info(x: Impl) = x match {
+ case x: Both => "size " + x.size + " color " + x.color // you wish
+ case x: SizeImpl => "!size " + x.size
+ case x: ColorImpl => "color " + x.color
+ case _ => "n.a."
}
- def info2(x:Impl) = x match {
- case x:SizeImpl with ColorImpl => "size "+x.size+" color "+x.color // you wish
- case x:SizeImpl => "!size "+x.size
- case x:ColorImpl => "color "+x.color
- case _ => "n.a."
+ def info2(x: Impl) = x match {
+ case x: SizeImpl with ColorImpl => "size " + x.size + " color " + x.color // you wish
+ case x: SizeImpl => "!size " + x.size
+ case x: ColorImpl => "color " + x.color
+ case _ => "n.a."
}
- override def runTest {
+ def run() {
// make up some class that has a size
class MyNode extends SizeImpl
assertEquals("!size 42", info(new MyNode))
@@ -699,34 +587,36 @@ object Test extends TestConsoleMain {
// bug#995
- object Bug995 extends TestCase("aladdin #995") {
+ object Bug995 {
def foo(v: Any): String = v match {
case s: Seq[_] => "Seq" // see hack in object Seq.unapplySeq
case a: AnyRef if runtime.ScalaRunTime.isArray(a) => "Array"
case _ => v.toString
}
- override def runTest { assertEquals("Array", foo(Array(0))) }
+ def run() { assertEquals("Array", foo(Array(0))) }
}
// bug#1093 (contribution #460)
- object Bug1093 extends TestCase("aladdin #1093") {
- override def runTest {assertTrue(Some(3) match {
- case Some(1 | 2) => false
- case Some(3) => true
- })}
+ object Bug1093 {
+ def run() {
+ assert(Some(3) match {
+ case Some(1 | 2) => false
+ case Some(3) => true
+ })
+ }
}
// bug#1094 (contribution #461)
- object Bug1094 extends TestCase("aladdin #1094") {
+ object Bug1094 {
def foo(ps: String*) = "Foo"
case class X(p: String, ps: String*)
def bar =
X("a", "b") match {
- case X(p, ps @ _*) => foo(ps : _*)
+ case X(p, ps@_*) => foo(ps: _*)
}
- override def runTest { assertEquals("Foo", bar) }
+ def run() { assertEquals("Foo", bar) }
}
// #2
@@ -740,17 +630,19 @@ object Test extends TestConsoleMain {
}
}
- object Ticket2 extends TestCase("#2") { override def runTest {
- val o1 = new Outer_2; val o2 = new Outer_2; val x: Any = o1.Foo(1, 2); val y: Any = o2.Foo(1, 2)
- assertFalse("equals test returns true (but should not)", x equals y)
- assertTrue("match enters wrong case", x match {
- case o2.Foo(x, y) => false
- case o1.Foo(x, y) => true
- case _ => false
- })
- }}
+ object Ticket2 {
+ def run() {
+ val o1 = new Outer_2; val o2 = new Outer_2; val x: Any = o1.Foo(1, 2); val y: Any = o2.Foo(1, 2)
+ assert(x != y, "equals test returns true (but should not)")
+ assert(x match {
+ case o2.Foo(x, y) => false
+ case o1.Foo(x, y) => true
+ case _ => false
+ }, "match enters wrong case")
+ }
+ }
-// #11
+ // #11
class MyException1 extends Exception
@@ -761,31 +653,31 @@ object Test extends TestConsoleMain {
class MyException2 extends MyException1 with SpecialException
- object Ticket11 extends TestCase("#11") {
- override def runTest {
+ object Ticket11 {
+ def run() {
Array[Throwable](new Exception("abc"),
- new MyException1,
- new MyException2).foreach { e =>
- try {
- throw e
- } catch {
- case e : SpecialException => {
- assume(e.isInstanceOf[SpecialException])
- }
- case e => {
- assume(e.isInstanceOf[Throwable])
- }
- }
- }
+ new MyException1,
+ new MyException2).foreach { e =>
+ try {
+ throw e
+ } catch {
+ case e: SpecialException => {
+ assume(e.isInstanceOf[SpecialException])
+ }
+ case e => {
+ assume(e.isInstanceOf[Throwable])
+ }
+ }
+ }
}
}
// #37
- object Ticket37 extends TestCase("#37") {
+ object Ticket37 {
def foo() {}
- val (a,b) = { foo(); (2,3) }
- override def runTest { assertEquals(this.a, 2) }
+ val (a, b) = { foo(); (2, 3) }
+ def run() { assertEquals(this.a, 2) }
}
// #44
@@ -793,146 +685,78 @@ object Test extends TestConsoleMain {
trait _X {
case class _Foo();
object _Bar {
- def unapply(foo: _Foo):Boolean = true;
+ def unapply(foo: _Foo): Boolean = true;
}
}
object Y extends _X {
val foo = _Foo()
foo match {
case _Bar() =>
- case _ => assert(false)
+ case _ => assert(false)
}
}
- object Ticket44 extends TestCase("#44") {
- override def runTest { assert(Y.toString ne null) /*instantiate Y*/ }
- }
-
- object Ticket211 extends TestCase("#211") {
- override def runTest {
- (Some(123):Option[Int]) match {
- case (x:Option[a]) if false => {};
- case (y:Option[b]) => {};
- }
- }
+ object Ticket44 {
+ def run() { assert(Y.toString ne null) /*instantiate Y*/ }
}
- sealed abstract class Tree
- case class Node(l: Tree, v: Int, r: Tree) extends Tree
- case object EmptyTree extends Tree
-
- object Ticket335 extends TestCase("#335") { // compile-only
- override def runTest {
- (EmptyTree: Tree @unchecked) match {
- case Node(_,v,_) if (v == 0) => 0
- case EmptyTree => 2
+ object Ticket211 {
+ def run() {
+ (Some(123): Option[Int]) match {
+ case (x: Option[a]) if false => {};
+ case (y: Option[b]) => {};
}
}
}
-// this test case checks nothing more than whether
-// case N for object N is translated to a check scrutinee.equals(N)
-// (or the other way round)... for a long time, we got away with
-// scrutinee eq N, but those golden days are, apparently, over.
- object Ticket346 extends TestCase("#346") {
+ // this test case checks nothing more than whether
+ // case N for object N is translated to a check scrutinee.equals(N)
+ // (or the other way round)... for a long time, we got away with
+ // scrutinee eq N, but those golden days are, apparently, over.
+ object Ticket346 {
-class L(val content: List[Int]) {
+ class L(val content: List[Int]) {
- def isEmpty = content.isEmpty
- def head = content.head
- def tail = content.tail
+ def isEmpty = content.isEmpty
+ def head = content.head
+ def tail = content.tail
- override def equals(that: Any): Boolean = {
+ override def equals(that: Any): Boolean = {
val result = that.isInstanceOf[N.type]
- println("L("+content+").equals("+that+") returning "+result)
+ println("L(" + content + ").equals(" + that + ") returning " + result)
result
+ }
}
-}
-object N extends L(Nil) {
-
- override def equals(that: Any): Boolean = {
- val result = (that.isInstanceOf[L] && that.asInstanceOf[L].isEmpty)
- //println("N.equals("+that+") returning "+result)
- result
+ object N extends L(Nil) {
+ override def equals(that: Any): Boolean =
+ (that.isInstanceOf[L] && that.asInstanceOf[L].isEmpty)
}
-}
-object C {
+ object C {
- def unapply(xs: L): Option[(Int, L)] = {
- if (xs.isEmpty)
- { println("xs is empty"); None }
+ def unapply(xs: L): Option[(Int, L)] = {
+ if (xs.isEmpty) { println("xs is empty"); None }
else
- Some((xs.head, new L(xs.tail)))
- }
-
-}
-
+ Some((xs.head, new L(xs.tail)))
+ }
- def empty(xs : L) : Boolean = xs match {
- case N => true
- case _ => false
}
- def singleton(xs : L) : Boolean = xs match {
- case C(_, N) => true
- case _ => false
+ def empty(xs: L): Boolean = xs match {
+ case N => true
+ case _ => false
}
-override def runTest() {
- assertTrue(empty( new L(Nil) ))
- assertTrue(singleton( new L(List(1)) ))
-}
-
-} // end Ticket346
-
- object Ticket495bis { // compile-only
- def signum(x: Int): Int =
- x match {
- case 0 => 0
- case _ if x < 0 => -1
- case _ if x > 0 => 1
- }
- def pair_m(x: Int, y: Int) =
- (x,y) match {
- case (_, 0) => 0
- case (-1, _) => -1
- case (_, _) => 1
- }
- }
-
- object Ticket522 { // compile-only
- class Term[X]
- object App {
- // i'm hidden
- case class InternalApply[Y,Z](fun:Y=>Z, arg:Y) extends Term[Z]
-
- def apply[Y,Z](fun:Y=>Z, arg:Y): Term[Z] =
- new InternalApply[Y,Z](fun,arg)
-
- def unapply[X](arg: Term[X]): Option[(Y=>Z,Y)] forSome {type Y; type Z} =
- arg match {
- case i:InternalApply[y,z] => Some(i.fun, i.arg)
- case _ => None
- }
- }
-
- App({x: Int => x}, 5) match {
- case App(arg, a) =>
- }
- } // end Ticket522
-
+ def singleton(xs: L): Boolean = xs match {
+ case C(_, N) => true
+ case _ => false
+ }
- object Ticket710 { // compile-only
- def method {
- sealed class Parent()
- case object Child extends Parent()
- val x: Parent = Child
- x match {
- case Child => ()
- }
+ def run() {
+ assert(empty(new L(Nil)))
+ assert(singleton(new L(List(1))))
}
- }
-}
+ } // end Ticket346
+}
diff --git a/test/files/run/pc-conversions.scala b/test/files/run/pc-conversions.scala
new file mode 100644
index 0000000000..60ee59c3c4
--- /dev/null
+++ b/test/files/run/pc-conversions.scala
@@ -0,0 +1,92 @@
+
+
+import collection._
+
+
+// test conversions between collections
+object Test {
+
+ def main(args: Array[String]) {
+ testConversions
+ }
+
+ def testConversions {
+ // seq conversions
+ assertSeq(parallel.mutable.ParArray(1, 2, 3))
+ assertSeq(parallel.mutable.ParHashMap(1 -> 2, 2 -> 3))
+ assertSeq(parallel.mutable.ParHashSet(1, 2, 3))
+ assertSeq(parallel.immutable.ParRange(1, 50, 1, false))
+ assertSeq(parallel.immutable.ParHashMap(1 -> 2, 2 -> 4))
+ assertSeq(parallel.immutable.ParHashSet(1, 2, 3))
+
+ // par conversions
+ assertPar(Array(1, 2, 3))
+ assertPar(mutable.ArrayBuffer(1, 2, 3))
+ assertPar(mutable.ArraySeq(1, 2, 3))
+ assertPar(mutable.WrappedArray.make[Int](Array(1, 2, 3)))
+ assertPar(mutable.HashMap(1 -> 1, 2 -> 2))
+ assertPar(mutable.HashSet(1, 2, 3))
+ assertPar(immutable.Range(1, 50, 1))
+ assertPar(immutable.HashMap(1 -> 1, 2 -> 2))
+ assertPar(immutable.HashSet(1, 2, 3))
+
+ // par.to* and to*.par tests
+ assertToPar(List(1 -> 1, 2 -> 2, 3 -> 3))
+ assertToPar(Stream(1 -> 1, 2 -> 2))
+ assertToPar(Array(1 -> 1, 2 -> 2))
+ assertToPar(mutable.PriorityQueue(1 -> 1, 2 -> 2, 3 -> 3))
+ assertToPar(mutable.ArrayBuffer(1 -> 1, 2 -> 2))
+ assertToPar(mutable.ArraySeq(1 -> 3))
+ assertToPar(mutable.WrappedArray.make[(Int, Int)](Array(1 -> 3)))
+ assertToPar(mutable.HashMap(1 -> 3))
+ assertToPar(mutable.HashSet(1 -> 3))
+ assertToPar(immutable.HashMap(1 -> 3))
+ assertToPar(immutable.HashSet(1 -> 3))
+ assertToPar(parallel.mutable.ParArray(1 -> 1, 2 -> 2, 3 -> 3))
+ assertToPar(parallel.mutable.ParHashMap(1 -> 2))
+ assertToPar(parallel.mutable.ParHashSet(1 -> 2))
+ assertToPar(parallel.immutable.ParHashMap(1 -> 2))
+ assertToPar(parallel.immutable.ParHashSet(1 -> 3))
+
+ assertToParWoMap(immutable.Range(1, 10, 2))
+
+ // seq and par again conversions)
+ assertSeqPar(parallel.mutable.ParArray(1, 2, 3))
+ }
+
+ def assertSeqPar[T](pc: parallel.ParIterable[T]) = pc.seq.par == pc
+
+ def assertSeq[T](pc: parallel.ParIterable[T]) = assert(pc.seq == pc)
+
+ def assertPar[T, P <: Parallel](xs: GenIterable[T]) = assert(xs == xs.par)
+
+ def assertToPar[K, V](xs: GenTraversable[(K, V)]) {
+ xs match {
+ case _: Seq[_] =>
+ assert(xs.toIterable.par == xs)
+ assert(xs.par.toIterable == xs)
+ case _ =>
+ }
+
+ assert(xs.toSeq.par == xs.toSeq)
+ assert(xs.par.toSeq == xs.toSeq)
+
+ assert(xs.toSet.par == xs.toSet)
+ assert(xs.par.toSet == xs.toSet)
+
+ assert(xs.toMap.par == xs.toMap)
+ assert(xs.par.toMap == xs.toMap)
+ }
+
+ def assertToParWoMap[T](xs: GenSeq[T]) {
+ assert(xs.toIterable.par == xs.toIterable)
+ assert(xs.par.toIterable == xs.toIterable)
+
+ assert(xs.toSeq.par == xs.toSeq)
+ assert(xs.par.toSeq == xs.toSeq)
+
+ assert(xs.toSet.par == xs.toSet)
+ assert(xs.par.toSet == xs.toSet)
+ }
+
+}
diff --git a/test/files/run/pf-catch.check b/test/files/run/pf-catch.check
new file mode 100644
index 0000000000..faee9566af
--- /dev/null
+++ b/test/files/run/pf-catch.check
@@ -0,0 +1,4 @@
+NoSuchElementException
+NullPointerException slipped by.
+NoSuchElementException
+DEBUG: NullPointerException
diff --git a/test/files/run/pf-catch.scala b/test/files/run/pf-catch.scala
new file mode 100644
index 0000000000..ba0781fe89
--- /dev/null
+++ b/test/files/run/pf-catch.scala
@@ -0,0 +1,34 @@
+object Test {
+ def shortName(x: AnyRef) = x.getClass.getName split '.' last
+ type Handler[+T] = PartialFunction[Throwable, T]
+
+ val standardHandler: Handler[String] = {
+ case x: java.util.NoSuchElementException => shortName(x)
+ case x: java.lang.IllegalArgumentException => shortName(x)
+ }
+
+ def fn[T: Handler](body: => T): T = {
+ try body
+ catch implicitly[Handler[T]]
+ }
+
+ def f1 = {
+ implicit val myHandler = standardHandler
+ println(fn(Nil.head))
+ println(fn(null.toString))
+ }
+ def f2 = {
+ implicit val myHandler: Handler[String] = standardHandler orElse {
+ case x => "DEBUG: " + shortName(x)
+ }
+ println(fn(Nil.head))
+ println(fn(null.toString))
+ }
+
+ def main(args: Array[String]): Unit = {
+ try f1
+ catch { case x => println(shortName(x) + " slipped by.") }
+
+ f2
+ }
+}
diff --git a/test/files/run/preinits.check b/test/files/run/preinits.check
new file mode 100644
index 0000000000..5584ab261e
--- /dev/null
+++ b/test/files/run/preinits.check
@@ -0,0 +1,3 @@
+A
+B
+2
diff --git a/test/pending/run/preinits.scala b/test/files/run/preinits.scala
index 8de43b62ea..6566c4086b 100644
--- a/test/pending/run/preinits.scala
+++ b/test/files/run/preinits.scala
@@ -1,6 +1,6 @@
trait A { val x: Int; println("A") }
trait B extends { override val x = 1 } with A { println("B") }
trait C extends { override val x = 2 } with A
-object Test extends B with C with Application {
+object Test extends B with C with App {
println(x)
}
diff --git a/test/files/run/primitive-sigs-2.check b/test/files/run/primitive-sigs-2.check
new file mode 100644
index 0000000000..c69d1b54a6
--- /dev/null
+++ b/test/files/run/primitive-sigs-2.check
@@ -0,0 +1,7 @@
+T<java.lang.Object> interface scala.ScalaObject
+List(A, char, class java.lang.Object)
+a
+public <T> java.lang.Object Arr.arr4(java.lang.Object[],scala.reflect.Manifest<T>)
+public float[] Arr.arr3(float[][])
+public scala.collection.immutable.List<java.lang.Character> Arr.arr2(java.lang.Character[])
+public scala.collection.immutable.List<java.lang.Object> Arr.arr1(int[])
diff --git a/test/files/run/primitive-sigs-2.scala b/test/files/run/primitive-sigs-2.scala
new file mode 100644
index 0000000000..b7152f7e3d
--- /dev/null
+++ b/test/files/run/primitive-sigs-2.scala
@@ -0,0 +1,39 @@
+import java.{ lang => jl }
+
+trait T[A] {
+ def f(): A
+}
+class C extends T[Char] {
+ def f(): Char = 'a'
+}
+class Arr {
+ def arr1(xs: Array[Int]): List[Int] = xs.toList
+ def arr2(xs: Array[jl.Character]): List[jl.Character] = xs.toList
+ def arr3(xss: Array[Array[Float]]): Array[Float] = xss map (_.sum)
+ // This gets a signature like
+ // public <T> java.lang.Object Arr.arr4(java.lang.Object[],scala.reflect.Manifest<T>)
+ //
+ // instead of the more appealing version from the past
+ // public <T> T[] Arr.arr4(T[][],scala.reflect.Manifest<T>)
+ //
+ // because java inflict's its reference-only generic-arrays on us.
+ //
+ def arr4[T: Manifest](xss: Array[Array[T]]): Array[T] = xss map (_.head)
+}
+
+object Test {
+ val c1: Class[_] = classOf[T[_]]
+ val c2: Class[_] = classOf[C]
+ val c3: Class[_] = classOf[Arr]
+
+ val c1m = c1.getMethods.toList filter (_.getName == "f") map (_.getGenericReturnType.toString)
+ val c2m = c2.getMethods.toList filter (_.getName == "f") map (_.getGenericReturnType.toString)
+ val c3m = c3.getDeclaredMethods.toList map (_.toGenericString)
+
+ def main(args: Array[String]): Unit = {
+ println(c2.getGenericInterfaces.map(_.toString).sorted mkString " ")
+ println(c1m ++ c2m sorted)
+ println(new C f)
+ c3m.sorted foreach println
+ }
+}
diff --git a/test/files/run/priorityQueue.scala b/test/files/run/priorityQueue.scala
index 9f453788fc..edc0e32b02 100644
--- a/test/files/run/priorityQueue.scala
+++ b/test/files/run/priorityQueue.scala
@@ -1,24 +1,373 @@
+
+
+import scala.collection.mutable.PriorityQueue
+
+
+
+
+
+
// populate a priority queue a few different ways and make sure they all seem equal
-object Test extends Application {
- import scala.collection.mutable.PriorityQueue
- import scala.util.Random.nextInt
- val pq1 = new PriorityQueue[String]
- val pq2 = new PriorityQueue[String]
- val pq3 = new PriorityQueue[String]
- val pq4 = new PriorityQueue[String]
-
- val strings = (1 to 20).toList map (i => List.fill((Math.abs(nextInt % 20)) + 1)("x").mkString)
-
- pq1 ++= strings
- pq2 ++= strings.reverse
- for (s <- strings) pq3 += s
- for (s <- strings.reverse) pq4 += s
-
- val pqs = List(pq1, pq2, pq3, pq4, pq1.clone, pq2.clone)
-
- for (queue1 <- pqs ; queue2 <- pqs) {
- assert(queue1 == queue2)
- assert(queue1.max == queue2.max)
+object Test {
+
+ def main(args: Array[String]) {
+ // testInsertionsAndEqualities
+ // testIntensiveEnqueueDequeue
+ // testTails
+ // testInits
+ // testFilters
+ // testDrops
+ // testEquality
+ // testMisc
+ // testReverse
+ // testToList
+ // testForeach
}
+
+ // def testInsertionsAndEqualities {
+ // import scala.util.Random.nextInt
+ // val pq1 = new PriorityQueue[String]
+ // val pq2 = new PriorityQueue[String]
+ // val pq3 = new PriorityQueue[String]
+ // val pq4 = new PriorityQueue[String]
+
+ // val strings = (1 to 20).toList map (i => List.fill((Math.abs(nextInt % 20)) + 1)("x").mkString)
+
+ // pq1 ++= strings
+ // pq2 ++= strings.reverse
+ // for (s <- strings) pq3 += s
+ // for (s <- strings.reverse) pq4 += s
+
+ // val pqs = List(pq1, pq2, pq3, pq4, pq1.clone, pq2.clone)
+
+ // for (queue1 <- pqs ; queue2 <- pqs) {
+ // val l1: List[String] = queue1.dequeueAll[String, List[String]]
+ // val l2: List[String] = queue2.dequeueAll[String, List[String]]
+ // assert(l1 == l2)
+ // assert(queue1.max == queue2.max)
+ // }
+
+ // assertPriorityDestructive(pq1)
+ // }
+
+ // not a sequence anymore, Mildred
+ // def testIndexing {
+ // val pq = new PriorityQueue[Char]
+ // "The quick brown fox jumps over the lazy dog".foreach(pq += _)
+
+ // // val iter = pq.iterator
+ // // while (iter.hasNext) println("`" + iter.next + "`")
+ // assert(pq(0) == 'z')
+ // assert(pq(1) == 'y')
+ // assert(pq(2) == 'x')
+ // assert(pq(3) == 'w')
+ // assert(pq(4) == 'v')
+ // assert(pq(5) == 'u')
+ // assert(pq(7) == 't')
+ // assert(pq(8) == 's')
+ // assert(pq(9) == 'r')
+ // assert(pq(10) == 'r')
+
+ // pq.clear
+ // "abcdefghijklmnopqrstuvwxyz".foreach(pq += _)
+ // for (i <- 0 until 26) assert(pq(i) == ('z' - i))
+
+ // val intpq = new PriorityQueue[Int]
+ // val intlst = new collection.mutable.ArrayBuffer ++ (0 until 100)
+ // val random = new util.Random(101)
+ // while (intlst.nonEmpty) {
+ // val idx = random.nextInt(intlst.size)
+ // intpq += intlst(idx)
+ // intlst.remove(idx)
+ // }
+ // for (i <- 0 until 100) assert(intpq(i) == (99 - i))
+ // }
+
+ // def testTails {
+ // val pq = new PriorityQueue[Int]
+ // for (i <- 0 until 10) pq += i * 4321 % 200
+
+ // assert(pq.size == 10)
+ // assert(pq.nonEmpty)
+
+ // val tailpq = pq.tail
+ // // pq.printstate
+ // // tailpq.printstate
+ // assert(tailpq.size == 9)
+ // assert(tailpq.nonEmpty)
+ // assertPriorityDestructive(tailpq)
+ // }
+
+ // def assertPriorityDestructive[A](pq: PriorityQueue[A])(implicit ord: Ordering[A]) {
+ // import ord._
+ // var prev: A = null.asInstanceOf[A]
+ // while (pq.nonEmpty) {
+ // val curr = pq.dequeue
+ // if (prev != null) assert(curr <= prev)
+ // prev = curr
+ // }
+ // }
+
+ // def testInits {
+ // val pq = new PriorityQueue[Long]
+ // for (i <- 0 until 20) pq += (i + 313) * 111 % 300
+
+ // assert(pq.size == 20)
+
+ // val initpq = pq.init
+ // assert(initpq.size == 19)
+ // assertPriorityDestructive(initpq)
+ // }
+
+ // def testFilters {
+ // val pq = new PriorityQueue[String]
+ // for (i <- 0 until 100) pq += "Some " + (i * 312 % 200)
+
+ // val filpq = pq.filter(_.indexOf('0') != -1)
+ // assertPriorityDestructive(filpq)
+ // }
+
+ // def testIntensiveEnqueueDequeue {
+ // val pq = new PriorityQueue[Int]
+
+ // testIntensive(1000, pq)
+ // pq.clear
+ // testIntensive(200, pq)
+ // }
+
+ // def testIntensive(sz: Int, pq: PriorityQueue[Int]) {
+ // val lst = new collection.mutable.ArrayBuffer[Int] ++ (0 until sz)
+ // val rand = new util.Random(7)
+ // while (lst.nonEmpty) {
+ // val idx = rand.nextInt(lst.size)
+ // pq.enqueue(lst(idx))
+ // lst.remove(idx)
+ // if (rand.nextDouble < 0.25 && pq.nonEmpty) pq.dequeue
+ // assertPriority(pq)
+ // }
+ // }
+
+ // def testDrops {
+ // val pq = new PriorityQueue[Int]
+ // pq ++= (0 until 100)
+ // val droppq = pq.drop(50)
+ // assertPriority(droppq)
+
+ // pq.clear
+ // pq ++= droppq
+ // assertPriorityDestructive(droppq)
+ // assertPriority(pq)
+ // assertPriorityDestructive(pq)
+ // }
+
+ // // your sequence days have ended, foul priority queue
+ // // def testUpdates {
+ // // val pq = new PriorityQueue[Int]
+ // // pq ++= (0 until 36)
+ // // assertPriority(pq)
+
+ // // pq(0) = 100
+ // // assert(pq(0) == 100)
+ // // assert(pq.dequeue == 100)
+ // // assertPriority(pq)
+
+ // // pq.clear
+
+ // // pq ++= (1 to 100)
+ // // pq(5) = 200
+ // // assert(pq(0) == 200)
+ // // assert(pq(1) == 100)
+ // // assert(pq(2) == 99)
+ // // assert(pq(3) == 98)
+ // // assert(pq(4) == 97)
+ // // assert(pq(5) == 96)
+ // // assert(pq(6) == 94)
+ // // assert(pq(7) == 93)
+ // // assert(pq(98) == 2)
+ // // assert(pq(99) == 1)
+ // // assertPriority(pq)
+
+ // // pq(99) = 450
+ // // assert(pq(0) == 450)
+ // // assert(pq(1) == 200)
+ // // assert(pq(99) == 2)
+ // // assertPriority(pq)
+
+ // // pq(1) = 0
+ // // assert(pq(1) == 100)
+ // // assert(pq(99) == 0)
+ // // assertPriority(pq)
+ // // assertPriorityDestructive(pq)
+ // // }
+
+ // def testEquality {
+ // val pq1 = new PriorityQueue[Int]
+ // val pq2 = new PriorityQueue[Int]
+
+ // pq1 ++= (0 until 50)
+ // var i = 49
+ // while (i >= 0) {
+ // pq2 += i
+ // i -= 1
+ // }
+ // assert(pq1 == pq2)
+ // assertPriority(pq2)
+
+ // pq1 += 100
+ // assert(pq1 != pq2)
+ // pq2 += 100
+ // assert(pq1 == pq2)
+ // pq2 += 200
+ // assert(pq1 != pq2)
+ // pq1 += 200
+ // assert(pq1 == pq2)
+ // assertPriorityDestructive(pq1)
+ // assertPriorityDestructive(pq2)
+ // }
+
+ // def testMisc {
+ // val pq = new PriorityQueue[Int]
+ // pq ++= (0 until 100)
+ // assert(pq.size == 100)
+
+ // val (p1, p2) = pq.partition(_ < 50)
+ // assertPriorityDestructive(p1)
+ // assertPriorityDestructive(p2)
+
+ // val spq = pq.slice(25, 75)
+ // assertPriorityDestructive(spq)
+
+ // pq.clear
+ // pq ++= (0 until 10)
+ // pq += 5
+ // assert(pq.size == 11)
+
+ // val ind = pq.lastIndexWhere(_ == 5)
+ // assert(ind == 5)
+ // assertPriorityDestructive(pq)
+
+ // pq.clear
+ // pq ++= (0 until 10)
+ // assert(pq.lastIndexWhere(_ == 9) == 0)
+ // assert(pq.lastIndexOf(8) == 1)
+ // assert(pq.lastIndexOf(7) == 2)
+
+ // pq += 5
+ // pq += 9
+ // assert(pq.lastIndexOf(9) == 1)
+ // assert(pq.lastIndexWhere(_ % 2 == 1) == 10)
+ // assert(pq.lastIndexOf(5) == 6)
+
+ // val lst = pq.reverseIterator.toList
+ // for (i <- 0 until 5) assert(lst(i) == i)
+ // assert(lst(5) == 5)
+ // assert(lst(6) == 5)
+ // assert(lst(7) == 6)
+ // assert(lst(8) == 7)
+ // assert(lst(9) == 8)
+ // assert(lst(10) == 9)
+ // assert(lst(11) == 9)
+
+ // pq.clear
+ // assert(pq.reverseIterator.toList.isEmpty)
+
+ // pq ++= (50 to 75)
+ // assert(pq.lastIndexOf(70) == 5)
+
+ // pq += 55
+ // pq += 70
+ // assert(pq.lastIndexOf(70) == 6)
+ // assert(pq.lastIndexOf(55) == 22)
+ // assert(pq.lastIndexOf(55, 21) == 21)
+ // assert(pq.lastIndexWhere(_ > 54) == 22)
+ // assert(pq.lastIndexWhere(_ > 54, 21) == 21)
+ // assert(pq.lastIndexWhere(_ > 69, 5) == 5)
+ // }
+
+ // def testReverse {
+ // val pq = new PriorityQueue[(Int, Int)]
+ // pq ++= (for (i <- 0 until 10) yield (i, i * i % 10))
+
+ // assert(pq.reverse.size == pq.reverseIterator.toList.size)
+ // assert((pq.reverse zip pq.reverseIterator.toList).forall(p => p._1 == p._2))
+ // assert(pq.reverse.sameElements(pq.reverseIterator.toSeq))
+ // assert(pq.reverse(0)._1 == pq(9)._1)
+ // assert(pq.reverse(1)._1 == pq(8)._1)
+ // assert(pq.reverse(4)._1 == pq(5)._1)
+ // assert(pq.reverse(9)._1 == pq(0)._1)
+
+ // pq += ((7, 7))
+ // pq += ((7, 9))
+ // pq += ((7, 8))
+ // assert(pq.reverse.reverse == pq)
+ // assert(pq.reverse.lastIndexWhere(_._2 == 6) == 6)
+ // assertPriorityDestructive(pq.reverse.reverse)
+
+ // val iq = new PriorityQueue[Int]
+ // iq ++= (0 until 50)
+ // assert(iq.reverse == iq.reverseIterator.toSeq)
+ // assert(iq.reverse.reverse == iq)
+
+ // iq += 25
+ // iq += 40
+ // iq += 10
+ // assert(iq.reverse == iq.reverseIterator.toList)
+ // assert(iq.reverse.reverse == iq)
+ // assert(iq.reverse.lastIndexWhere(_ == 10) == 11)
+ // assertPriorityDestructive(iq.reverse.reverse)
+ // }
+
+ // def testToList {
+ // val pq = new PriorityQueue[Int]
+
+ // pq += 1
+ // pq += 4
+ // pq += 0
+ // pq += 5
+ // pq += 3
+ // pq += 2
+ // assert(pq.toList == pq)
+ // assert(pq == List(5, 4, 3, 2, 1, 0))
+ // assert(pq.reverse == List(0, 1, 2, 3, 4, 5))
+
+ // pq.clear
+ // for (i <- -50 until 50) pq += i
+ // assert(pq.toList == pq)
+ // assert(pq.toList == (-50 until 50).reverse)
+ // }
+
+ // def testForeach {
+ // val pq = new PriorityQueue[Char]
+
+ // pq += 't'
+ // pq += 'o'
+ // pq += 'b'
+ // pq += 'y'
+ // val sbf = new StringBuilder
+ // val sbi = new StringBuilder
+ // pq.foreach(sbf += _)
+ // pq.iterator.foreach(sbi += _)
+ // assert(sbf.toString == sbi.toString)
+ // assert(sbf.toString == "ytob")
+ // }
+
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/files/run/private-inline.check b/test/files/run/private-inline.check
new file mode 100644
index 0000000000..209e3ef4b6
--- /dev/null
+++ b/test/files/run/private-inline.check
@@ -0,0 +1 @@
+20
diff --git a/test/files/run/private-inline.flags b/test/files/run/private-inline.flags
new file mode 100644
index 0000000000..eb4d19bcb9
--- /dev/null
+++ b/test/files/run/private-inline.flags
@@ -0,0 +1 @@
+-optimise \ No newline at end of file
diff --git a/test/files/run/private-inline.scala b/test/files/run/private-inline.scala
new file mode 100644
index 0000000000..a45300b026
--- /dev/null
+++ b/test/files/run/private-inline.scala
@@ -0,0 +1,52 @@
+
+final class A {
+ private var x1 = false
+ var x2 = false
+
+ // manipulates private var
+ @inline private def wrapper1[T](body: => T): T = {
+ val saved = x1
+ x1 = true
+ try body
+ finally x1 = saved
+ }
+ // manipulates public var
+ @inline private def wrapper2[T](body: => T): T = {
+ val saved = x2
+ x2 = true
+ try body
+ finally x2 = saved
+ }
+
+ // not inlined
+ def f1a() = wrapper1(5)
+ // inlined!
+ def f1b() = identity(wrapper1(5))
+
+ // not inlined
+ def f2a() = wrapper2(5)
+ // inlined!
+ def f2b() = identity(wrapper2(5))
+}
+
+object Test {
+ def methodClasses = List("f1a", "f1b", "f2a", "f2b") map ("A$$anonfun$" + _ + "$1")
+
+ def main(args: Array[String]): Unit = {
+ val a = new A
+ import a._
+ println(f1a() + f1b() + f2a() + f2b())
+
+ // Don't know how else to test this: all these should have been
+ // inlined, so all should fail.
+ methodClasses foreach { clazz =>
+
+ val foundClass = (
+ try Class.forName(clazz)
+ catch { case _ => null }
+ )
+
+ assert(foundClass == null, foundClass)
+ }
+ }
+}
diff --git a/test/files/run/programmatic-main.check b/test/files/run/programmatic-main.check
new file mode 100644
index 0000000000..4aeb3ab60c
--- /dev/null
+++ b/test/files/run/programmatic-main.check
@@ -0,0 +1,29 @@
+ phase name id description
+ ---------- -- -----------
+ parser 1 parse source into ASTs, perform simple desugaring
+ namer 2 resolve names, attach symbols to named trees
+ packageobjects 3 load package objects
+ typer 4 the meat and potatoes: type the trees
+ superaccessors 5 add super accessors in traits and nested classes
+ pickler 6 serialize symbol tables
+ refchecks 7 reference/override checking, translate nested objects
+ liftcode 8 reify trees
+ uncurry 9 uncurry, translate function values to anonymous classes
+ tailcalls 10 replace tail calls by jumps
+ specialize 11 @specialized-driven class and method specialization
+ explicitouter 12 this refs to outer pointers, translate patterns
+ erasure 13 erase types, add interfaces for traits
+ lazyvals 14 allocate bitmaps, translate lazy vals into lazified defs
+ lambdalift 15 move nested functions to top level
+ constructors 16 move field definitions into constructors
+ flatten 17 eliminate inner classes
+ mixin 18 mixin composition
+ cleanup 19 platform-specific cleanups, generate reflective calls
+ icode 20 generate portable intermediate code
+ inliner 21 optimization: do inlining
+inlineExceptionHandlers 22 optimization: inline exception handlers
+ closelim 23 optimization: eliminate uncalled closures
+ dce 24 optimization: eliminate dead code
+ jvm 25 generate JVM bytecode
+ terminal 26 The last phase in the compiler chain
+
diff --git a/test/files/run/programmatic-main.scala b/test/files/run/programmatic-main.scala
new file mode 100644
index 0000000000..7bc5c5dfcf
--- /dev/null
+++ b/test/files/run/programmatic-main.scala
@@ -0,0 +1,14 @@
+import scala.tools.nsc._
+import io.Path
+
+object Test {
+ val cwd = Option(System.getProperty("partest.cwd")) getOrElse "."
+ val basedir = Path(cwd).parent / "lib" path
+ val baseargs = Array("-usejavacp", "-bootclasspath", basedir + "/scala-library.jar", "-cp", basedir + "/scala-compiler.jar")
+
+ def main(args: Array[String]): Unit = {
+ Console.withErr(Console.out) {
+ Main process (baseargs ++ "-Xpluginsdir /does/not/exist/foo/quux -Xshow-phases".split(' '))
+ }
+ }
+}
diff --git a/test/files/run/proxy.check b/test/files/run/proxy.check
index 9eb68b1e90..c40b3db7c2 100644
--- a/test/files/run/proxy.check
+++ b/test/files/run/proxy.check
@@ -2,3 +2,5 @@ false
true
false
false
+true
+true
diff --git a/test/files/run/proxy.scala b/test/files/run/proxy.scala
index 48192a7a79..ea222cb496 100644
--- a/test/files/run/proxy.scala
+++ b/test/files/run/proxy.scala
@@ -1,9 +1,17 @@
-object Test extends Application {
+object Test extends App {
val p = new Proxy {
- def self = 2
+ def self = 2
}
println(p equals 1)
println(p equals 2)
println(p equals 3)
println(p equals null)
+
+ case class Bippy(a: String) extends Proxy {
+ def self = a
+ }
+
+ val label = Bippy("bippy!")
+ println(label == label)
+ println(label == "bippy!")
}
diff --git a/test/files/run/randomAccessSeq-apply.scala b/test/files/run/randomAccessSeq-apply.scala
deleted file mode 100644
index 863a4d42a2..0000000000
--- a/test/files/run/randomAccessSeq-apply.scala
+++ /dev/null
@@ -1,15 +0,0 @@
-object Test extends Application {
- val empty = RandomAccessSeq()
- assert(empty.isEmpty)
-
- val single = RandomAccessSeq(1)
- assert(List(1) == single.toList)
-
- val two = RandomAccessSeq("a", "b")
- assert("a" == two.first)
- assert("b" == two.apply(1))
-
- println("OK")
-}
-
-// vim: set ts=2 sw=2 et:
diff --git a/test/files/run/range.scala b/test/files/run/range.scala
index 65d33a6134..f08b2105d3 100644
--- a/test/files/run/range.scala
+++ b/test/files/run/range.scala
@@ -6,30 +6,42 @@ object Test {
range.foreach(buffer += _);
assert(buffer.toList == range.iterator.toList, buffer.toList+"/"+range.iterator.toList)
}
-
+
+ def boundaryTests() = {
+ // #4321
+ assert((Int.MinValue to Int.MaxValue by Int.MaxValue).size == 3)
+ // #4308
+ val caught = (
+ try { (Long.MinValue to Long.MaxValue).sum ; false }
+ catch { case _: IllegalArgumentException => true }
+ )
+ assert(caught)
+ }
+
case class GR[T](val x: T)(implicit val num: Integral[T]) {
import num._
-
+
def negated = GR[T](-x)
-
+
def gr1 = NumericRange(x, x, x)
def gr2 = NumericRange.inclusive(x, x, x)
def gr3 = NumericRange(x, x * fromInt(10), x)
def gr4 = NumericRange.inclusive(x, x * fromInt(10), x)
-
- def check = assert(
- gr1.isEmpty && !gr2.isEmpty &&
- gr3.size == 9 && gr4.size == 10 &&
- (gr3.toList ::: negated.gr3.toList).sum == num.zero &&
- !(gr3 contains (x * fromInt(10))) &&
- (gr4 contains (x * fromInt(10)))
- )
+ def gr5 = gr3.toList ::: negated.gr3.toList
+
+ def check = {
+ assert(gr1.isEmpty && !gr2.isEmpty)
+ assert(gr3.size == 9 && gr4.size == 10)
+ assert(gr5.sum == num.zero, gr5.toString)
+ assert(!(gr3 contains (x * fromInt(10))))
+ assert((gr4 contains (x * fromInt(10))))
+ }
}
-
+
def main(args: Array[String]): Unit = {
implicit val imp1 = Numeric.BigDecimalAsIfIntegral
implicit val imp2 = Numeric.DoubleAsIfIntegral
-
+
val _grs = List[GR[_]](
GR(BigDecimal(5.0)),
GR(BigInt(5)),
@@ -39,16 +51,22 @@ object Test {
)
val grs = _grs ::: (_grs map (_.negated))
grs foreach (_.check)
-
+
assert(NumericRange(1, 10, 1) sameElements (1 until 10))
assert(NumericRange.inclusive(1, 10, 1) sameElements (1 to 10))
assert(NumericRange.inclusive(1, 100, 3) sameElements (1 to 100 by 3))
-
+
+ // #2518
+ assert((3L to 7 by 2) sameElements List(3L, 5L, 7L))
+
rangeForeach(1 to 10);
rangeForeach(1 until 10);
rangeForeach(10 to 1 by -1);
rangeForeach(10 until 1 by -1);
rangeForeach(10 to 1 by -3);
rangeForeach(10 until 1 by -3);
+
+ // living on the edges
+ boundaryTests()
}
}
diff --git a/test/files/run/records.scala b/test/files/run/records.scala
new file mode 100644
index 0000000000..96b0b4cb0f
--- /dev/null
+++ b/test/files/run/records.scala
@@ -0,0 +1,27 @@
+trait C {
+ def f: Int
+}
+
+object Test {
+ type T = C {
+ def f: Int
+ def g: String
+ }
+
+ val x: T = new C {
+ def f = 1
+ def g = "hello"
+ }
+
+ val y = new C {
+ def f = 2
+ def g = " world"
+ }
+
+ val z: T = y
+
+ def main(args: Array[String]): Unit = {
+ assert(x.f+z.f == 3)
+ assert(x.g+z.g == "hello world")
+ }
+}
diff --git a/test/files/run/reflection-implClass.scala b/test/files/run/reflection-implClass.scala
new file mode 100644
index 0000000000..b91f122a23
--- /dev/null
+++ b/test/files/run/reflection-implClass.scala
@@ -0,0 +1,38 @@
+/**
+ * Tries to load a symbol for the `Foo$class` using Scala reflection.
+ * Since trait implementation classes do not get pickling information
+ * symbol for them should be created using fallback mechanism
+ * that exposes Java reflection information dressed up in
+ * a Scala symbol.
+ */
+object Test extends App with Outer {
+ import scala.reflect.mirror
+
+ assert(mirror.classToSymbol(manifest[Foo].erasure).info.declaration(mirror.newTermName("bar")).info ==
+ mirror.classToSymbol(manifest[Bar].erasure).info.declaration(mirror.newTermName("foo")).info)
+
+ val s1 = implClass(manifest[Foo].erasure)
+ assert(s1 != mirror.NoSymbol)
+ assert(s1.info != mirror.NoType)
+ assert(s1.companionModule.info != mirror.NoType)
+ assert(s1.companionModule.info.declaration(mirror.newTermName("bar")) != mirror.NoSymbol)
+ val s2 = implClass(manifest[Bar].erasure)
+ assert(s2 != mirror.NoSymbol)
+ assert(s2.info != mirror.NoType)
+ assert(s2.companionModule.info != mirror.NoType)
+ assert(s2.companionModule.info.declaration(mirror.newTermName("foo")) != mirror.NoSymbol)
+ def implClass(clazz: Class[_]) = {
+ val implClass = Class.forName(clazz.getName + "$class")
+ mirror.classToSymbol(implClass)
+ }
+}
+
+trait Foo {
+ def bar = 1
+}
+
+trait Outer {
+ trait Bar {
+ def foo = 1
+ }
+}
diff --git a/test/files/run/regularpatmat.check b/test/files/run/regularpatmat.check
deleted file mode 100644
index 3417d9a98a..0000000000
--- a/test/files/run/regularpatmat.check
+++ /dev/null
@@ -1,126 +0,0 @@
-pretest
-passed ok
-testWR_1
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-testWR_2
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-testWR_3
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-testWR_4
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-testWR_5
-passed ok
-passed ok
-passed ok
-testWR_6
-passed ok
-passed ok
-testWR_7
-passed ok
-testWR_8
-passed ok
-testWS
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-testWT
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-testWV
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-testBK
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-testBM
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-BN preTest: true
-testBN
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-testBO
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-testMZ - bugs #132 #133b #180 #195 #196 #398 #406 #441
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
-passed ok
diff --git a/test/files/run/reify_anonymous.check b/test/files/run/reify_anonymous.check
new file mode 100644
index 0000000000..b8626c4cff
--- /dev/null
+++ b/test/files/run/reify_anonymous.check
@@ -0,0 +1 @@
+4
diff --git a/test/files/run/reify_anonymous.scala b/test/files/run/reify_anonymous.scala
new file mode 100644
index 0000000000..1e7f3fe856
--- /dev/null
+++ b/test/files/run/reify_anonymous.scala
@@ -0,0 +1,14 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ println(new {def x = 2; def y = x * x}.y)
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ toolbox.runExpr(ttree)
+}
diff --git a/test/files/run/reify_for1.check b/test/files/run/reify_for1.check
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/test/files/run/reify_for1.check
diff --git a/test/files/run/reify_for1.scala b/test/files/run/reify_for1.scala
new file mode 100644
index 0000000000..4b03330293
--- /dev/null
+++ b/test/files/run/reify_for1.scala
@@ -0,0 +1,16 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ val sumOfSquares1 = (for (i <- 1 to 100; if (i % 3 == 0)) yield Math.pow(i, 2)).sum
+ val sumOfSquares2 = (1 to 100).filter(_ % 3 == 0).map(Math.pow(_, 2)).sum
+ assert(sumOfSquares1 == sumOfSquares2)
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ toolbox.runExpr(ttree)
+}
diff --git a/test/files/run/reify_generic.check b/test/files/run/reify_generic.check
new file mode 100644
index 0000000000..b8626c4cff
--- /dev/null
+++ b/test/files/run/reify_generic.check
@@ -0,0 +1 @@
+4
diff --git a/test/files/run/reify_generic.scala b/test/files/run/reify_generic.scala
new file mode 100644
index 0000000000..aef038b2d8
--- /dev/null
+++ b/test/files/run/reify_generic.scala
@@ -0,0 +1,15 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ val product = List(1, 2, 3).head * List[Any](4, 2, 0).head.asInstanceOf[Int]
+ println(product)
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ toolbox.runExpr(ttree)
+}
diff --git a/test/files/run/reify_inheritance.check b/test/files/run/reify_inheritance.check
new file mode 100644
index 0000000000..25bf17fc5a
--- /dev/null
+++ b/test/files/run/reify_inheritance.check
@@ -0,0 +1 @@
+18 \ No newline at end of file
diff --git a/test/files/run/reify_inheritance.scala b/test/files/run/reify_inheritance.scala
new file mode 100644
index 0000000000..2a1b5f764f
--- /dev/null
+++ b/test/files/run/reify_inheritance.scala
@@ -0,0 +1,23 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ class C {
+ def x = 2
+ def y = x * x
+ }
+
+ class D extends C {
+ override def x = 3
+ }
+
+ println(new D().y * new C().x)
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ toolbox.runExpr(ttree)
+}
diff --git a/test/files/run/reify_printf.check b/test/files/run/reify_printf.check
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/test/files/run/reify_printf.check
diff --git a/test/files/run/reify_printf.scala b/test/files/run/reify_printf.scala
new file mode 100644
index 0000000000..30901b98c2
--- /dev/null
+++ b/test/files/run/reify_printf.scala
@@ -0,0 +1,75 @@
+import java.io.{ ByteArrayOutputStream, PrintStream }
+import scala.reflect.Code
+import scala.reflect.mirror._
+import scala.reflect.api._
+import scala.reflect.api.Trees
+import scala.reflect.internal.Types
+import reflect.runtime.Mirror.ToolBox
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import scala.util.matching.Regex
+
+object Test extends App {
+ val tree = tree_printf(Code.lift("hello %s").tree, Code.lift("world").tree)
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter, args mkString " ")
+ val ttree = toolbox.typeCheck(tree)
+
+ val output = new ByteArrayOutputStream()
+ Console.setOut(new PrintStream(output))
+ val evaluated = toolbox.runExpr(ttree)
+
+ assert(output.toString() == "hello world", output.toString() +" == hello world")
+
+ /*
+ macro def printf(format: String, params: Any*) : String = tree_printf(format: Tree, (params: Seq[Tree]): _*)
+ */
+
+ var i = 0
+ def gensym(name: String) = { i += 1; newTermName(name + i) }
+
+ def createTempValDef( value : Tree, tpe : Type ) : (Option[Tree],Tree) = {
+ val local = gensym("temp")
+ (
+ Some(
+ ValDef(
+ Modifiers()
+ , local
+ , TypeTree().setType(tpe)
+ , value
+ )
+ )
+ , Ident(local)
+ )
+ }
+
+ def tree_printf(format: Tree, params: Tree*) = {
+ val Literal(Constant(s_format: String)) = format
+ val paramsStack = scala.collection.mutable.Stack(params: _*)
+ val parsed = s_format.split("(?<=%[\\w%])|(?=%[\\w%])") map {
+ case "%d" => createTempValDef( paramsStack.pop, classToType(classOf[Int]) )
+ case "%s" => createTempValDef( paramsStack.pop, classToType(classOf[String]) )
+ case "%%" => {
+ (None:Option[Tree], Literal(Constant("%")))
+ }
+ case part => {
+ (None:Option[Tree], Literal(Constant(part)))
+ }
+ }
+
+ val evals = for ((Some(eval), _) <- parsed if eval != None) yield (eval: Tree)
+ val prints = for ((_, ref) <- parsed) yield
+ Apply(
+ Select(
+ Select(
+ Ident( newTermName("scala") )
+ , newTermName("Predef")
+ )
+ , newTermName("print")
+ )
+ , List(ref)
+ ): Tree
+ Block((evals ++ prints).toList, Literal(Constant(())))
+ }
+}
diff --git a/test/files/run/reify_varargs.check b/test/files/run/reify_varargs.check
new file mode 100644
index 0000000000..e300a570a7
--- /dev/null
+++ b/test/files/run/reify_varargs.check
@@ -0,0 +1 @@
+Message=On the fifth of August there was a disturbance in the Force on planet Hoth.
diff --git a/test/files/run/reify_varargs.scala b/test/files/run/reify_varargs.scala
new file mode 100644
index 0000000000..d38cbf2aac
--- /dev/null
+++ b/test/files/run/reify_varargs.scala
@@ -0,0 +1,17 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ val msg = java.text.MessageFormat.format(
+ "On {1} there was {2} on planet {0}.",
+ "Hoth", "the fifth of August", "a disturbance in the Force")
+ println("Message="+msg)
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ toolbox.runExpr(ttree)
+}
diff --git a/test/files/run/repl-assign.check b/test/files/run/repl-assign.check
new file mode 100644
index 0000000000..c6b0458f04
--- /dev/null
+++ b/test/files/run/repl-assign.check
@@ -0,0 +1,20 @@
+Type in expressions to have them evaluated.
+Type :help for more information.
+
+scala>
+
+scala> var x = 10
+x: Int = 10
+
+scala> var y = 11
+y: Int = 11
+
+scala> x = 12
+x: Int = 12
+
+scala> y = 13
+y: Int = 13
+
+scala>
+
+scala>
diff --git a/test/files/run/repl-assign.scala b/test/files/run/repl-assign.scala
new file mode 100644
index 0000000000..ee3c1649d8
--- /dev/null
+++ b/test/files/run/repl-assign.scala
@@ -0,0 +1,10 @@
+import scala.tools.partest.ReplTest
+
+object Test extends ReplTest {
+ def code = """
+var x = 10
+var y = 11
+x = 12
+y = 13
+ """
+} \ No newline at end of file
diff --git a/test/files/run/repl-backticks.check b/test/files/run/repl-backticks.check
new file mode 100644
index 0000000000..c0561abd7c
--- /dev/null
+++ b/test/files/run/repl-backticks.check
@@ -0,0 +1,2 @@
+import java.lang.Thread.`yield`
+import scala.`package`.Throwable
diff --git a/test/files/run/repl-backticks.scala b/test/files/run/repl-backticks.scala
new file mode 100644
index 0000000000..11c58e18a1
--- /dev/null
+++ b/test/files/run/repl-backticks.scala
@@ -0,0 +1,18 @@
+import scala.tools.nsc._
+
+object Test {
+ val testCode = <code>
+ import java.lang.Thread.`yield`
+ import scala.`package`.Throwable
+
+ `yield`
+ </code>.text
+
+ def main(args: Array[String]) = {
+ val settings = new Settings()
+ settings.classpath.value = System.getProperty("java.class.path")
+ val repl = new Interpreter(settings)
+ repl.interpret(testCode)
+ }
+}
+
diff --git a/test/files/run/repl-bare-expr.check b/test/files/run/repl-bare-expr.check
new file mode 100644
index 0000000000..8b6434e986
--- /dev/null
+++ b/test/files/run/repl-bare-expr.check
@@ -0,0 +1,54 @@
+Type in expressions to have them evaluated.
+Type :help for more information.
+
+scala>
+
+scala> 2 ; 3
+<console>:7: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+ 2 ;;
+ ^
+res0: Int = 3
+
+scala> { 2 ; 3 }
+<console>:8: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+ { 2 ; 3 }
+ ^
+res1: Int = 3
+
+scala> 5 ; 10 ; case object Cow ; 20 ; class Moo { override def toString = "Moooooo" } ; 30 ; def bippy = {
+ 1 +
+ 2 +
+ 3 } ; bippy+88+11
+<console>:7: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+ 5 ; 10 ; case object Cow ; 20 ; class Moo { override def toString = "Moooooo" } ; 30 ; def bippy = {
+ ^
+<console>:7: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+ 5 ; 10 ; case object Cow ; 20 ; class Moo { override def toString = "Moooooo" } ; 30 ; def bippy = {
+ ^
+<console>:7: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+ 5 ; 10 ; case object Cow ; 20 ; class Moo { override def toString = "Moooooo" } ; 30 ; def bippy = {
+ ^
+<console>:7: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+ 5 ; 10 ; case object Cow ; 20 ; class Moo { override def toString = "Moooooo" } ; 30 ; def bippy = {
+ ^
+defined module Cow
+defined class Moo
+bippy: Int
+res2: Int = 105
+
+scala>
+
+scala> object Bovine { var x: List[_] = null } ; case class Ruminant(x: Int) ; bippy * bippy * bippy
+defined module Bovine
+defined class Ruminant
+res3: Int = 216
+
+scala> Bovine.x = List(Ruminant(5), Cow, new Moo)
+Bovine.x: List[Any] = List(Ruminant(5), Cow, Moooooo)
+
+scala> Bovine.x
+res4: List[Any] = List(Ruminant(5), Cow, Moooooo)
+
+scala>
+
+scala>
diff --git a/test/files/run/repl-bare-expr.scala b/test/files/run/repl-bare-expr.scala
new file mode 100644
index 0000000000..df9849fa6d
--- /dev/null
+++ b/test/files/run/repl-bare-expr.scala
@@ -0,0 +1,16 @@
+import scala.tools.partest.ReplTest
+
+object Test extends ReplTest {
+ def code = """
+2 ; 3
+{ 2 ; 3 }
+5 ; 10 ; case object Cow ; 20 ; class Moo { override def toString = "Moooooo" } ; 30 ; def bippy = {
+ 1 +
+ 2 +
+ 3 } ; bippy+88+11
+
+object Bovine { var x: List[_] = null } ; case class Ruminant(x: Int) ; bippy * bippy * bippy
+Bovine.x = List(Ruminant(5), Cow, new Moo)
+Bovine.x
+ """
+} \ No newline at end of file
diff --git a/test/files/run/repl-colon-type.check b/test/files/run/repl-colon-type.check
new file mode 100644
index 0000000000..66c2fcc77f
--- /dev/null
+++ b/test/files/run/repl-colon-type.check
@@ -0,0 +1,57 @@
+Type in expressions to have them evaluated.
+Type :help for more information.
+
+scala>
+
+scala> :type List[1, 2, 3]
+<console>:2: error: identifier expected but integer literal found.
+ List[1, 2, 3]
+ ^
+
+
+scala> :type List(1, 2, 3)
+List[Int]
+
+scala> :type def foo[T](x: T) = List(x)
+[T](x: T)List[T]
+
+scala> :type val bar = List(Set(1))
+List[scala.collection.immutable.Set[Int]]
+
+scala> :type lazy val bar = Set(Set(1))
+scala.collection.immutable.Set[scala.collection.immutable.Set[Int]]
+
+scala> :type def f[T >: Null, U <: String](x: T, y: U) = Set(x, y)
+[T >: Null, U <: String](x: T, y: U)scala.collection.immutable.Set[Any]
+
+scala> :type def x = 1 ; def bar[T >: Null <: AnyRef](xyz: T) = 5
+[T >: Null <: AnyRef](xyz: T)Int
+
+scala>
+
+scala> :type 5
+Int
+
+scala> :type val f = 5
+Int
+
+scala> :type lazy val f = 5
+Int
+
+scala> :type protected lazy val f = 5
+Int
+
+scala> :type def f = 5
+Int
+
+scala> :type def f() = 5
+()Int
+
+scala>
+
+scala> :type def g[T](xs: Set[_ <: T]) = Some(xs.head)
+[T](xs: Set[_ <: T])Some[T]
+
+scala>
+
+scala>
diff --git a/test/files/run/repl-colon-type.scala b/test/files/run/repl-colon-type.scala
new file mode 100644
index 0000000000..39ab580d2a
--- /dev/null
+++ b/test/files/run/repl-colon-type.scala
@@ -0,0 +1,23 @@
+import scala.tools.partest.ReplTest
+
+object Test extends ReplTest {
+ def code = """
+ |:type List[1, 2, 3]
+ |:type List(1, 2, 3)
+ |:type def foo[T](x: T) = List(x)
+ |:type val bar = List(Set(1))
+ |:type lazy val bar = Set(Set(1))
+ |:type def f[T >: Null, U <: String](x: T, y: U) = Set(x, y)
+ |:type def x = 1 ; def bar[T >: Null <: AnyRef](xyz: T) = 5
+ |
+ |:type 5
+ |:type val f = 5
+ |:type lazy val f = 5
+ |:type protected lazy val f = 5
+ |:type def f = 5
+ |:type def f() = 5
+ |
+ |:type def g[T](xs: Set[_ <: T]) = Some(xs.head)
+ """.stripMargin
+}
+
diff --git a/test/files/run/repl-exceptions.check b/test/files/run/repl-exceptions.check
new file mode 100644
index 0000000000..f7ce018422
--- /dev/null
+++ b/test/files/run/repl-exceptions.check
@@ -0,0 +1,25 @@
+Type in expressions to have them evaluated.
+Type :help for more information.
+
+scala>
+
+scala> sys.SystemProperties.traceSourcePath setValue ""
+res0: String = null
+
+scala> def f = sys.error("hi mom")
+f: Nothing
+
+scala> f
+[package.error] (package.scala:27)
+(access lastException for the full trace)
+
+scala> lastException.show
+/* The repl internal portion of the stack trace is elided. */
+[package.error] (package.scala:27)
+[.f] (<console>:7)
+[.<init>] (<console>:9)
+[.<clinit>] (<console>:-1)
+
+scala>
+
+scala>
diff --git a/test/files/run/repl-exceptions.scala b/test/files/run/repl-exceptions.scala
new file mode 100644
index 0000000000..bccedeba6b
--- /dev/null
+++ b/test/files/run/repl-exceptions.scala
@@ -0,0 +1,13 @@
+import scala.tools.partest.ReplTest
+import scala.tools.util.Javap
+
+// This test blows up under -Yrepl-sync.
+object Test extends ReplTest {
+ override def extraSettings = "-Yrich-exceptions"
+ def code = """
+ |sys.SystemProperties.traceSourcePath setValue ""
+ |def f = sys.error("hi mom")
+ |f
+ |lastException.show
+ """.stripMargin
+}
diff --git a/test/files/run/repl-parens.check b/test/files/run/repl-parens.check
new file mode 100644
index 0000000000..944846541f
--- /dev/null
+++ b/test/files/run/repl-parens.check
@@ -0,0 +1,84 @@
+Type in expressions to have them evaluated.
+Type :help for more information.
+
+scala> (2)
+res0: Int = 2
+
+scala> (2 + 2)
+res1: Int = 4
+
+scala> ((2 + 2))
+res2: Int = 4
+
+scala> ((2 + 2))
+res3: Int = 4
+
+scala> ( (2 + 2))
+res4: Int = 4
+
+scala> ( (2 + 2 ) )
+res5: Int = 4
+
+scala> 5 ; ( (2 + 2 ) ) ; ((5))
+<console>:7: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+ 5 ; ( (2 + 2 ) ) ;;
+ ^
+<console>:7: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+ 5 ; ( (2 + 2 ) ) ;;
+ ^
+res6: Int = 5
+
+scala> (((2 + 2)), ((2 + 2)))
+res7: (Int, Int) = (4,4)
+
+scala> (((2 + 2)), ((2 + 2)), 2)
+res8: (Int, Int, Int) = (4,4,2)
+
+scala> ((((2 + 2)), ((2 + 2)), 2).productIterator ++ Iterator(3) mkString)
+res9: String = 4423
+
+scala>
+
+scala> 55 ; ((2 + 2)) ; (1, 2, 3)
+<console>:7: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+ 55 ; ((2 + 2)) ;;
+ ^
+<console>:7: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+ 55 ; ((2 + 2)) ;;
+ ^
+res10: (Int, Int, Int) = (1,2,3)
+
+scala> 55 ; (x: Int) => x + 1 ; () => ((5))
+<console>:7: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+ 55 ; (x: Int) => x + 1 ;;
+ ^
+res11: () => Int = <function0>
+
+scala>
+
+scala> () => 5
+res12: () => Int = <function0>
+
+scala> 55 ; () => 5
+<console>:7: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+ 55 ;;
+ ^
+res13: () => Int = <function0>
+
+scala> () => { class X ; new X }
+res14: () => Object with ScalaObject = <function0>
+
+scala>
+
+scala> def foo(x: Int)(y: Int)(z: Int) = x+y+z
+foo: (x: Int)(y: Int)(z: Int)Int
+
+scala> foo(5)(10)(15)+foo(5)(10)(15)
+res15: Int = 60
+
+scala>
+
+scala> List(1) ++ List('a')
+res16: List[AnyVal] = List(1, a)
+
+scala>
diff --git a/test/files/run/repl-parens.scala b/test/files/run/repl-parens.scala
new file mode 100644
index 0000000000..c1cf9b50e1
--- /dev/null
+++ b/test/files/run/repl-parens.scala
@@ -0,0 +1,29 @@
+import scala.tools.partest.ReplTest
+
+object Test extends ReplTest {
+ def code = """
+(2)
+(2 + 2)
+((2 + 2))
+ ((2 + 2))
+ ( (2 + 2))
+ ( (2 + 2 ) )
+5 ; ( (2 + 2 ) ) ; ((5))
+(((2 + 2)), ((2 + 2)))
+(((2 + 2)), ((2 + 2)), 2)
+((((2 + 2)), ((2 + 2)), 2).productIterator ++ Iterator(3) mkString)
+
+55 ; ((2 + 2)) ; (1, 2, 3)
+55 ; (x: Int) => x + 1 ; () => ((5))
+
+() => 5
+55 ; () => 5
+() => { class X ; new X }
+
+def foo(x: Int)(y: Int)(z: Int) = x+y+z
+foo(5)(10)(15)+foo(5)(10)(15)
+
+List(1) ++ List('a')
+
+ """.trim
+} \ No newline at end of file
diff --git a/test/files/run/repl-paste-2.check b/test/files/run/repl-paste-2.check
new file mode 100644
index 0000000000..203b020f2c
--- /dev/null
+++ b/test/files/run/repl-paste-2.check
@@ -0,0 +1,64 @@
+Type in expressions to have them evaluated.
+Type :help for more information.
+
+scala>
+
+scala> scala> 999l
+
+// Detected repl transcript paste: ctrl-D to finish.
+
+res4: Int = 0123
+
+scala> 123
+res5: Int = 123
+
+scala> 567
+res6: Int = 567
+
+scala> res5 + res6
+res7: Int = 690
+
+scala> val x = dingus
+<console>:7: error: not found: value dingus
+ val x = dingus
+ ^
+
+scala> val x = "dingus"
+x: java.lang.String = dingus
+
+scala> x.length
+res9: Int = 6
+
+scala> x.length + res5
+res10: Int = 12
+
+// Replaying 8 commands from transcript.
+
+scala> 999l
+res0: Long = 999
+
+scala> val res5 = { 123 }
+res5: Int = 123
+
+scala> val res6 = { 567 }
+res6: Int = 567
+
+scala> res5 + res6
+res1: Int = 690
+
+scala> val x = dingus
+<console>:7: error: not found: value dingus
+ val x = dingus
+ ^
+
+scala> val x = "dingus"
+x: String = dingus
+
+scala> x.length
+res2: Int = 6
+
+scala> x.length + res5
+res3: Int = 129
+
+
+scala>
diff --git a/test/files/run/repl-paste-2.scala b/test/files/run/repl-paste-2.scala
new file mode 100644
index 0000000000..65f9b25175
--- /dev/null
+++ b/test/files/run/repl-paste-2.scala
@@ -0,0 +1,31 @@
+import scala.tools.partest.ReplTest
+
+object Test extends ReplTest {
+ def code = """
+scala> 999l
+res4: Int = 0123
+
+scala> 123
+res5: Int = 123
+
+scala> 567
+res6: Int = 567
+
+scala> res5 + res6
+res7: Int = 690
+
+scala> val x = dingus
+<console>:7: error: not found: value dingus
+ val x = dingus
+ ^
+
+scala> val x = "dingus"
+x: java.lang.String = dingus
+
+scala> x.length
+res9: Int = 6
+
+scala> x.length + res5
+res10: Int = 12
+ """
+} \ No newline at end of file
diff --git a/test/files/run/repl-paste-3.check b/test/files/run/repl-paste-3.check
new file mode 100644
index 0000000000..2b4c941c33
--- /dev/null
+++ b/test/files/run/repl-paste-3.check
@@ -0,0 +1,14 @@
+Type in expressions to have them evaluated.
+Type :help for more information.
+
+scala>
+
+scala> println(3)
+3
+
+scala> List(1,2)
+res1: List[Int] = List(1, 2)
+
+scala>
+
+scala>
diff --git a/test/files/run/repl-paste-3.scala b/test/files/run/repl-paste-3.scala
new file mode 100644
index 0000000000..3f26799ccb
--- /dev/null
+++ b/test/files/run/repl-paste-3.scala
@@ -0,0 +1,8 @@
+import scala.tools.partest.ReplTest
+
+object Test extends ReplTest {
+ def code = """
+println(3)
+ List(1,2)
+ """
+} \ No newline at end of file
diff --git a/test/files/run/repl-paste.check b/test/files/run/repl-paste.check
new file mode 100644
index 0000000000..d3e171fbfb
--- /dev/null
+++ b/test/files/run/repl-paste.check
@@ -0,0 +1,27 @@
+Type in expressions to have them evaluated.
+Type :help for more information.
+
+scala> :paste
+// Entering paste mode (ctrl-D to finish)
+
+
+class Dingus
+{
+ private val x = 5
+ def y = Dingus.x * 2
+}
+object Dingus
+{
+ private val x = 55
+}
+
+val x = (new Dingus).y
+
+
+// Exiting paste mode, now interpreting.
+
+defined class Dingus
+defined module Dingus
+x: Int = 110
+
+scala>
diff --git a/test/files/run/repl-paste.scala b/test/files/run/repl-paste.scala
new file mode 100644
index 0000000000..5495505353
--- /dev/null
+++ b/test/files/run/repl-paste.scala
@@ -0,0 +1,19 @@
+import scala.tools.partest.ReplTest
+
+object Test extends ReplTest {
+ def code = ":paste\n" + (
+ """
+class Dingus
+{
+ private val x = 5
+ def y = Dingus.x * 2
+}
+object Dingus
+{
+ private val x = 55
+}
+
+val x = (new Dingus).y
+ """
+ )
+} \ No newline at end of file
diff --git a/test/files/run/repl-power.check b/test/files/run/repl-power.check
new file mode 100644
index 0000000000..38e7532133
--- /dev/null
+++ b/test/files/run/repl-power.check
@@ -0,0 +1,16 @@
+Type in expressions to have them evaluated.
+Type :help for more information.
+
+scala> :power
+** Power User mode enabled - BEEP BOOP SPIZ **
+** :phase has been set to 'typer'. **
+** scala.tools.nsc._ has been imported **
+** global._ and definitions._ also imported **
+** Try :help, vals.<tab>, power.<tab> **
+
+scala> // guarding against "error: reference to global is ambiguous"
+
+scala> global.emptyValDef // "it is imported twice in the same scope by ..."
+res0: $r.global.emptyValDef.type = private val _ = _
+
+scala>
diff --git a/test/files/run/repl-power.scala b/test/files/run/repl-power.scala
new file mode 100644
index 0000000000..9f70ac4b68
--- /dev/null
+++ b/test/files/run/repl-power.scala
@@ -0,0 +1,10 @@
+import scala.tools.partest.ReplTest
+
+object Test extends ReplTest {
+ def code = """
+:power
+// guarding against "error: reference to global is ambiguous"
+global.emptyValDef // "it is imported twice in the same scope by ..."
+ """.trim
+}
+
diff --git a/test/files/run/repl-reset.check b/test/files/run/repl-reset.check
new file mode 100644
index 0000000000..8c21ab067a
--- /dev/null
+++ b/test/files/run/repl-reset.check
@@ -0,0 +1,55 @@
+Type in expressions to have them evaluated.
+Type :help for more information.
+
+scala>
+
+scala> val x1 = 1
+x1: Int = 1
+
+scala> val x2 = 2
+x2: Int = 2
+
+scala> val x3 = 3
+x3: Int = 3
+
+scala> case class BippyBungus()
+defined class BippyBungus
+
+scala> x1 + x2 + x3
+res0: Int = 6
+
+scala> :reset
+Resetting interpreter state.
+Forgetting this session history:
+
+val x1 = 1
+val x2 = 2
+val x3 = 3
+case class BippyBungus()
+x1 + x2 + x3
+
+Forgetting all expression results and named terms: BippyBungus, x1, x2, x3
+Forgetting defined types: BippyBungus
+
+scala> x1 + x2 + x3
+<console>:8: error: not found: value x1
+ x1 + x2 + x3
+ ^
+
+scala> val x1 = 4
+x1: Int = 4
+
+scala> new BippyBungus
+<console>:8: error: not found: type BippyBungus
+ new BippyBungus
+ ^
+
+scala> class BippyBungus() { def f = 5 }
+defined class BippyBungus
+
+scala> { new BippyBungus ; x1 }
+res2: Int = 4
+
+scala>
+
+scala>
diff --git a/test/files/run/repl-reset.scala b/test/files/run/repl-reset.scala
new file mode 100644
index 0000000000..ad1602b17e
--- /dev/null
+++ b/test/files/run/repl-reset.scala
@@ -0,0 +1,22 @@
+import scala.tools.partest.ReplTest
+
+object Test extends ReplTest {
+ def code = """
+ |val x1 = 1
+ |val x2 = 2
+ |val x3 = 3
+ |case class BippyBungus()
+ |x1 + x2 + x3
+ |:reset
+ |x1 + x2 + x3
+ |val x1 = 4
+ |new BippyBungus
+ |class BippyBungus() { def f = 5 }
+ |{ new BippyBungus ; x1 }
+ """.stripMargin
+
+ // would be nice if we could count on javap being present
+ // but no
+ //
+ // |:javap BippyBungus
+}
diff --git a/test/files/run/repl-suppressed-warnings.check b/test/files/run/repl-suppressed-warnings.check
new file mode 100644
index 0000000000..ef9e5c1270
--- /dev/null
+++ b/test/files/run/repl-suppressed-warnings.check
@@ -0,0 +1,65 @@
+Type in expressions to have them evaluated.
+Type :help for more information.
+
+scala>
+
+scala>
+
+scala> // "Is this thing on?" Not working on first couple
+
+scala> // commands, needs investigation.
+
+scala> 123
+res0: Int = 123
+
+scala> 123
+res1: Int = 123
+
+scala> 123
+res2: Int = 123
+
+scala>
+
+scala> object o {
+ case class Bippy()
+ case class Dingus {
+ def f[T](xs: TraversableOnce[T]) = xs match {
+ case _: List[Int] => 1
+ case _: Set[String] => 2
+ case _ => xs.isInstanceOf[Iterator[Double]]
+ }
+ }
+ case class DingDangDoobie(ding: Int, dang: Int, doobie: Double)
+ case class Dongoo
+ @serializable case class Heyooooo
+
+ @deprecated("I'm an ironic deprecation warning") def f0 = 5 // where's this disappearing?
+ def f1 = Double.Epsilon // and this?
+}
+warning: there were 6 deprecation warnings; re-run with -deprecation for details
+warning: there were 3 unchecked warnings; re-run with -unchecked for details
+defined module o
+
+scala>
+
+scala> :warnings
+<console>:3: warning: case classes without a parameter list have been deprecated;
+use either case objects or case classes with `()' as parameter list.
+ case class Dingus {
+ ^
+<console>:11: warning: case classes without a parameter list have been deprecated;
+use either case objects or case classes with `()' as parameter list.
+ case class Dongoo
+ ^
+<console>:11: warning: case classes without a parameter list have been deprecated;
+use either case objects or case classes with `()' as parameter list.
+ case class Dongoo
+ ^
+<console>:12: warning: case classes without a parameter list have been deprecated;
+use either case objects or case classes with `()' as parameter list.
+ @serializable case class Heyooooo
+ ^
+
+scala>
+
+scala>
diff --git a/test/files/run/repl-suppressed-warnings.scala b/test/files/run/repl-suppressed-warnings.scala
new file mode 100644
index 0000000000..a78b00f36e
--- /dev/null
+++ b/test/files/run/repl-suppressed-warnings.scala
@@ -0,0 +1,31 @@
+import scala.tools.partest.ReplTest
+
+object Test extends ReplTest {
+ def code = """
+
+// "Is this thing on?" Not working on first couple
+// commands, needs investigation.
+123
+123
+123
+
+object o {
+ case class Bippy()
+ case class Dingus {
+ def f[T](xs: TraversableOnce[T]) = xs match {
+ case _: List[Int] => 1
+ case _: Set[String] => 2
+ case _ => xs.isInstanceOf[Iterator[Double]]
+ }
+ }
+ case class DingDangDoobie(ding: Int, dang: Int, doobie: Double)
+ case class Dongoo
+ @serializable case class Heyooooo
+
+ @deprecated("I'm an ironic deprecation warning") def f0 = 5 // where's this disappearing?
+ def f1 = Double.Epsilon // and this?
+}
+
+:warnings
+ """
+}
diff --git a/test/files/run/repl-transcript.check b/test/files/run/repl-transcript.check
new file mode 100644
index 0000000000..6d22353882
--- /dev/null
+++ b/test/files/run/repl-transcript.check
@@ -0,0 +1,41 @@
+Type in expressions to have them evaluated.
+Type :help for more information.
+
+scala>
+
+scala> scala> class Bippity
+
+// Detected repl transcript paste: ctrl-D to finish.
+
+defined class Bippity
+
+scala> def f = new Bippity
+f: Bippity
+
+scala> 123
+res5: Int = 123
+
+scala> 1 to 100 map (_ + 1)
+res6: scala.collection.immutable.IndexedSeq[Int] = Vector(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101)
+
+scala> res6.sum + res5
+
+// Replaying 5 commands from transcript.
+
+scala> class Bippity
+defined class Bippity
+
+scala> def f = new Bippity
+f: Bippity
+
+scala> val res5 = { 123 }
+res5: Int = 123
+
+scala> val res6 = { 1 to 100 map (_ + 1) }
+res6: scala.collection.immutable.IndexedSeq[Int] = Vector(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101)
+
+scala> res6.sum + res5
+res0: Int = 5273
+
+
+scala>
diff --git a/test/files/run/repl-transcript.scala b/test/files/run/repl-transcript.scala
new file mode 100644
index 0000000000..b39279aea3
--- /dev/null
+++ b/test/files/run/repl-transcript.scala
@@ -0,0 +1,20 @@
+import scala.tools.partest.ReplTest
+
+object Test extends ReplTest {
+ def code = """
+scala> class Bippity
+defined class Bippity
+
+scala> def f = new Bippity
+f: Bippity
+
+scala> 123
+res5: Int = 123
+
+scala> 1 to 100 map (_ + 1)
+res6: scala.collection.immutable.IndexedSeq[Int] = Vector(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101)
+
+scala> res6.sum + res5
+ """
+}
+
diff --git a/test/files/run/richWrapperEquals.scala b/test/files/run/richWrapperEquals.scala
new file mode 100644
index 0000000000..44beb133b3
--- /dev/null
+++ b/test/files/run/richWrapperEquals.scala
@@ -0,0 +1,10 @@
+object Test {
+ def main(args: Array[String]): Unit = {
+ assert(intWrapper(5) == 5)
+ assert(5 == intWrapper(5))
+ assert(5 == (5: java.lang.Integer))
+ assert((5: java.lang.Integer) == 5)
+ assert((5: java.lang.Integer) == intWrapper(5))
+ assert(intWrapper(5) == (5: java.lang.Integer))
+ }
+}
diff --git a/test/files/run/run-bug4840.check b/test/files/run/run-bug4840.check
new file mode 100644
index 0000000000..cdfc1f911f
--- /dev/null
+++ b/test/files/run/run-bug4840.check
@@ -0,0 +1,2 @@
+Some(5)
+Some(Some(Some(5)))
diff --git a/test/files/run/run-bug4840.flags b/test/files/run/run-bug4840.flags
new file mode 100644
index 0000000000..eb4d19bcb9
--- /dev/null
+++ b/test/files/run/run-bug4840.flags
@@ -0,0 +1 @@
+-optimise \ No newline at end of file
diff --git a/test/files/run/run-bug4840.scala b/test/files/run/run-bug4840.scala
new file mode 100644
index 0000000000..5f98bc9f4b
--- /dev/null
+++ b/test/files/run/run-bug4840.scala
@@ -0,0 +1,30 @@
+object Test {
+ def g(x: Boolean): Option[String] = if (x) Some("booya") else None
+
+ def f1() = {
+ for (x <- g(true)) yield {
+ g(false) match {
+ case Some(_) => sys.error("")
+ case None => 5
+ }
+ }
+ }
+
+ def f2() = {
+ for (x <- g(true) ; y <- g(true) ; z <- g(true)) yield {
+ for (x <- g(true) ; y <- g(true) ; z <- g(true)) yield {
+ g(true) map { _ =>
+ (null: Any) match {
+ case Some(x: Int) => x
+ case _ => 5
+ }
+ }
+ }
+ }
+ }
+
+ def main(args: Array[String]): Unit = {
+ println(f1())
+ println(f2())
+ }
+}
diff --git a/test/files/run/runtime-richChar.scala b/test/files/run/runtime-richChar.scala
index b2c488983d..cf18a1d302 100644
--- a/test/files/run/runtime-richChar.scala
+++ b/test/files/run/runtime-richChar.scala
@@ -1,23 +1,23 @@
-object Test extends Application {
+object Test extends App {
def testSeq(name: String, expected: Seq[Char], got: Seq[Char]) {
if (expected.toList == got.toList)
println(name + " ok")
else
println(name + " failed: " + expected + " differs from " + got)
}
-
+
testSeq("'a' to 'c'", List('a', 'b', 'c'), 'a' to 'c')
testSeq("'a' until 'c'", List('a', 'b'), 'a' until 'c')
-
+
testSeq("'a' to 'b'", List('a', 'b'), 'a' to 'b')
testSeq("'a' until 'b'", List('a'), 'a' until 'b')
-
+
testSeq("'a' to 'a'", List('a'), 'a' to 'a')
testSeq("'a' until 'a'", List(), 'a' until 'a')
-
+
testSeq("'b' to 'a'", List(), 'b' to 'a')
testSeq("'b' until 'a'", List(), 'b' until 'a')
-
+
testSeq("'c' to 'a'", List(), 'c' to 'a')
testSeq("'c' until 'a'", List(), 'c' until 'a')
}
diff --git a/test/files/run/scan.scala b/test/files/run/scan.scala
new file mode 100644
index 0000000000..f056c77ba1
--- /dev/null
+++ b/test/files/run/scan.scala
@@ -0,0 +1,23 @@
+
+
+
+
+object Test {
+
+ def main(args: Array[String]) {
+ val lst = List(1, 2, 3, 4, 5)
+
+ assert(lst.scanLeft(0)(_ + _) == List(0, 1, 3, 6, 10, 15))
+ assert(lst.scanRight(0)(_ + _) == List(15, 14, 12, 9, 5, 0))
+
+ val emp = List[Int]()
+ assert(emp.scanLeft(0)(_ + _) == List(0))
+ assert(emp.scanRight(0)(_ + _) == List(0))
+
+ val stream = Stream(1, 2, 3, 4, 5)
+ assert(stream.scanLeft(0)(_ + _) == Stream(0, 1, 3, 6, 10, 15))
+
+ assert(Stream.from(1).scanLeft(0)(_ + _).take(5) == Stream(0, 1, 3, 6, 10))
+ }
+
+} \ No newline at end of file
diff --git a/test/files/run/seqlike-kmp.check b/test/files/run/seqlike-kmp.check
new file mode 100644
index 0000000000..6040710c7c
--- /dev/null
+++ b/test/files/run/seqlike-kmp.check
@@ -0,0 +1,90 @@
+indexOfSlice
+ (97) with idx >= -1 = 97
+ (97) with idx >= 0 = 97
+ (97) with idx >= 1 = 97
+ (97) with idx >= 2 = 97
+ (97) with idx >= 97 = 97
+ (97) with idx >= 98 = -1
+ (97) with idx >= 99 = -1
+ (97) with idx >= 100 = -1
+lastIndexOfSlice
+ (97) with idx <= -1 = -1
+ (97) with idx <= 0 = -1
+ (97) with idx <= 1 = -1
+ (97) with idx <= 2 = -1
+ (97) with idx <= 97 = 97
+ (97) with idx <= 98 = 97
+ (97) with idx <= 99 = 97
+ (97) with idx <= 100 = 97
+indexOfSlice
+ (97, 98) with idx >= -1 = 97
+ (97, 98) with idx >= 0 = 97
+ (97, 98) with idx >= 1 = 97
+ (97, 98) with idx >= 2 = 97
+ (97, 98) with idx >= 97 = 97
+ (97, 98) with idx >= 98 = -1
+ (97, 98) with idx >= 99 = -1
+ (97, 98) with idx >= 100 = -1
+lastIndexOfSlice
+ (97, 98) with idx <= -1 = -1
+ (97, 98) with idx <= 0 = -1
+ (97, 98) with idx <= 1 = -1
+ (97, 98) with idx <= 2 = -1
+ (97, 98) with idx <= 97 = 97
+ (97, 98) with idx <= 98 = 97
+ (97, 98) with idx <= 99 = 97
+ (97, 98) with idx <= 100 = 97
+indexOfSlice
+ (97, 98, 99) with idx >= -1 = 97
+ (97, 98, 99) with idx >= 0 = 97
+ (97, 98, 99) with idx >= 1 = 97
+ (97, 98, 99) with idx >= 2 = 97
+ (97, 98, 99) with idx >= 97 = 97
+ (97, 98, 99) with idx >= 98 = -1
+ (97, 98, 99) with idx >= 99 = -1
+ (97, 98, 99) with idx >= 100 = -1
+lastIndexOfSlice
+ (97, 98, 99) with idx <= -1 = -1
+ (97, 98, 99) with idx <= 0 = -1
+ (97, 98, 99) with idx <= 1 = -1
+ (97, 98, 99) with idx <= 2 = -1
+ (97, 98, 99) with idx <= 97 = 97
+ (97, 98, 99) with idx <= 98 = 97
+ (97, 98, 99) with idx <= 99 = 97
+ (97, 98, 99) with idx <= 100 = 97
+indexOfSlice
+ (98, 99) with idx >= -1 = 98
+ (98, 99) with idx >= 0 = 98
+ (98, 99) with idx >= 1 = 98
+ (98, 99) with idx >= 2 = 98
+ (98, 99) with idx >= 97 = 98
+ (98, 99) with idx >= 98 = 98
+ (98, 99) with idx >= 99 = -1
+ (98, 99) with idx >= 100 = -1
+lastIndexOfSlice
+ (98, 99) with idx <= -1 = -1
+ (98, 99) with idx <= 0 = -1
+ (98, 99) with idx <= 1 = -1
+ (98, 99) with idx <= 2 = -1
+ (98, 99) with idx <= 97 = -1
+ (98, 99) with idx <= 98 = 98
+ (98, 99) with idx <= 99 = 98
+ (98, 99) with idx <= 100 = 98
+indexOfSlice
+ (99) with idx >= -1 = 99
+ (99) with idx >= 0 = 99
+ (99) with idx >= 1 = 99
+ (99) with idx >= 2 = 99
+ (99) with idx >= 97 = 99
+ (99) with idx >= 98 = 99
+ (99) with idx >= 99 = 99
+ (99) with idx >= 100 = -1
+lastIndexOfSlice
+ (99) with idx <= -1 = -1
+ (99) with idx <= 0 = -1
+ (99) with idx <= 1 = -1
+ (99) with idx <= 2 = -1
+ (99) with idx <= 97 = -1
+ (99) with idx <= 98 = -1
+ (99) with idx <= 99 = 99
+ (99) with idx <= 100 = 99
diff --git a/test/files/run/seqlike-kmp.scala b/test/files/run/seqlike-kmp.scala
new file mode 100644
index 0000000000..514990cfa2
--- /dev/null
+++ b/test/files/run/seqlike-kmp.scala
@@ -0,0 +1,32 @@
+object Test {
+ val source = 0 to 99
+ val idxes = (-1 to 2) ++ (97 to 100)
+ def str(xs: Seq[Int]) = xs.mkString("(", ", ", ")")
+
+ def f(tgt: Seq[Int]) = {
+ println("indexOfSlice")
+ // the first index `>= from` such that...
+ for (x <- idxes) {
+ val res = source.indexOfSlice(tgt, x)
+ println(" %s with idx >= %d = %d".format(str(tgt), x, res))
+ }
+ // the last index `<= end` such that...
+ println("lastIndexOfSlice")
+ for (x <- idxes) {
+ val res = source.lastIndexOfSlice(tgt, x)
+ println(" %s with idx <= %d = %d".format(str(tgt), x, res))
+ }
+ }
+
+ def g(idx: Int, len: Int) = {
+ f(source.slice(idx, idx + len))
+ }
+
+ def main(args: Array[String]): Unit = {
+ g(97, 1)
+ g(97, 2)
+ g(97, 3)
+ g(98, 2)
+ g(99, 1)
+ }
+}
diff --git a/test/files/run/sequenceComparisons.scala b/test/files/run/sequenceComparisons.scala
index 30192096db..5d7958bc7e 100644
--- a/test/files/run/sequenceComparisons.scala
+++ b/test/files/run/sequenceComparisons.scala
@@ -2,12 +2,12 @@ import scala.collection.{ mutable, immutable }
import collection.{ Seq, Traversable }
object Test {
- // TODO:
+ // TODO:
//
// SeqProxy
// SeqForwarder
// the commented out ones in seqMakers
-
+
val seqMakers = List[List[Int] => Seq[Int]](
// scala.Array(_: _*),
mutable.ArrayBuffer(_: _*),
@@ -22,14 +22,14 @@ object Test {
// mutable.Queue(_: _*),
immutable.Seq(_: _*),
mutable.Seq(_: _*),
- // immutable.Stack(_: _*),
- // mutable.Stack(_: _*),
+ immutable.Stack(_: _*),
+ // mutable.Stack(_: _*),
immutable.IndexedSeq(_: _*), // was Vector
//mutable.Vector(_: _*),
immutable.List(_: _*),
immutable.Stream(_: _*)
)
-
+
abstract class Data[T] {
val seq: Seq[T]
private def seqList = seq.toList
@@ -45,50 +45,50 @@ object Test {
}
lazy val eqeq = Method(_ == _, (List(seqList), List(Nil, seqList drop 1, seqList ::: seqList)), "%s == %s")
-
+
val startsWithInputs: Inputs
lazy val startsWith = Method(_ startsWith _, startsWithInputs, "%s startsWith %s")
-
+
val endsWithInputs: Inputs
lazy val endsWith = Method(_ endsWith _, endsWithInputs, "%s endsWith %s")
- val indexOfSeqInputs: Inputs
- private def subseqTest(s1: Seq[T], s2: Seq[T]) = (s1 indexOfSeq s2) != -1
- lazy val indexOfSeq = Method(subseqTest _, indexOfSeqInputs, "(%s indexOfSeq %s) != -1")
-
+ val indexOfSliceInputs: Inputs
+ private def subseqTest(s1: Seq[T], s2: Seq[T]) = (s1 indexOfSlice s2) != -1
+ lazy val indexOfSlice = Method(subseqTest _, indexOfSliceInputs, "(%s indexOfSlice %s) != -1")
+
val sameElementsInputs: Inputs
lazy val sameElements = Method(_ sameElements _, sameElementsInputs, "%s sameElements %s")
-
- def methodList = List(eqeq, startsWith, endsWith, indexOfSeq, sameElements)
+
+ def methodList = List(eqeq, startsWith, endsWith, indexOfSlice, sameElements)
}
-
+
object test1 extends Data[Int] {
val seq = List(1,2,3,4,5)
-
+
val startsWithInputs = (
List(Nil, List(1), List(1,2), seq),
List(List(1,2,3,4,6), seq ::: List(5), List(0))
)
-
+
val endsWithInputs = (
List(Nil, List(5), List(4,5), seq),
List(0 :: seq, List(5,2,3,4,5), List(3,4), List(5,6))
)
-
- val indexOfSeqInputs = (
+
+ val indexOfSliceInputs = (
List(Nil, List(1), List(3), List(5), List(1,2), List(2,3,4), List(4,5), seq),
List(List(1,2,3,5), List(6), List(5,4,3,2,1), List(2,1))
)
-
+
val sameElementsInputs = (
List(List(1,2,3,4,5)),
List(Nil, List(1), List(1,2), List(2,3,4), List(2,3,4,5), List(2,3,4,5,1), List(1,2,3,5,4), seq reverse)
)
}
-
+
val failures = new mutable.ListBuffer[String]
var testCount = 0
-
+
def assertOne(op1: Any, op2: Any, res: Boolean, str: String) {
testCount += 1
val resStr = str.format(op1, op2)
@@ -97,25 +97,25 @@ object Test {
failures += ("FAIL: " + resStr)
// assert(res, resStr)
}
-
+
def runSeqs() = {
for (s1f <- seqMakers ; s2f <- seqMakers ; testData <- List(test1)) {
import testData._
val scrut = s1f(seq)
-
+
for (Method(f, (trueList, falseList), descr) <- methodList) {
- for (s <- trueList; val rhs = s2f(s))
+ for (s <- trueList; rhs = s2f(s))
assertOne(scrut, rhs, f(scrut, rhs), descr)
-
- for (s <- falseList; val rhs = s2f(s))
+
+ for (s <- falseList; rhs = s2f(s))
assertOne(scrut, rhs, !f(scrut, rhs), "!(" + descr + ")")
}
}
}
-
+
def main(args: Array[String]) {
runSeqs()
-
+
assert(failures.isEmpty, failures mkString "\n")
}
}
diff --git a/test/files/run/serialize-stream.check b/test/files/run/serialize-stream.check
new file mode 100644
index 0000000000..e2a9f57aa7
--- /dev/null
+++ b/test/files/run/serialize-stream.check
@@ -0,0 +1,6 @@
+Stream(1, ?)
+List(1, 2, 3)
+Stream(1, ?)
+List(1)
+Stream()
+List()
diff --git a/test/files/run/serialize-stream.scala b/test/files/run/serialize-stream.scala
new file mode 100644
index 0000000000..e424d5b629
--- /dev/null
+++ b/test/files/run/serialize-stream.scala
@@ -0,0 +1,20 @@
+
+
+object Test {
+ def ser[T](s: Stream[T]) {
+ val bos = new java.io.ByteArrayOutputStream()
+ val oos = new java.io.ObjectOutputStream(bos)
+ oos.writeObject(s)
+
+ val ois = new java.io.ObjectInputStream(new java.io.ByteArrayInputStream(bos.toByteArray))
+ val obj = ois.readObject()
+ println(obj)
+ println(obj.asInstanceOf[Seq[T]].toList)
+ }
+
+ def main(args: Array[String]) {
+ ser(Stream(1, 2, 3))
+ ser(Stream(1))
+ ser(Stream())
+ }
+}
diff --git a/test/files/run/shutdownhooks.check b/test/files/run/shutdownhooks.check
new file mode 100644
index 0000000000..29956956e3
--- /dev/null
+++ b/test/files/run/shutdownhooks.check
@@ -0,0 +1,3 @@
+Fooblitzky!
+main#shutdown.
+Test#shutdown.
diff --git a/test/files/run/shutdownhooks.scala b/test/files/run/shutdownhooks.scala
new file mode 100644
index 0000000000..7fe5d129d6
--- /dev/null
+++ b/test/files/run/shutdownhooks.scala
@@ -0,0 +1,37 @@
+object Test {
+ scala.sys.addShutdownHook {
+ Thread.sleep(1000)
+ println("Test#shutdown.")
+ }
+
+ def daemon() = {
+ val t = new Thread {
+ override def run() {
+ Thread.sleep(10000)
+ println("Hallelujah!") // should not see this
+ }
+ }
+ t.setDaemon(true)
+ t.start()
+ t
+ }
+
+ def nonDaemon() = {
+ val t = new Thread {
+ override def run() {
+ Thread.sleep(100)
+ println("Fooblitzky!")
+ }
+ }
+ t.start()
+ t
+ }
+
+ def main(args: Array[String]): Unit = {
+ daemon()
+ nonDaemon()
+ scala.sys.addShutdownHook {
+ println("main#shutdown.")
+ }
+ }
+}
diff --git a/test/files/run/slice-strings.scala b/test/files/run/slice-strings.scala
new file mode 100644
index 0000000000..23085866f5
--- /dev/null
+++ b/test/files/run/slice-strings.scala
@@ -0,0 +1,19 @@
+object Test {
+ def cmp(x1: String) = {
+ val x2 = x1.toList
+
+ -10 to 10 foreach { i =>
+ assert(x1.take(i) == x2.take(i).mkString)
+ assert(x1.drop(i) == x2.drop(i).mkString)
+ assert(x1.takeRight(i) == x2.takeRight(i).mkString)
+ assert(x1.dropRight(i) == x2.dropRight(i).mkString)
+ }
+ for (idx1 <- -3 to 3 ; idx2 <- -3 to 3) {
+ assert(x1.slice(idx1, idx2) == x2.slice(idx1, idx2).mkString)
+ }
+ }
+
+ def main(args: Array[String]): Unit = {
+ cmp("abcde")
+ }
+}
diff --git a/test/files/run/slices.scala b/test/files/run/slices.scala
index 9c76572bfb..e31ea4046f 100644
--- a/test/files/run/slices.scala
+++ b/test/files/run/slices.scala
@@ -1,4 +1,4 @@
-object Test extends Application {
+object Test extends App {
// lists
println(List(1, 2, 3, 4).slice(1, 2))
diff --git a/test/files/run/sort.scala b/test/files/run/sort.scala
index 899fea551e..eea3a2d645 100644
--- a/test/files/run/sort.scala
+++ b/test/files/run/sort.scala
@@ -1,9 +1,9 @@
-object Test extends Application {
- println((1 to 100000).toList.sort(_<_).length)
- println(List(1, 5, 10, 3, 2).toList.sort(_<_))
- println(List(1, 5, 10, 3, 2).toList.sort(_>_))
- println(List(10).toList.sort(_<_))
- println(List(10,9).toList.sort(_<_))
- println(List[Int]().toList.sort(_<_))
+object Test extends App {
+ println((1 to 100000).toList.sortWith(_<_).length)
+ println(List(1, 5, 10, 3, 2).toList.sortWith(_<_))
+ println(List(1, 5, 10, 3, 2).toList.sortWith(_>_))
+ println(List(10).toList.sortWith(_<_))
+ println(List(10,9).toList.sortWith(_<_))
+ println(List[Int]().toList.sortWith(_<_))
}
diff --git a/test/files/run/spec-self.check b/test/files/run/spec-self.check
new file mode 100644
index 0000000000..e981f45c92
--- /dev/null
+++ b/test/files/run/spec-self.check
@@ -0,0 +1,2 @@
+5.0
+5.0
diff --git a/test/files/run/spec-self.scala b/test/files/run/spec-self.scala
new file mode 100644
index 0000000000..1c95e0a820
--- /dev/null
+++ b/test/files/run/spec-self.scala
@@ -0,0 +1,14 @@
+class Foo0 extends (() => Double) {
+ def apply() = 5.0d
+}
+
+class Foo1 extends (Double => Double) {
+ def apply(x: Double) = x
+}
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ println((new Foo0)())
+ println((new Foo1)(5.0d))
+ }
+}
diff --git a/test/files/run/streamWithFilter.check b/test/files/run/streamWithFilter.check
new file mode 100644
index 0000000000..6b0e91a147
--- /dev/null
+++ b/test/files/run/streamWithFilter.check
@@ -0,0 +1,5 @@
+15
+30
+45
+60
+75
diff --git a/test/files/run/streamWithFilter.scala b/test/files/run/streamWithFilter.scala
new file mode 100644
index 0000000000..7f8f9a09d2
--- /dev/null
+++ b/test/files/run/streamWithFilter.scala
@@ -0,0 +1,11 @@
+object Test {
+ val nums = Stream.from(1)
+ def isFizz(x: Int) = x % 3 == 0
+ def isBuzz(x: Int) = x % 5 == 0
+ // next line will run forever if withFilter isn't doing its thing.
+ val fizzbuzzes = for (n <- nums ; if isFizz(n) ; if isBuzz(n)) yield n
+
+ def main(args: Array[String]): Unit = {
+ fizzbuzzes take 5 foreach println
+ }
+}
diff --git a/test/files/run/stream_flatmap_odds.scala b/test/files/run/stream_flatmap_odds.scala
index ed1a537bd9..6fb202ca68 100644
--- a/test/files/run/stream_flatmap_odds.scala
+++ b/test/files/run/stream_flatmap_odds.scala
@@ -1,4 +1,4 @@
-object Test extends Application {
+object Test extends App {
lazy val odds: Stream[Int] = Stream(1) append ( odds flatMap {x => Stream(x + 2)} )
println(odds take 42 force)
-} \ No newline at end of file
+}
diff --git a/test/files/run/stream_length.check b/test/files/run/stream_length.check
new file mode 100644
index 0000000000..9906de773c
--- /dev/null
+++ b/test/files/run/stream_length.check
@@ -0,0 +1 @@
+Length: 970299
diff --git a/test/files/run/stream_length.scala b/test/files/run/stream_length.scala
new file mode 100644
index 0000000000..2808fbc495
--- /dev/null
+++ b/test/files/run/stream_length.scala
@@ -0,0 +1,15 @@
+
+
+object Test {
+ def walk(depth: Int, bias: String): Stream[String] = {
+ if (depth == 0)
+ Stream(bias)
+ else {
+ (Stream.iterate(1, 99)(_+1).map((x: Int) => walk(depth-1, bias + x))).flatten
+ }
+ }
+
+ def main(args: Array[String]) {
+ println("Length: " + walk(3, "---").length)
+ }
+}
diff --git a/test/files/run/streams.scala b/test/files/run/streams.scala
index 83b7772886..51b4e5d76c 100644
--- a/test/files/run/streams.scala
+++ b/test/files/run/streams.scala
@@ -1,4 +1,4 @@
-object Test extends Application {
+object Test extends App {
val s0: Stream[Int] = Stream.empty
println(s0.take(1))
println(s0.takeWhile(_ > 0))
@@ -29,7 +29,7 @@ object Test extends Application {
def powers(x: Int) = if ((x&(x-1)) == 0) Some(x) else None
println(s3.flatMap(powers).reverse.head)
- // large enough to generate StackOverflows (on most systems)
+ // large enough to generate StackOverflows (on most systems)
// unless the following methods are tail call optimized.
val size = 100000
diff --git a/test/files/run/stringInterpolation.check b/test/files/run/stringInterpolation.check
new file mode 100644
index 0000000000..b5b63343a8
--- /dev/null
+++ b/test/files/run/stringInterpolation.check
@@ -0,0 +1,2 @@
+1 plus 1 is 2
+We have a 1.10% chance of success
diff --git a/test/files/run/stringInterpolation.flags b/test/files/run/stringInterpolation.flags
new file mode 100644
index 0000000000..48fd867160
--- /dev/null
+++ b/test/files/run/stringInterpolation.flags
@@ -0,0 +1 @@
+-Xexperimental
diff --git a/test/files/run/stringInterpolation.scala b/test/files/run/stringInterpolation.scala
new file mode 100644
index 0000000000..d88f5f6889
--- /dev/null
+++ b/test/files/run/stringInterpolation.scala
@@ -0,0 +1,7 @@
+object Test {
+ def main(args : Array[String]) : Unit = {
+ println("\{1} plus \{1} is \{1 + 1}")
+ val x = 1.1
+ println("We have a \{ x ;2.2f}% chance of success")
+ }
+}
diff --git a/test/files/run/stringbuilder-drop.scala b/test/files/run/stringbuilder-drop.scala
new file mode 100644
index 0000000000..a9e5a71762
--- /dev/null
+++ b/test/files/run/stringbuilder-drop.scala
@@ -0,0 +1,7 @@
+object Test {
+ def main(args: Array[String]): Unit = {
+ val s = (new StringBuilder ++= "hello world") dropRight 1 toString;
+ assert(s == "hello worl")
+ }
+}
+
diff --git a/test/files/run/stringbuilder.scala b/test/files/run/stringbuilder.scala
index c669f1c3db..ef85fc02a6 100644
--- a/test/files/run/stringbuilder.scala
+++ b/test/files/run/stringbuilder.scala
@@ -1,19 +1,21 @@
-object Test extends Application {
+object Test extends App {
val str = "ABCDEFGHIJKLMABCDEFGHIJKLM"
- type SB = {
+ val surrogateStr = "an old Turkic letter: \uD803\uDC22"
+
+ type SB = {
def indexOf(str: String): Int
def indexOf(str: String, fromIndex: Int): Int
def lastIndexOf(str: String): Int
def lastIndexOf(str: String, fromIndex: Int): Int
}
-
+
import scala.collection.mutable.{ StringBuilder => ScalaStringBuilder }
import java.lang.{ StringBuilder => JavaStringBuilder }
-
+
val sbScala = new ScalaStringBuilder() append str
val sbJava = new JavaStringBuilder() append str
val sbs: List[SB] = List[SB](sbScala, sbJava)
-
+
def sameAnswers(f: (SB) => Int) = assert(f(sbScala) == f(sbJava))
sameAnswers(_.indexOf(""))
@@ -29,4 +31,10 @@ object Test extends Application {
sameAnswers(_.lastIndexOf("QZV"))
sameAnswers(_.lastIndexOf("GHI", 22))
sameAnswers(_.lastIndexOf("KLM", 22))
+
+ // testing that the "reverse" implementation avoids reversing surrogate pairs
+ val jsb = new JavaStringBuilder(surrogateStr) reverse
+ val ssb = new ScalaStringBuilder(surrogateStr) reverseContents ;
+
+ assert(jsb.toString == ssb.toString)
}
diff --git a/test/files/run/structural.scala b/test/files/run/structural.scala
index 5fc2292b42..36af8c4bfc 100644
--- a/test/files/run/structural.scala
+++ b/test/files/run/structural.scala
@@ -1,18 +1,18 @@
object test1 {
-
+
val o1 = new Object { override def toString = "ohone" }
val o2 = new Object { override def toString = "ohtwo" }
-
+
val t1 = new Tata("tieone")
val t2 = new Tata("tietwo")
-
+
class Tata(name: String) {
override def toString = name
def tatMe = "oy"
}
-
+
class Titi extends Tata("titi")
-
+
object Rec {
val a = 1
val b = 2
@@ -41,7 +41,7 @@ object test1 {
val y: Tata = null
def z(t: Tata) = ()
}
-
+
type rt = Object {
val a: Int;
val c: String;
@@ -65,7 +65,7 @@ object test1 {
var v: Int
val y: Tata
}
-
+
def l (r: rt) {
println(" 1. " + r.c)
println(" 2. " + r.a + 1)
@@ -94,33 +94,33 @@ object test1 {
println("25. " + r.y)
println("26. " + r.e(null))
}
-
+
/*def ma[T](r: Object{def e(x: T): T; val x: T}) {
println("30. " + r.e(r.x)) // static error
}*/
-
+
def mb(r: Object { def e[T](x: T): T }) {
println("31. " + r.e[Int](4)) // while this is ok
}
-
+
def m1(r: Object { def z(x: Tata): Unit }) {
println("32. " + r.z(new Titi)) // while this is ok
}
-
+
def m2[T](r: Object { def e(x: Tata): T; val x: Tata }) {
println("33. " + r.e(r.x)) // and this too
}
-
+
class Rec3[T] {
def e(x: T): T = x
}
-
+
def m3[T](r: Rec3[T], x: T) {
println("33. " + r.e(x)) // and this too
}
-
+
Rec.g(11)
-
+
this.l(Rec)
this.mb(new Object{def e[T](x: T): T = x})
this.m1(Rec)
@@ -132,7 +132,7 @@ object test2 {
class C extends { def f() { println("1") } }
val x1 = new C
x1.f()
-
+
abstract class D extends { def f() }
val x2 = new D { def f() { println("2") } }
x2.f()
@@ -153,11 +153,11 @@ object test2 {
object test3 {
case class Exc extends Exception
-
+
object Rec {
def f = throw Exc()
}
-
+
def m(r: { def f: Nothing }) =
try {
r.f
@@ -166,34 +166,34 @@ object test3 {
case e: Exc => println("caught")
case e => println(e)
}
-
+
m(Rec)
-
+
}
object test4 {
class A
-
+
val aar = Array(new A, new A, new A)
val nar = Array(1, 2)
-
+
def f(p: {def size: Int}) = println(p.size)
//def g[T <: {def size: Int}](p: T) = println(p.size) // open issue
//def h[T <% {def size: Int}](p: T) = println(p.size) // open issue
-
+
f(aar)
f(nar)
-
+
//g(aar)
//g(nar)
-
+
//h(aar)
//h(nar)
-
+
}
-object Test extends Application {
+object Test extends App {
test1
test2
test3
diff --git a/test/files/run/sysprops.scala b/test/files/run/sysprops.scala
new file mode 100644
index 0000000000..4d98e2cdd0
--- /dev/null
+++ b/test/files/run/sysprops.scala
@@ -0,0 +1,50 @@
+import sys._
+
+/** Basic sys.Prop test. */
+object Test {
+ val key = "ding.dong.doobie"
+
+ def bool() = {
+ val prop = BooleanProp.valueIsTrue(key)
+ assert(prop.key == key)
+
+ prop.clear()
+ assert(!prop.value)
+ assert(!prop.isSet)
+ assert(prop.get != null)
+
+ prop set "dingus"
+ assert(prop.get == "dingus")
+ assert(!prop.value)
+ prop set "true"
+ assert(prop.value)
+ prop.toggle()
+ assert(!prop.value)
+ prop.enable()
+ assert(prop.value)
+ prop.disable()
+ assert(!prop.value)
+ }
+ def int() = {
+ val prop = Prop[Int](key)
+ prop.clear()
+ assert(prop.value == 0)
+ prop.set("523")
+ assert(prop.value == 523)
+ prop.set("DingusInt")
+
+ try { println(prop.value) ; assert(false, "should not get here") }
+ catch { case _: Exception => () }
+ }
+ def double() = {
+ val prop = Prop[Double](key)
+ prop.set("55.0")
+ assert(prop.value == 55.0)
+ }
+
+ def main(args: Array[String]): Unit = {
+ bool()
+ int()
+ double()
+ }
+}
diff --git a/test/files/run/t0017.check b/test/files/run/t0017.check
index 86c5fe56a8..3a72142467 100644
--- a/test/files/run/t0017.check
+++ b/test/files/run/t0017.check
@@ -1 +1 @@
-Array(GenericArray(1, 3), GenericArray(2, 4))
+Array(ArraySeq(1, 3), ArraySeq(2, 4))
diff --git a/test/files/run/t0017.scala b/test/files/run/t0017.scala
index f43481f39b..e976f453d8 100644
--- a/test/files/run/t0017.scala
+++ b/test/files/run/t0017.scala
@@ -1,4 +1,4 @@
-object Test extends Application {
+object Test extends App {
def transpose[A](arr: Array[Array[A]]) = {
for (i <- Array.range(0, arr(0).length)) yield
@@ -7,11 +7,11 @@ def transpose[A](arr: Array[Array[A]]) = {
var my_arr = Array(Array(1,2),Array(3,4))
-for (i <- Array.range(0, my_arr(0).length)) yield
+for (i <- Array.range(0, my_arr(0).length)) yield
for (row <- my_arr) yield row(i)
val transposed = transpose(my_arr)
-println(transposed.deepToString)
+println(transposed.deep.toString)
}
diff --git a/test/files/run/t0042.scala b/test/files/run/t0042.scala
index 53314f2885..aa4a74d2f8 100644
--- a/test/files/run/t0042.scala
+++ b/test/files/run/t0042.scala
@@ -1,4 +1,4 @@
-object Test extends Application {
+object Test extends App {
def getClause[T](clauses: List[T]): Option[T] = {
for (c <- clauses) {
return Some(c)
diff --git a/test/pending/run/t0048.check b/test/files/run/t0048.check
index 1e8b314962..1e8b314962 100644
--- a/test/pending/run/t0048.check
+++ b/test/files/run/t0048.check
diff --git a/test/pending/run/t0048.scala b/test/files/run/t0048.scala
index 71f37d26e4..9ee3453cd9 100644
--- a/test/pending/run/t0048.scala
+++ b/test/files/run/t0048.scala
@@ -4,7 +4,7 @@ object A1 {
}
}
-object C {
+object Test {
def main(args: Array[String]) {
val q = new A1.A2.X
val res = 5 match { case q(x) => x }
diff --git a/test/files/run/bug0325.check b/test/files/run/t0325.check
index 85fe91dac6..85fe91dac6 100644
--- a/test/files/run/bug0325.check
+++ b/test/files/run/t0325.check
diff --git a/test/files/run/t0325.scala b/test/files/run/t0325.scala
new file mode 100644
index 0000000000..92331ab05f
--- /dev/null
+++ b/test/files/run/t0325.scala
@@ -0,0 +1,53 @@
+case class RS(self: String) {
+
+ // NB. "\\Q" + '\\' + "\\E" works on Java 1.5 and newer, but not on Java 1.4
+ private def escape(ch: Char): String = ch match {
+ case '\\' => "\\\\"
+ case _ => "\\Q"+ch+"\\E"
+ }
+
+ def split(separator: Char): Array[String] = self.split(escape(separator))
+
+ def split(separators: Array[Char]): Array[String] = {
+ val re = separators.foldLeft("[")(_+escape(_)) + "]"
+ self.split(re)
+ }
+}
+
+object Test {
+ def expect = List("a","b")
+ def test(f: => Array[String], which: String) {
+ try {
+ val ret = f.toList
+ if (ret != expect)
+ println(which + " returned " + ret + " when expecting " + expect)
+ else
+ println(ret)
+ } catch {
+ case e@_ => println(which + " failed with " + e.getClass)
+ }
+ }
+
+ def main(args: Array[String]) {
+ val badChars = "?*{+([\\^.$"
+
+ for (c <- badChars)
+ test(("a"+c+"b").split(c),"RichString split('"+ c + "')")
+ println
+
+ for (c <- badChars)
+ test(RS("a"+c+"b").split(c),"RS split('"+ c + "')")
+ println
+
+ val badCases = List(
+ ']' -> "x]", '&' -> "&&",'\\' -> "\\x", '[' -> "[x",
+ '^' -> "^x", '-' -> "x-z"
+ )
+ for ((c,str) <- badCases)
+ test(("a"+c+"b").split(str.toArray),"RichString split(\""+ str + "\")")
+ println
+
+ for ((c,str) <- badCases)
+ test(RS("a"+c+"b").split(str.toArray),"RS split(\""+ str + "\")")
+ }
+}
diff --git a/test/files/run/t0412.scala b/test/files/run/t0412.scala
index f1ca7379ae..873fbb1eb4 100644
--- a/test/files/run/t0412.scala
+++ b/test/files/run/t0412.scala
@@ -1,4 +1,4 @@
-object Test extends Application {
+object Test extends App {
println(classOf[java.util.ArrayList[_]])
println(classOf[java.util.ArrayList[T] forSome { type T }])
}
diff --git a/test/files/run/t0421.scala b/test/files/run/t0421.scala
index b69373f341..8d51013924 100644
--- a/test/files/run/t0421.scala
+++ b/test/files/run/t0421.scala
@@ -1,5 +1,5 @@
// ticket #421
-object Test extends Application {
+object Test extends App {
def transpose[A: ClassManifest](xss: Array[Array[A]]) = {
for (i <- Array.range(0, xss(0).length)) yield
@@ -7,24 +7,24 @@ object Test extends Application {
}
def scalprod(xs: Array[Double], ys: Array[Double]) = {
- var acc = 0.0
- for ((x, y) <- xs zip ys) acc = acc + x * y
+ var acc = 0.0
+ for ((x, y) <- xs zip ys) acc = acc + x * y
acc
}
def matmul(xss: Array[Array[Double]], yss: Array[Array[Double]]) = {
- val ysst = transpose(yss)
+ val ysst = transpose(yss)
val ysst1: Array[Array[Double]] = yss.transpose
assert(ysst.deep == ysst1.deep)
for (xs <- xss) yield
- for (yst <- ysst) yield
+ for (yst <- ysst) yield
scalprod(xs, yst)
}
val a1 = Array(Array(0, 2, 4), Array(1, 3, 5))
- println(transpose(a1).deepMkString("[", ",", "]"))
+ println(transpose(a1).deep.mkString("[", ",", "]"))
- println(matmul(Array(Array(2, 3)), Array(Array(5), Array(7))).deepMkString("[", ",", "]"))
-
- println(matmul(Array(Array(4)), Array(Array(6, 8))).deepMkString("[", ",", "]"))
+ println(matmul(Array(Array(2, 3)), Array(Array(5), Array(7))).deep.mkString("[", ",", "]"))
+
+ println(matmul(Array(Array(4)), Array(Array(6, 8))).deep.mkString("[", ",", "]"))
}
diff --git a/test/files/run/t0432.scala b/test/files/run/t0432.scala
new file mode 100644
index 0000000000..8ba9015d81
--- /dev/null
+++ b/test/files/run/t0432.scala
@@ -0,0 +1,15 @@
+object Test {
+ type valueType = { def value: this.type }
+
+ class StringValue(x: String) {
+ def value: this.type = this
+ }
+
+ def m(x: valueType) = x.value
+
+ val s = new StringValue("hei")
+
+ def main(args: Array[String]) {
+ m(s)
+ }
+}
diff --git a/test/files/run/t0486.scala b/test/files/run/t0486.scala
index 9cedecc095..d3ed8f4225 100644
--- a/test/files/run/t0486.scala
+++ b/test/files/run/t0486.scala
@@ -1,4 +1,4 @@
-object Test extends Application {
+object Test extends App {
import scala.xml._
def wsdlTemplate1(serviceName: String): Node =
diff --git a/test/files/run/t0508.scala b/test/files/run/t0508.scala
index 7ef6f8197f..0f4325e629 100644
--- a/test/files/run/t0508.scala
+++ b/test/files/run/t0508.scala
@@ -1,4 +1,4 @@
-object Test extends Application {
+object Test extends App {
case class Foo(s: String, n: Int)
@@ -9,5 +9,5 @@ object Test extends Application {
}
}
- foo(Foo.unapply, Foo("this might be fun", 10))
+ foo(Foo.unapply, Foo("this might be fun", 10))
}
diff --git a/test/files/run/t0528.scala b/test/files/run/t0528.scala
index 5a4755c947..a76f602ed3 100644
--- a/test/files/run/t0528.scala
+++ b/test/files/run/t0528.scala
@@ -3,11 +3,11 @@ trait Sequ[A] {
}
class RichStr extends Sequ[Char] {
- // override to a primitve array
+ // override to a primitive array
def toArray: Array[Char] = Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9')
}
-object Test extends Application {
+object Test extends App {
val x: RichStr = new RichStr
println((x: Sequ[Char]).toArray.deep) // calling through the bridge misses unboxing
diff --git a/test/files/run/t0607.scala b/test/files/run/t0607.scala
index 5601494dec..b07fdcd490 100644
--- a/test/files/run/t0607.scala
+++ b/test/files/run/t0607.scala
@@ -1,4 +1,4 @@
-object Test extends Application {
+object Test extends App {
case class A()
class B extends A() { override def toString() = "B()" }
println(A())
diff --git a/test/files/run/t0631.scala b/test/files/run/t0631.scala
index e64301e514..5bceab6193 100644
--- a/test/files/run/t0631.scala
+++ b/test/files/run/t0631.scala
@@ -1,5 +1,5 @@
-object Test extends Application {
- class Foo {
+object Test extends App {
+ class Foo {
override def equals(that: Any) = {
println("Foo.equals called")
super.equals(that)
diff --git a/test/files/run/t0663.scala b/test/files/run/t0663.scala
index 16a5a48330..dd0326d4e3 100644
--- a/test/files/run/t0663.scala
+++ b/test/files/run/t0663.scala
@@ -1,4 +1,4 @@
-object Test extends Application {
+object Test extends App {
val src = scala.io.Source.fromString("<?xml version='1.0' encoding='UTF-8'?><feed/>")
val parser = xml.parsing.ConstructingParser.fromSource(src, true)
println(parser.document)
diff --git a/test/files/run/t0668.scala b/test/files/run/t0668.scala
index 2f1eaba0d9..98ecb554c7 100644
--- a/test/files/run/t0668.scala
+++ b/test/files/run/t0668.scala
@@ -1,4 +1,4 @@
-object Test extends Application {
+object Test extends App {
val ints: Array[Int] = Array(1, 2, 3)
ints.toArray
}
diff --git a/test/files/run/t0677.scala b/test/files/run/t0677.scala
index eb01a85fcb..6c8a3a7e99 100644
--- a/test/files/run/t0677.scala
+++ b/test/files/run/t0677.scala
@@ -1,7 +1,6 @@
-object Test extends Application {
- class X[T: ClassManifest] {
- val a = new Array[Array[T]](3,4)
- val b = Array.ofDim[T](3, 4)
+object Test extends App {
+ class X[T: ClassManifest] {
+ val a = Array.ofDim[T](3, 4)
}
val x = new X[String]
x.a(1)(2) = "hello"
diff --git a/test/files/run/t0807.scala b/test/files/run/t0807.scala
index e69aa1c71c..1a1add6b3a 100644
--- a/test/files/run/t0807.scala
+++ b/test/files/run/t0807.scala
@@ -1,5 +1,5 @@
trait A
-trait B extends A { val x = println("early") }
-object Test extends Application {
+trait B extends A { val x = println("early") }
+object Test extends App {
new B {}
}
diff --git a/test/files/run/t0883.scala b/test/files/run/t0883.scala
index b9d71702d8..adde95197b 100644
--- a/test/files/run/t0883.scala
+++ b/test/files/run/t0883.scala
@@ -1,14 +1,14 @@
object Foo { def apply(x: String) = new Foo(x) }
class Foo(name: String)
case object Bar extends Foo("Bar")
-case class Baz extends Foo("Baz")
-object Test extends Application {
- Foo("Bar") match {
- case Bar => println("What?")
+case class Baz() extends Foo("Baz")
+object Test extends App {
+ Foo("Bar") match {
+ case Bar => println("What?")
case _ => println("OK")
}
- Foo("Baz") match {
- case Baz() => println("What?")
+ Foo("Baz") match {
+ case Baz() => println("What?")
case _ => println("OK")
- }
+ }
}
diff --git a/test/files/run/t0911.scala b/test/files/run/t0911.scala
index 6f9ad91781..be8c5de1dc 100644
--- a/test/files/run/t0911.scala
+++ b/test/files/run/t0911.scala
@@ -4,6 +4,6 @@ class IP extends {
val baz = "bar";
} with Foo(() => baz);
-object Test extends Application{
+object Test extends App{
(new IP).bar();
}
diff --git a/test/files/run/t0936.scala b/test/files/run/t0936.scala
index 3a7535a5d8..e3470a2480 100644
--- a/test/files/run/t0936.scala
+++ b/test/files/run/t0936.scala
@@ -1,4 +1,4 @@
-object Test extends Application {
+object Test extends App {
def foo = {
abstract class MouseEventType { def x: String }
diff --git a/test/files/run/bug1005.check b/test/files/run/t1005.check
index 6ec0929090..6ec0929090 100644
--- a/test/files/run/bug1005.check
+++ b/test/files/run/t1005.check
diff --git a/test/files/run/t1005.scala b/test/files/run/t1005.scala
new file mode 100644
index 0000000000..60129bcc51
--- /dev/null
+++ b/test/files/run/t1005.scala
@@ -0,0 +1,19 @@
+object Test
+{
+ class Foo[T](x : Array[AnyRef]) { def bar = x.asInstanceOf[Array[T]] }
+ class Bar[T](x : Array[T]) { def bar = x.asInstanceOf[Array[AnyRef]] }
+
+ object FromMono{
+ def main(args : Array[String]) = (new Foo[AnyRef](Array[AnyRef]("Halp!"))).bar
+ }
+
+ object FromPoly{
+ def main(args : Array[String]) = (new Bar[AnyRef](Array[AnyRef]("Halp!"))).bar
+ }
+
+ def main(args: Array[String]): Unit = {
+ println(FromMono main null mkString)
+ println(FromPoly main null mkString)
+ }
+}
+
diff --git a/test/files/run/t102.check b/test/files/run/t102.check
new file mode 100644
index 0000000000..315f21037d
--- /dev/null
+++ b/test/files/run/t102.check
@@ -0,0 +1,2 @@
+(5,5)
+(10,10)
diff --git a/test/files/run/t102.scala b/test/files/run/t102.scala
new file mode 100644
index 0000000000..6517d8a531
--- /dev/null
+++ b/test/files/run/t102.scala
@@ -0,0 +1,24 @@
+trait Foo {
+ type Arg
+ type Prod
+ def makeProd(a: Arg): Prod
+}
+
+object Test {
+ def f1(x: Foo)(y: x.Arg) = x.makeProd(y)
+
+ case class f2[T <: Foo](x: T) {
+ def apply(y: x.Arg) = x.makeProd(y)
+ }
+
+ val myFoo = new Foo {
+ type Arg = Int
+ type Prod = (Int, Int)
+ def makeProd(i: Int) = (i, i)
+ }
+
+ def main(args: Array[String]): Unit = {
+ println(f1(myFoo)(5))
+ println(f2(myFoo)(10))
+ }
+}
diff --git a/test/files/run/t1042.check b/test/files/run/t1042.check
new file mode 100644
index 0000000000..223b7836fb
--- /dev/null
+++ b/test/files/run/t1042.check
@@ -0,0 +1 @@
+B
diff --git a/test/files/run/t1042.scala b/test/files/run/t1042.scala
new file mode 100644
index 0000000000..1f39fff24a
--- /dev/null
+++ b/test/files/run/t1042.scala
@@ -0,0 +1,14 @@
+abstract class A {
+ override def toString(): String // crucial
+
+ def toString(sb: StringBuilder): StringBuilder // crucial
+}
+
+case class B() extends A {
+ // overloaded version is implemented, causing toString not to be implemented?
+ def toString(sb: StringBuilder): StringBuilder = error("")
+}
+
+object Test extends App {
+ Console.println(B)
+}
diff --git a/test/files/run/t1044.scala b/test/files/run/t1044.scala
new file mode 100644
index 0000000000..4d37a40c81
--- /dev/null
+++ b/test/files/run/t1044.scala
@@ -0,0 +1,4 @@
+object Test extends App {
+ val ducks = Array[AnyRef]("Huey", "Dewey", "Louie");
+ ducks.iterator.asInstanceOf[Iterator[String]]
+}
diff --git a/test/files/run/t1048.check b/test/files/run/t1048.check
new file mode 100644
index 0000000000..f1e5eeed2d
--- /dev/null
+++ b/test/files/run/t1048.check
@@ -0,0 +1,2 @@
+3
+2
diff --git a/test/files/run/t1048.scala b/test/files/run/t1048.scala
new file mode 100644
index 0000000000..5eaeaa25c6
--- /dev/null
+++ b/test/files/run/t1048.scala
@@ -0,0 +1,21 @@
+final case class W[A](v: A)
+
+object E {
+ def unapply(w: W[Any]): Option[Any] = None
+}
+
+object Bug {
+ def bug[A](e: Either[W[_], A]) = e match {
+ case Left(E(x)) => 1
+ case Right(x) => 2
+ case _ => 3
+ }
+}
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ println(Bug.bug(Left(W(5))))
+ println(Bug.bug(Right(5)))
+ }
+}
+
diff --git a/test/files/run/t1074.check b/test/files/run/t1074.check
new file mode 100644
index 0000000000..ccf1cb1551
--- /dev/null
+++ b/test/files/run/t1074.check
@@ -0,0 +1,3 @@
+q0 = Set(kl, jk, cd, fg, ef, gh, a, de, hj, b, lm, mn)
+q1 = Set() 0
+q2 = Set() 0
diff --git a/test/files/run/bug1074.scala b/test/files/run/t1074.scala
index a95f9eedbc..a95f9eedbc 100644
--- a/test/files/run/bug1074.scala
+++ b/test/files/run/t1074.scala
diff --git a/test/files/run/bug1079.check b/test/files/run/t1079.check
index c508d5366f..c508d5366f 100644
--- a/test/files/run/bug1079.check
+++ b/test/files/run/t1079.check
diff --git a/test/files/run/t1079.scala b/test/files/run/t1079.scala
new file mode 100644
index 0000000000..ce435d254b
--- /dev/null
+++ b/test/files/run/t1079.scala
@@ -0,0 +1,3 @@
+object Test extends App {
+ println(<t user:tag=""/> == <t user:tag="X"/>)
+}
diff --git a/test/files/run/t1100.check b/test/files/run/t1100.check
new file mode 100644
index 0000000000..d3a49a47df
--- /dev/null
+++ b/test/files/run/t1100.check
@@ -0,0 +1,4 @@
+[1.4] error: errors are propagated
+
+aaab
+ ^
diff --git a/test/files/run/t1100.scala b/test/files/run/t1100.scala
new file mode 100644
index 0000000000..6b95fd6ecb
--- /dev/null
+++ b/test/files/run/t1100.scala
@@ -0,0 +1,17 @@
+import scala.util.parsing.combinator.Parsers
+import scala.util.parsing.input.CharSequenceReader
+
+class TestParsers extends Parsers {
+ type Elem = Char
+
+ def p: Parser[List[Char]] = rep1(p1)
+ def p1: Parser[Char] = accept('a') | err("errors are propagated")
+}
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ val tstParsers = new TestParsers
+ val s = new CharSequenceReader("aaab")
+ println(tstParsers.p(s))
+ }
+}
diff --git a/test/files/run/t1110.scala b/test/files/run/t1110.scala
new file mode 100644
index 0000000000..824643868c
--- /dev/null
+++ b/test/files/run/t1110.scala
@@ -0,0 +1,11 @@
+class Stuff {
+ def zoop(p: Any{def &(q: Int): Int}) = p & 7
+ def floop = new { def & = "Hello" }
+
+ assert((floop &) == "Hello")
+ assert(zoop(10) == 2)
+}
+
+object Test extends App {
+ new Stuff
+}
diff --git a/test/files/run/bug1141.check b/test/files/run/t1141.check
index 7262160d1d..7262160d1d 100644
--- a/test/files/run/bug1141.check
+++ b/test/files/run/t1141.check
diff --git a/test/files/run/t1141.scala b/test/files/run/t1141.scala
new file mode 100644
index 0000000000..ee4f2e7fd2
--- /dev/null
+++ b/test/files/run/t1141.scala
@@ -0,0 +1,7 @@
+object Test extends App {
+ val foo = new {
+ def apply(args : String*) = args foreach println
+ }
+
+ foo("var", "args")
+}
diff --git a/test/files/run/t1167.check b/test/files/run/t1167.check
new file mode 100644
index 0000000000..06fedebe71
--- /dev/null
+++ b/test/files/run/t1167.check
@@ -0,0 +1,3 @@
+anon$1
+anon$2
+$anonfun$testFunc$1
diff --git a/test/files/run/t1167.scala b/test/files/run/t1167.scala
new file mode 100644
index 0000000000..c2ec4cff4e
--- /dev/null
+++ b/test/files/run/t1167.scala
@@ -0,0 +1,32 @@
+/** Tests for compatible InnerClasses attribute between trait and
+ * impl classes, as well as anonymous classes.
+ */
+
+trait Test1 {
+ def testFunc(i:Int): Unit = {
+ (i:Int) => i + 5
+ }
+}
+
+/* getName
+ * Returns the binary name of the class if this class object represents a
+ * reference type that is not an array type.
+ * getSimpleName
+ * Returns the simple name of the underlying class as given in the source
+ * code. Returns an empty string if the underlying class is anonymous.
+ */
+abstract class Foo {
+ override def toString = getClass.getSimpleName
+
+ abstract class Bar {
+ override def toString = getClass.getSimpleName
+ }
+}
+
+object Test extends App {
+ val foo = new Foo {}
+ val bar = new foo.Bar {}
+ println(foo)
+ println(bar)
+ println(Class.forName("Test1$$anonfun$testFunc$1").getSimpleName)
+}
diff --git a/test/files/run/bug1192.check b/test/files/run/t1192.check
index 57234e1d8a..57234e1d8a 100644
--- a/test/files/run/bug1192.check
+++ b/test/files/run/t1192.check
diff --git a/test/files/run/t1192.scala b/test/files/run/t1192.scala
new file mode 100644
index 0000000000..3222bb0a37
--- /dev/null
+++ b/test/files/run/t1192.scala
@@ -0,0 +1,7 @@
+object Test extends App {
+ val v1: Array[Array[Int]] = Array(Array(1, 2), Array(3, 4))
+ def f[T](w: Array[Array[T]]) {
+ for (r <- w) println(r.deep.toString)
+ }
+ f(v1)
+}
diff --git a/test/files/run/t1220.scala b/test/files/run/t1220.scala
new file mode 100644
index 0000000000..0ba188d02d
--- /dev/null
+++ b/test/files/run/t1220.scala
@@ -0,0 +1,15 @@
+object Test extends App {
+
+ class QSRichIterable[A](self: Iterable[A]) {
+ def filterMap[R](f: PartialFunction[A,R]) =
+ self filter (f.isDefinedAt) map f
+ }
+
+ object Un {
+ def unapply(i: Int): Option[Int] = Some(i)
+ }
+
+ val richIter = new QSRichIterable(List(0, 1, 2, 3, 4))
+
+ assert((richIter filterMap {case Un(3) => 7}) == List(7))
+}
diff --git a/test/files/run/bug1300.check b/test/files/run/t1300.check
index 0f29a1fef5..0f29a1fef5 100644
--- a/test/files/run/bug1300.check
+++ b/test/files/run/t1300.check
diff --git a/test/files/run/t1300.scala b/test/files/run/t1300.scala
new file mode 100644
index 0000000000..ce2f80eb4e
--- /dev/null
+++ b/test/files/run/t1300.scala
@@ -0,0 +1,13 @@
+object Test extends App
+{
+ val a1 = Array(0,1,2,3).toArray[Any]
+// val a1 = x1.toArray[Any]
+ val a2 = Array('a','b','c','d').toArray[Any]
+ val a3 = Array("e","f","g","h").toArray[Any]
+
+ Array.copy(a3, 0, a1, 0, 4)
+ Array.copy(a2, 0, a3, 0, 4)
+ Array.copy(a2, 0, a1, 0, 4)
+
+ println(a1.mkString + a2.mkString + a3.mkString)
+}
diff --git a/test/files/run/t1309.scala b/test/files/run/t1309.scala
new file mode 100644
index 0000000000..b6a75fe6ae
--- /dev/null
+++ b/test/files/run/t1309.scala
@@ -0,0 +1,7 @@
+object Test {
+ def f(ras: => IndexedSeq[Byte]): IndexedSeq[Byte] = ras
+
+ def main(args: Array[String]): Unit = {
+ f(new Array[Byte](0))
+ }
+}
diff --git a/test/files/run/t1323.scala b/test/files/run/t1323.scala
index d84239a12c..8209b85219 100644
--- a/test/files/run/t1323.scala
+++ b/test/files/run/t1323.scala
@@ -1,25 +1,25 @@
-object Test extends Application {
- println(" 1:" + List(1,2,3,4).indexOfSeq(List(0,1))) // -1
- println(" 2:" + List(1,2,3,4).indexOfSeq(List(1,2))) // 0
- println(" 3:" + List(1,2,3,4).indexOfSeq(List(2,3))) // 1
- println(" 4:" + List(1,2,3,4).indexOfSeq(List(3,4))) // 2
- println(" 5:" + List(1,2,3,4).indexOfSeq(List(4,5))) // -1
- println(" 6:" + List(1,2,3,4).indexOfSeq(List(2,4))) // -1
- println(" 7:" + List(1,2,3,4).indexOfSeq(List(4,3))) // -1
- println(" 8:" + List(1,2,3,4).indexOfSeq(List(1,3))) // -1
- println(" 9:" + List(1,2,3,4).indexOfSeq(List(1,3))) // -1
- println("10:" + List(1,2,3,4).indexOfSeq(List(1,2,3,4))) // 0
- println("11:" + List(1,2,3,4).indexOfSeq(List(4,3,2,1))) // -1
- println("12:" + List(1,2,3,4).indexOfSeq(List(1,2,3,4,5))) // -1
- println("13:" + List(1,2,3,4).indexOfSeq(List(5,4,3,2,1))) // -1
- println("14:" + List(1,2,3,4).indexOfSeq(List())) // 0
- println("15:" + List().indexOfSeq(List())) // 0
- println("16:" + List().indexOfSeq(List(1,2,3,4))) // -1
+object Test extends App {
+ println(" 1:" + List(1,2,3,4).indexOfSlice(List(0,1))) // -1
+ println(" 2:" + List(1,2,3,4).indexOfSlice(List(1,2))) // 0
+ println(" 3:" + List(1,2,3,4).indexOfSlice(List(2,3))) // 1
+ println(" 4:" + List(1,2,3,4).indexOfSlice(List(3,4))) // 2
+ println(" 5:" + List(1,2,3,4).indexOfSlice(List(4,5))) // -1
+ println(" 6:" + List(1,2,3,4).indexOfSlice(List(2,4))) // -1
+ println(" 7:" + List(1,2,3,4).indexOfSlice(List(4,3))) // -1
+ println(" 8:" + List(1,2,3,4).indexOfSlice(List(1,3))) // -1
+ println(" 9:" + List(1,2,3,4).indexOfSlice(List(1,3))) // -1
+ println("10:" + List(1,2,3,4).indexOfSlice(List(1,2,3,4))) // 0
+ println("11:" + List(1,2,3,4).indexOfSlice(List(4,3,2,1))) // -1
+ println("12:" + List(1,2,3,4).indexOfSlice(List(1,2,3,4,5))) // -1
+ println("13:" + List(1,2,3,4).indexOfSlice(List(5,4,3,2,1))) // -1
+ println("14:" + List(1,2,3,4).indexOfSlice(List())) // 0
+ println("15:" + List().indexOfSlice(List())) // 0
+ println("16:" + List().indexOfSlice(List(1,2,3,4))) // -1
// Do some testing with infinite sequences
def from(n: Int): Stream[Int] = Stream.cons(n, from(n + 1))
- println("17:" + List(1,2,3,4).indexOfSeq(from(1))) // -1
- println("18:" + from(1).indexOfSeq(List(4,5,6))) // 3
+ println("17:" + List(1,2,3,4).indexOfSlice(from(1))) // -1
+ println("18:" + from(1).indexOfSlice(List(4,5,6))) // 3
}
diff --git a/test/files/run/t1333.check b/test/files/run/t1333.check
new file mode 100644
index 0000000000..6303af7f1c
--- /dev/null
+++ b/test/files/run/t1333.check
@@ -0,0 +1,3 @@
+10
+-10
+-1
diff --git a/test/files/run/t1333.scala b/test/files/run/t1333.scala
new file mode 100644
index 0000000000..514b4ffc8a
--- /dev/null
+++ b/test/files/run/t1333.scala
@@ -0,0 +1,14 @@
+object Test {
+ case class A(x: Int)(y: Int)(z: String)
+
+ def f(x: Any) = x match {
+ case A(x) => x
+ case _ => -1
+ }
+
+ def main(args: Array[String]): Unit = {
+ println(f(A(10)(20)("abc")))
+ println(f(A(-10)(20)("abc")))
+ println(f(List(1)))
+ }
+}
diff --git a/test/files/run/bug1360.check b/test/files/run/t1360.check
index 8417e208ae..8417e208ae 100644
--- a/test/files/run/bug1360.check
+++ b/test/files/run/t1360.check
diff --git a/test/files/run/bug1360.scala b/test/files/run/t1360.scala
index 4703127666..4703127666 100644
--- a/test/files/run/bug1360.scala
+++ b/test/files/run/t1360.scala
diff --git a/test/files/run/t1368.scala b/test/files/run/t1368.scala
index c9b2297203..04e9195d3e 100644
--- a/test/files/run/t1368.scala
+++ b/test/files/run/t1368.scala
@@ -1,4 +1,4 @@
-object Test extends Application {
+object Test extends App {
trait Happy { val status = "happy" }
trait Sad { val status = "sad" }
diff --git a/test/files/run/t1373.scala b/test/files/run/t1373.scala
new file mode 100644
index 0000000000..d6f9c1ee1c
--- /dev/null
+++ b/test/files/run/t1373.scala
@@ -0,0 +1,6 @@
+// Testing whether case class params come back in the right order.
+object Test extends App {
+ case class Foo(private val a: String, b: String, private val c: String, d: String, private val e: String)
+ val x = Foo("a", "b", "c", "d", "e")
+ assert(x.toString == """Foo(a,b,c,d,e)""")
+}
diff --git a/test/files/run/t1423.scala b/test/files/run/t1423.scala
index 83c35a46bd..44c6653287 100644
--- a/test/files/run/t1423.scala
+++ b/test/files/run/t1423.scala
@@ -1,8 +1,8 @@
-object Test extends Application{
+object Test extends App{
val x = 1 match {
case 0xFFFFFFFF00000001L => println("Oops, overflow!");
case 2L => println(2);
case 1L => println(1);
case _ => println("????");
}
-}
+}
diff --git a/test/files/run/t1427.scala b/test/files/run/t1427.scala
new file mode 100644
index 0000000000..21bd71ffef
--- /dev/null
+++ b/test/files/run/t1427.scala
@@ -0,0 +1,15 @@
+class Bob[K[_]] {
+ def foo(other: Any) = other match {
+ case x: (Bob[X] forSome { type X[_] }) => true
+ case _ => false
+ }
+}
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ val x = new Bob[List]
+ val results = List(x, new Bob[Set], 55) map (x foo _)
+
+ assert(results == List(true, true, false))
+ }
+}
diff --git a/test/files/run/t1430.check b/test/files/run/t1430.check
new file mode 100644
index 0000000000..a688182701
--- /dev/null
+++ b/test/files/run/t1430.check
@@ -0,0 +1 @@
+Baz
diff --git a/test/files/run/t1430/Bar_1.java b/test/files/run/t1430/Bar_1.java
new file mode 100644
index 0000000000..4db2eafcbd
--- /dev/null
+++ b/test/files/run/t1430/Bar_1.java
@@ -0,0 +1,8 @@
+package j;
+
+interface Foo {
+ public void foo();
+}
+public interface Bar_1 extends Foo {
+ public void bar();
+}
diff --git a/test/files/run/t1430/Test_2.scala b/test/files/run/t1430/Test_2.scala
new file mode 100644
index 0000000000..7af65de5cd
--- /dev/null
+++ b/test/files/run/t1430/Test_2.scala
@@ -0,0 +1,16 @@
+package s {
+ object Boop extends j.Bar_1 {
+ def foo() {}
+ def bar() {}
+ }
+ class Baz(x: j.Bar_1) {
+ x.foo
+ override def toString = "Baz"
+ }
+}
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ println(new s.Baz(s.Boop))
+ }
+}
diff --git a/test/files/run/bug1434.scala b/test/files/run/t1434.scala
index 63bd88ec90..63bd88ec90 100644
--- a/test/files/run/bug1434.scala
+++ b/test/files/run/t1434.scala
diff --git a/test/files/run/t1466.scala b/test/files/run/t1466.scala
new file mode 100644
index 0000000000..c59a388590
--- /dev/null
+++ b/test/files/run/t1466.scala
@@ -0,0 +1,11 @@
+object IOvervalueMyPrivacy {
+ private[this] var i = 0
+ def go = {
+ List(1,2,3).foreach(i += _)
+ i
+ }
+}
+
+object Test extends App {
+ assert(IOvervalueMyPrivacy.go == 6)
+}
diff --git a/test/files/run/t1500.check b/test/files/run/t1500.check
index 1032649f20..94a169333b 100644
--- a/test/files/run/t1500.check
+++ b/test/files/run/t1500.check
@@ -1,3 +1,3 @@
defined class posingAs
-resolve: [A,B](x: A @posingAs[B])B
+resolve: [A, B](x: A @posingAs[B])B
x: Any = 7
diff --git a/test/files/run/t1500.scala b/test/files/run/t1500.scala
index de79b84e75..c312a9a883 100644
--- a/test/files/run/t1500.scala
+++ b/test/files/run/t1500.scala
@@ -1,27 +1,27 @@
-import scala.tools.nsc._
+import scala.tools.nsc._
object Test {
-
+
/**
* Type inference overlooks constraints posed by type parameters in annotations on types.
*/
-
+
val testCode = <code>
-
+
class posingAs[A] extends TypeConstraint
-
+
def resolve[A,B](x: A @posingAs[B]): B = x.asInstanceOf[B]
-
+
val x = resolve(7: @posingAs[Any])
-
+
</code>.text
-
+
def main(args: Array[String]) = {
-
- val tool = new Interpreter(new Settings())
+
+ val settings = new Settings()
+ settings.classpath.value = System.getProperty("java.class.path")
+ val tool = new Interpreter(settings)
val global = tool.compiler
- // when running that compiler, give it a scala-library to the classpath
- global.settings.classpath.value = System.getProperty("java.class.path")
import global._
import definitions._
@@ -35,11 +35,11 @@ object Test {
}
}
-
+
global.addAnnotationChecker(checker)
-
+
tool.interpret(testCode)
-
+
}
}
diff --git a/test/files/run/t1501.scala b/test/files/run/t1501.scala
index 851daae0bb..05e4da8c7a 100644
--- a/test/files/run/t1501.scala
+++ b/test/files/run/t1501.scala
@@ -1,15 +1,15 @@
-import scala.tools.nsc._
+import scala.tools.nsc._
object Test {
-
+
/**
* ...
*/
-
+
val testCode = <code>
-
+
class xyz[A] extends TypeConstraint
-
+
def loopWhile[T](cond: =>Boolean)(body: =>(Unit @xyz[T])): Unit @ xyz[T] = {{
if (cond) {{
body
@@ -24,16 +24,14 @@ object Test {
(): @xyz[Int]
}}
}}
-
+
</code>.text
-
+
def main(args: Array[String]) = {
-
- val tool = new Interpreter(new Settings())
+ val settings = new Settings()
+ settings.classpath.value = System.getProperty("java.class.path")
+ val tool = new Interpreter(settings)
val global = tool.compiler
- // when running that compiler, give it a scala-library to the classpath
- global.settings.classpath.value = System.getProperty("java.class.path")
-
import global._
import definitions._
@@ -47,11 +45,11 @@ object Test {
}
}
-
+
global.addAnnotationChecker(checker)
-
+
tool.interpret(testCode)
-
+
}
}
diff --git a/test/files/run/t1505.scala b/test/files/run/t1505.scala
index fdcd4f3fb3..a246e8a35b 100644
--- a/test/files/run/t1505.scala
+++ b/test/files/run/t1505.scala
@@ -10,7 +10,7 @@ object R extends Enumeration {
val A, B, C = Value
}
-object Test extends Application {
+object Test extends App {
assert(P(0) == P.withName("A"))
assert(P.C == P.withName("C"))
diff --git a/test/files/run/t1524.scala b/test/files/run/t1524.scala
index ecd90adec7..8a1fb7d5c0 100644
--- a/test/files/run/t1524.scala
+++ b/test/files/run/t1524.scala
@@ -1,7 +1,7 @@
-object Test extends Application {
+object Test extends App {
- val buf = new scala.collection.mutable.ArrayBuffer[String] { override val initialSize = 0 }
+ val buf = new scala.collection.mutable.ArrayBuffer[String](0)
buf += "initial"
buf += "second"
- println(buf.first)
+ println(buf.head)
}
diff --git a/test/files/run/t153.check b/test/files/run/t153.check
index 504fd7fc7f..648a6de7c3 100644
--- a/test/files/run/t153.check
+++ b/test/files/run/t153.check
@@ -1 +1 @@
-Stream(524288, 262144, 131072, 65536, 32768, 16384, 8192, 4096, 2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1)
+Stream(262144, 131072, 65536, 32768, 16384, 8192, 4096, 2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1)
diff --git a/test/files/run/t153.scala b/test/files/run/t153.scala
index c7b3c1c762..82492fdbe6 100644
--- a/test/files/run/t153.scala
+++ b/test/files/run/t153.scala
@@ -1,5 +1,5 @@
-object Test extends Application {
+object Test extends App {
def powers(x: Int) = if ((x&(x-1))==0) Some(x) else None
- val res = (Stream.range(1, 1000000) flatMap powers).reverse
+ val res = (Stream.range(1, 500000) flatMap powers).reverse
println(res take 42 force)
-} \ No newline at end of file
+}
diff --git a/test/files/run/t1535.scala b/test/files/run/t1535.scala
index d0ae4814f4..b0163a9710 100644
--- a/test/files/run/t1535.scala
+++ b/test/files/run/t1535.scala
@@ -8,7 +8,7 @@ class ClassDecl extends BlockStmt {
lazy val y = true
}
-object Test extends Application {
+object Test extends App {
val n = new ClassDecl ()
println (n.x)
println (n.y)
diff --git a/test/files/run/t1537.check b/test/files/run/t1537.check
new file mode 100644
index 0000000000..0be5d980da
--- /dev/null
+++ b/test/files/run/t1537.check
@@ -0,0 +1,2 @@
+true
+true \ No newline at end of file
diff --git a/test/files/run/t1537.scala b/test/files/run/t1537.scala
new file mode 100644
index 0000000000..ddbfb29ac4
--- /dev/null
+++ b/test/files/run/t1537.scala
@@ -0,0 +1,18 @@
+trait Syntax {
+ object Foo
+}
+
+trait Evaluation {
+ val syntax: Syntax
+
+ def equalInTrait = this.syntax.Foo == this.syntax.Foo
+}
+
+object Test extends Evaluation with App {
+ object syntax extends Syntax
+
+ def equalInObject = this.syntax.Foo == this.syntax.Foo
+
+ println(equalInTrait)
+ println(equalInObject)
+}
diff --git a/test/files/run/t1591.check b/test/files/run/t1591.check
new file mode 100644
index 0000000000..48082f72f0
--- /dev/null
+++ b/test/files/run/t1591.check
@@ -0,0 +1 @@
+12
diff --git a/test/files/run/t1591.scala b/test/files/run/t1591.scala
new file mode 100644
index 0000000000..bd43f0b23d
--- /dev/null
+++ b/test/files/run/t1591.scala
@@ -0,0 +1,14 @@
+abstract class A {
+
+ lazy val lazyBar = bar
+
+ object bar {
+ val foo = 12
+ }
+
+}
+
+object Test extends App {
+ val a = new A{}
+ println(a.lazyBar.foo)
+}
diff --git a/test/files/run/t1618.scala b/test/files/run/t1618.scala
index 9f3ade6113..91f6de5874 100644
--- a/test/files/run/t1618.scala
+++ b/test/files/run/t1618.scala
@@ -1,5 +1,5 @@
-object Test extends Application {
+object Test extends App {
import scala.tools.nsc.io._
val dir: VirtualDirectory = new VirtualDirectory("foo", None)
diff --git a/test/files/run/t1620.scala b/test/files/run/t1620.scala
index ff25955eb7..e8ea06eb5f 100644
--- a/test/files/run/t1620.scala
+++ b/test/files/run/t1620.scala
@@ -2,7 +2,7 @@ import java.io.PrintWriter
import scala.xml.XML
import scala.xml.dtd.{DocType, PublicID}
-object Test extends Application {
+object Test extends App {
val dt = DocType("foo", PublicID("-//Foo Corp//DTD 1.0//EN", "foo.dtd"), Seq())
val pw = new PrintWriter(System.out)
XML.write(pw, <foo/>, "utf-8", true, dt)
diff --git a/test/files/run/t1718.scala b/test/files/run/t1718.scala
index 61a17b2906..358bd1be5a 100644
--- a/test/files/run/t1718.scala
+++ b/test/files/run/t1718.scala
@@ -1,10 +1,10 @@
-object Test extends Application{
- def matchesNull[T](mightBeNull: Array[T]): Boolean = mightBeNull match {
+object Test extends App{
+ def matchesNull[T](mightBeNull: Array[T]): Boolean = mightBeNull match {
case null => true
case x => false
}
val nullArray: Array[String] = null
- println(matchesNull(nullArray))
+ println(matchesNull(nullArray))
}
diff --git a/test/files/run/t1747.scala b/test/files/run/t1747.scala
index f7f54ee7dc..b11af6c023 100644
--- a/test/files/run/t1747.scala
+++ b/test/files/run/t1747.scala
@@ -3,4 +3,4 @@ object Foo extends Foo {
}
class Foo
-object Test extends Application { Foo }
+object Test extends App { Foo }
diff --git a/test/files/run/t1766.scala b/test/files/run/t1766.scala
new file mode 100644
index 0000000000..2afd883755
--- /dev/null
+++ b/test/files/run/t1766.scala
@@ -0,0 +1,16 @@
+object Test extends App {
+
+ class C(s: String) {
+
+ def this(i: Int) = this("bar")
+
+ def f = {
+ val v: { def n: Int } = new { val n = 3 }
+ v.n
+ }
+
+ }
+
+ new C("foo").f
+
+}
diff --git a/test/files/run/t1773.scala b/test/files/run/t1773.scala
index 81c6005f86..c50b62512f 100644
--- a/test/files/run/t1773.scala
+++ b/test/files/run/t1773.scala
@@ -1,4 +1,4 @@
-object Test extends Application
+object Test extends App
{
val xs = List(
<a></a>,
@@ -7,6 +7,6 @@ object Test extends Application
<a>{""}</a>,
<a>{ if (true) "" else "I like turtles" }</a>
)
-
- for (x1 <- xs; x2 <- xs) assert (x1 == x2)
+
+ for (x1 <- xs; x2 <- xs) assert (x1 xml_== x2)
}
diff --git a/test/files/run/t1829.scala b/test/files/run/t1829.scala
index 8240527424..7c39d33ae9 100644
--- a/test/files/run/t1829.scala
+++ b/test/files/run/t1829.scala
@@ -1,6 +1,6 @@
object Test{
def main(args : Array[String]){
- import scala.collection.immutable._
+ import scala.collection.immutable._
assert(IntMap.empty == HashMap.empty);
assert(HashMap.empty == IntMap.empty);
assert(LongMap.empty == HashMap.empty);
diff --git a/test/files/run/t1939.scala b/test/files/run/t1939.scala
index 7d6261906c..7626e8bc1a 100644
--- a/test/files/run/t1939.scala
+++ b/test/files/run/t1939.scala
@@ -15,7 +15,7 @@ final class T2(_module: Module) extends T {
def module = _module
}
-object Test extends Application {
+object Test extends App {
type mType = Module
diff --git a/test/files/run/t2005.scala b/test/files/run/t2005.scala
new file mode 100644
index 0000000000..45da9fe5b2
--- /dev/null
+++ b/test/files/run/t2005.scala
@@ -0,0 +1,10 @@
+object Test {
+ def main(args: Array[String]) {
+ val a = Array.ofDim[Int](2,2)
+ test(a)
+ }
+ def test[A](t: Array[Array[A]]) {
+ val tmp = t(0)
+ t(1) = tmp
+ }
+}
diff --git a/test/files/run/bug2029.check b/test/files/run/t2029.check
index 57b610ccc5..57b610ccc5 100644
--- a/test/files/run/bug2029.check
+++ b/test/files/run/t2029.check
diff --git a/test/files/run/t2029.scala b/test/files/run/t2029.scala
new file mode 100644
index 0000000000..1cbe97a350
--- /dev/null
+++ b/test/files/run/t2029.scala
@@ -0,0 +1,16 @@
+object Test{
+ def main(args : Array[String]){
+ import scala.collection.immutable.TreeSet;
+
+ val mainSet = TreeSet(1 to 5 :_*)
+
+ var compareCalled = false;
+ val smallerSet = TreeSet(2 to 4 :_*)(Ordering[Int].reverse)
+
+ println(mainSet.mkString(","))
+ println(smallerSet.mkString(","))
+ println(smallerSet.subsetOf(mainSet));
+ }
+
+
+}
diff --git a/test/files/run/t2030.scala b/test/files/run/t2030.scala
index 251ae2c622..2333c3981b 100644
--- a/test/files/run/t2030.scala
+++ b/test/files/run/t2030.scala
@@ -1,6 +1,6 @@
import scala.collection.immutable._
-object Test extends Application {
+object Test extends App {
val res0 = TreeSet(1, 2, 3, 4, 5, 6)
val res1 = res0.map(x => x)
println(res0.toList == res1.toList)
diff --git a/test/files/run/t2074.scala b/test/files/run/t2074.scala
deleted file mode 100644
index 60646be733..0000000000
--- a/test/files/run/t2074.scala
+++ /dev/null
@@ -1,3 +0,0 @@
-object Test extends Application {
- List.range(1,11).view.patch(5, List(100,101), 2)
-}
diff --git a/test/files/run/t2074_2.check b/test/files/run/t2074_2.check
index eb1f072de3..0876ef7d03 100644
--- a/test/files/run/t2074_2.check
+++ b/test/files/run/t2074_2.check
@@ -1,3 +1,3 @@
-IndexedSeqView(1, 2, 3)
-IndexedSeqView(1, 2, 3)
-IndexedSeqViewZ((1,1), (2,2), (3,3))
+SeqView(...)
+SeqView(...)
+SeqViewZ(...)
diff --git a/test/files/run/t2074_2.scala b/test/files/run/t2074_2.scala
index 7d1d8181d8..1f59e0b8a1 100644
--- a/test/files/run/t2074_2.scala
+++ b/test/files/run/t2074_2.scala
@@ -1,15 +1,18 @@
// replaced all occurrences of 'Vector' with 'IndexedSeq'
import scala.collection.immutable.IndexedSeq
-import scala.collection.IndexedSeqView
+import scala.collection.SeqView
object Test {
- val v = new IndexedSeqView[Int, IndexedSeq[Int]] {
+ val funWithCCE = List.range(1,11).view.patch(5, List(100,101), 2)
+
+ val v = new SeqView[Int, IndexedSeq[Int]] {
def underlying = IndexedSeq(1,2,3)
def apply(idx: Int) = underlying(idx)
def length = underlying.length
+ def iterator = underlying.iterator
}
val w = IndexedSeq(1, 2, 3).view
-
+
def main(args: Array[String]): Unit = {
println(v)
println(w)
diff --git a/test/files/run/t2075.scala b/test/files/run/t2075.scala
new file mode 100644
index 0000000000..e3a68e4a83
--- /dev/null
+++ b/test/files/run/t2075.scala
@@ -0,0 +1,7 @@
+object Test extends App {
+ var tm = new scala.collection.immutable.TreeMap[Int,Int]
+ for (i <- 0 to 100)
+ tm = tm.insert(i, i)
+
+ tm.keySet.filter(_ < 40)
+}
diff --git a/test/files/run/t2087-and-2400.scala b/test/files/run/t2087-and-2400.scala
new file mode 100644
index 0000000000..93cd633ffb
--- /dev/null
+++ b/test/files/run/t2087-and-2400.scala
@@ -0,0 +1,20 @@
+object Test
+{
+ def negativeCharMaker = new (Short => Char) { def apply(x: Short) = x.toChar }
+ def main(args: Array[String]): Unit = {
+ // throws exception if -100 gets to Character.valueOf
+ val x = negativeCharMaker(-100)
+
+ // chars are unsigned, they should never be equal to negative values
+ assert((-100).toShort != (-100).toChar)
+ assert((-100).toChar != (-100).toShort)
+ assert((-100).toChar != (-100).toByte)
+ assert((-100).toByte != (-100).toChar)
+
+ // BoxesRunTime must agree as well
+ assert(((-100).toShort: Any) != (-100).toChar)
+ assert(((-100).toChar: Any) != (-100).toShort)
+ assert(((-100).toChar: Any) != (-100).toByte)
+ assert(((-100).toByte: Any) != (-100).toChar)
+ }
+}
diff --git a/test/files/run/t2106.flags b/test/files/run/t2106.flags
new file mode 100644
index 0000000000..eb4d19bcb9
--- /dev/null
+++ b/test/files/run/t2106.flags
@@ -0,0 +1 @@
+-optimise \ No newline at end of file
diff --git a/test/files/run/t2106.scala b/test/files/run/t2106.scala
new file mode 100644
index 0000000000..e8124dabab
--- /dev/null
+++ b/test/files/run/t2106.scala
@@ -0,0 +1,8 @@
+class A extends Cloneable {
+ @inline final def foo = clone()
+}
+
+object Test {
+ val x = new A
+ def main(args: Array[String]) = x.foo
+}
diff --git a/test/files/run/t2111.scala b/test/files/run/t2111.scala
index 3c6c5b8e8f..98177c4e21 100644
--- a/test/files/run/t2111.scala
+++ b/test/files/run/t2111.scala
@@ -1,5 +1,5 @@
-object Test extends Application {
+object Test extends App {
object Color extends Enumeration {
val Red, Green, Blue = Value
diff --git a/test/files/run/bug2124.check b/test/files/run/t2124.check
index 2b8840209f..2b8840209f 100644
--- a/test/files/run/bug2124.check
+++ b/test/files/run/t2124.check
diff --git a/test/files/run/t2124.scala b/test/files/run/t2124.scala
new file mode 100644
index 0000000000..a4fd654d76
--- /dev/null
+++ b/test/files/run/t2124.scala
@@ -0,0 +1,25 @@
+import scala.xml._
+
+import scala.xml.transform._
+
+object Test {
+ val sampleXml = <p><lost/><t><s><r></r></s></t></p>
+
+ def main(args: scala.Array[String]) {
+
+ println(new RuleTransformer(new RewriteRule {
+
+ override def transform(n: Node): NodeSeq = {
+ val result = n match {
+ case <t>{_*}</t> => <q/>
+
+ case n => n
+
+ }
+// println ("Rewriting '" +n+ "' to: '" + result+ "'")
+
+ result
+ }
+ }).transform(sampleXml))
+ }
+}
diff --git a/test/files/run/bug2125.check b/test/files/run/t2125.check
index 2b8840209f..2b8840209f 100644
--- a/test/files/run/bug2125.check
+++ b/test/files/run/t2125.check
diff --git a/test/files/run/t2125.scala b/test/files/run/t2125.scala
new file mode 100644
index 0000000000..a10ed9827b
--- /dev/null
+++ b/test/files/run/t2125.scala
@@ -0,0 +1,25 @@
+import scala.xml._
+
+import scala.xml.transform._
+
+object Test {
+
+ val sampleXml = <xml:group><p><lost/><t><s><r></r></s></t></p></xml:group>
+
+ def main(args: scala.Array[String]) {
+ println(new RuleTransformer(new RewriteRule {
+
+ override def transform(n: Node): NodeSeq = {
+
+ val result = n match {
+
+ case <t>{_*}</t> => <q/>
+
+ case n => n
+ }
+// println ("Rewriting '" +n+ "' to: '" + result+ "'")
+ result
+ }
+ }).transform(sampleXml))
+ }
+}
diff --git a/test/files/run/t2147.scala b/test/files/run/t2147.scala
index 185e617d80..1a1dfddc71 100644
--- a/test/files/run/t2147.scala
+++ b/test/files/run/t2147.scala
@@ -1,4 +1,4 @@
-object Test extends Application {
+object Test extends App {
val s: Seq[Int] = Stream.from(1)
val res0 = s.map(a => 2).head
val res1 = Stream.from(1).flatMap(a => List(1)).head
diff --git a/test/files/run/randomAccessSeq-apply.check b/test/files/run/t216.check
index d86bac9de5..d86bac9de5 100644
--- a/test/files/run/randomAccessSeq-apply.check
+++ b/test/files/run/t216.check
diff --git a/test/files/run/t216.scala b/test/files/run/t216.scala
new file mode 100644
index 0000000000..916a3c582b
--- /dev/null
+++ b/test/files/run/t216.scala
@@ -0,0 +1,7 @@
+object Test extends App {
+ object m {
+ val f = { x: Unit => () }
+ Console.println("OK")
+ }
+ m;
+}
diff --git a/test/files/run/t2162.check b/test/files/run/t2162.check
new file mode 100644
index 0000000000..87729eb41a
--- /dev/null
+++ b/test/files/run/t2162.check
@@ -0,0 +1,2 @@
+B.foo[Bar]
+A.foo[Bar]
diff --git a/test/pending/pos/t2162.scala b/test/files/run/t2162.scala
index b21404726b..fe576a8e2d 100644
--- a/test/pending/pos/t2162.scala
+++ b/test/files/run/t2162.scala
@@ -1,4 +1,3 @@
-// crash verified; no solution yet
class Foo(x: Int)
class Bar extends Foo(1)
@@ -8,7 +7,7 @@ trait A {
class B extends A {
def foo[Bar] { println("B.foo[Bar]") }
}
-object test {
+object Test {
val x = new B
val y = new A {
def foo[Bar] { println("A.foo[Bar]") }
diff --git a/test/files/run/bug2175.scala b/test/files/run/t2175.scala
index 7885882d30..7885882d30 100644
--- a/test/files/run/bug2175.scala
+++ b/test/files/run/t2175.scala
diff --git a/test/files/run/t2176.scala b/test/files/run/t2176.scala
index f8b07271a1..2a46dcf2c4 100644
--- a/test/files/run/t2176.scala
+++ b/test/files/run/t2176.scala
@@ -1,4 +1,4 @@
-object Test extends Application {
+object Test extends App {
val res0 = Stream.cons(1, Stream.cons( { println("ouch"); 2 }, Stream.empty))
println(res0.take(1).force)
}
diff --git a/test/files/run/t2177.scala b/test/files/run/t2177.scala
index fd1a29d198..5e344c654d 100644
--- a/test/files/run/t2177.scala
+++ b/test/files/run/t2177.scala
@@ -1,3 +1,3 @@
-object Test extends Application {
+object Test extends App {
println(Stream.from(1).take(5).mkString)
}
diff --git a/test/files/run/t2212.scala b/test/files/run/t2212.scala
new file mode 100644
index 0000000000..b9c0cd776b
--- /dev/null
+++ b/test/files/run/t2212.scala
@@ -0,0 +1,10 @@
+object Test {
+ def main(args: Array[String]) {
+ import collection.mutable._
+ val x4 = LinkedList[Int](1)
+ println(x4)
+ val y4 = LinkedList[Int](1)
+ println(y4)
+ println(x4 equals y4) // or (y4 equals x4)
+ }
+}
diff --git a/test/files/run/t2236.scala b/test/files/run/t2236.scala
index 8e2b3900d4..64ed18c805 100755
--- a/test/files/run/t2236.scala
+++ b/test/files/run/t2236.scala
@@ -1,7 +1,7 @@
class T[A](implicit val m:Manifest[A])
class Foo
class Bar extends T[Foo]
-object Test extends Application {
+object Test extends App {
new Bar
}
diff --git a/test/files/run/t2241.scala b/test/files/run/t2241.scala
new file mode 100644
index 0000000000..4a8a662b85
--- /dev/null
+++ b/test/files/run/t2241.scala
@@ -0,0 +1,7 @@
+object Test extends App {
+ def f(a:Array[Int]) = a match {
+ case Array(1, _*) => "yes"
+ case _ => "no"
+ }
+ assert(f(null) == "no")
+}
diff --git a/test/files/run/bug2250.scala b/test/files/run/t2250.scala
index 1ed333792a..1ed333792a 100644
--- a/test/files/run/bug2250.scala
+++ b/test/files/run/t2250.scala
diff --git a/test/files/run/t2255.scala b/test/files/run/t2255.scala
index be800adf5a..0b34115ed2 100644
--- a/test/files/run/t2255.scala
+++ b/test/files/run/t2255.scala
@@ -1,3 +1,3 @@
-object Test extends Application {
+object Test extends App {
println(Stream.continually(Stream(1, 2, 3)).flatten.take(6).toList)
}
diff --git a/test/files/run/bug2276.check b/test/files/run/t2276.check
index 95f51c8e29..95f51c8e29 100644
--- a/test/files/run/bug2276.check
+++ b/test/files/run/t2276.check
diff --git a/test/files/run/t2276.scala b/test/files/run/t2276.scala
new file mode 100644
index 0000000000..f0404e5fab
--- /dev/null
+++ b/test/files/run/t2276.scala
@@ -0,0 +1,24 @@
+import scala.xml._
+import scala.xml.transform._
+
+object Test extends App {
+ val inputXml : Node =
+ <root>
+ <subnode>
+ <version>1</version>
+ </subnode>
+ <contents>
+ <version>1</version>
+ </contents>
+ </root>
+
+ object t1 extends RewriteRule {
+ override def transform(n: Node): Seq[Node] = n match {
+ case <version>{x}</version> if x.toString.toInt < 4 => <version>{x.toString.toInt+1}</version>
+ case other => other
+ }
+ }
+
+ val ruleTransformer = new RuleTransformer(t1)
+ println(ruleTransformer(inputXml))
+}
diff --git a/test/files/run/t2308a.check b/test/files/run/t2308a.check
new file mode 100644
index 0000000000..888240c702
--- /dev/null
+++ b/test/files/run/t2308a.check
@@ -0,0 +1 @@
+interface Test$T
diff --git a/test/files/run/t2308a.scala b/test/files/run/t2308a.scala
new file mode 100644
index 0000000000..abb568064a
--- /dev/null
+++ b/test/files/run/t2308a.scala
@@ -0,0 +1,7 @@
+object Test {
+ trait T[M[_]]
+
+ def f1 = classOf[T[X] forSome { type X[_] } ]
+
+ def main(args: Array[String]): Unit = println(f1)
+}
diff --git a/test/files/run/t2316.scala b/test/files/run/t2316_run.scala
index a3d5bf890b..a3d5bf890b 100644
--- a/test/files/run/t2316.scala
+++ b/test/files/run/t2316_run.scala
diff --git a/test/files/run/t2333.scala b/test/files/run/t2333.scala
new file mode 100644
index 0000000000..da43386572
--- /dev/null
+++ b/test/files/run/t2333.scala
@@ -0,0 +1,16 @@
+class A {
+ def whatever() {
+ lazy val a = 1
+ lazy val b = try { 2 } catch { case _ => 0 }
+ a
+ b
+
+ }
+}
+
+object Test {
+ def main(a: Array[String]) {
+ val a = new A
+ a.whatever
+ }
+} \ No newline at end of file
diff --git a/test/files/run/t2354.scala b/test/files/run/t2354.scala
new file mode 100644
index 0000000000..5419911ac3
--- /dev/null
+++ b/test/files/run/t2354.scala
@@ -0,0 +1,17 @@
+import scala.xml.parsing._
+import scala.io.Source
+
+object Test
+{
+ val xml_good = "<title><![CDATA[Hello [tag]]]></title>"
+ val xml_bad = "<title><![CDATA[Hello [tag] ]]></title>"
+
+ val parser1 = ConstructingParser.fromSource(Source.fromString(xml_good),false)
+ val parser2 = ConstructingParser.fromSource(Source.fromString(xml_bad),false)
+
+ def main(args: Array[String]): Unit = {
+ parser1.document
+ parser2.document
+ }
+}
+
diff --git a/test/files/run/t2378.scala b/test/files/run/t2378.scala
new file mode 100644
index 0000000000..f696a78b4c
--- /dev/null
+++ b/test/files/run/t2378.scala
@@ -0,0 +1,9 @@
+object Test
+{
+ val f1 = -0.0
+ val f2 = -(0.0)
+ def main(args: Array[String]): Unit = {
+ assert(f1.toString startsWith "-")
+ assert(f2.toString startsWith "-")
+ }
+}
diff --git a/test/files/run/t2417.check b/test/files/run/t2417.check
new file mode 100644
index 0000000000..36c954be24
--- /dev/null
+++ b/test/files/run/t2417.check
@@ -0,0 +1,12 @@
+testing small Map that doesn't promote to HashMap...
+
+testing single-threaded HashMap use...
+
+testing HashMap.size from multiple threads...
+
+testing small Set that doesn't promote to HashSet...
+
+testing single-threaded HashSet use...
+
+testing HashSet.size from multiple threads...
+
diff --git a/test/files/run/t2417.scala b/test/files/run/t2417.scala
new file mode 100644
index 0000000000..2d0bc2d405
--- /dev/null
+++ b/test/files/run/t2417.scala
@@ -0,0 +1,77 @@
+// #2417
+object Test {
+
+ def parallel(numThreads: Int)(block: => Unit) {
+ var failure: Throwable = null
+ val threads = Array.tabulate(numThreads)(i => new Thread {
+ override def run {
+ try {
+ block
+ } catch {
+ case x => failure = x
+ }
+ }
+ })
+ for (t <- threads) t.start
+ for (t <- threads) t.join
+ if (failure != null) println("FAILURE: " + failure)
+ }
+
+ def testSet(initialSize: Int, numThreads: Int, passes: Int) {
+ val orig = Set.empty ++ (1 to initialSize)
+ parallel(numThreads) {
+ for (pass <- 0 until passes) {
+ var s = orig
+ for (e <- (initialSize to 1 by -1)) {
+ s -= e
+ val obs = s.size
+ if (obs != e - 1) {
+ throw new Exception("removed e=" + e + ", size was " + obs + ", s=" + s)
+ }
+ }
+ }
+ }
+ }
+
+ def testMap(initialSize: Int, numThreads: Int, passes: Int) {
+ val orig = Map.empty ++ ((1 to initialSize) map ((_,"v")))
+ parallel(numThreads) {
+ for (pass <- 0 until passes) {
+ var m = orig
+ for (e <- (initialSize to 1 by -1)) {
+ m -= e
+ val obs = m.size
+ if (obs != e - 1) {
+ throw new Exception("removed e=" + e + ", size was " + obs + ", m=" + m)
+ }
+ }
+ }
+ }
+ }
+
+ def main(args: Array[String]) {
+ println("testing small Map that doesn't promote to HashMap...")
+ testMap(4, 2, 1000000)
+ println()
+
+ println("testing single-threaded HashMap use...")
+ testMap(5, 1, 1000000)
+ println()
+
+ println("testing HashMap.size from multiple threads...")
+ testMap(5, 2, 1000000)
+ println()
+
+ println("testing small Set that doesn't promote to HashSet...")
+ testSet(4, 2, 1000000)
+ println()
+
+ println("testing single-threaded HashSet use...")
+ testSet(5, 1, 1000000)
+ println()
+
+ println("testing HashSet.size from multiple threads...")
+ testSet(5, 2, 1000000)
+ println()
+ }
+}
diff --git a/test/files/run/t2503.scala b/test/files/run/t2503.scala
index 353a1dcac8..21801e2dbd 100755
--- a/test/files/run/t2503.scala
+++ b/test/files/run/t2503.scala
@@ -13,7 +13,7 @@ trait SB[A] extends Buffer[A] {
}
}
-object Test extends Application {
+object Test extends App {
new ArrayBuffer[Int] with SB[Int]
}
diff --git a/test/files/run/t2512.scala b/test/files/run/t2512.scala
new file mode 100644
index 0000000000..de20af5e72
--- /dev/null
+++ b/test/files/run/t2512.scala
@@ -0,0 +1,13 @@
+import scala.tools.nsc.util.HashSet
+
+object Test {
+ val runs = 10000
+ class Bop
+
+ def main(args: Array[String]): Unit = {
+ val set: HashSet[Bop] = HashSet("Bop", 16)
+ (1 to runs).toList foreach (_ => set addEntry new Bop)
+
+ assert(runs == set.size && set.size == set.iterator.length)
+ }
+}
diff --git a/test/files/run/t2514.scala b/test/files/run/t2514.scala
new file mode 100644
index 0000000000..21c4afb472
--- /dev/null
+++ b/test/files/run/t2514.scala
@@ -0,0 +1,15 @@
+object Test
+{
+ implicit def x[A](a: A) = new { def xx = a }
+
+ def main(args: Array[String]): Unit = {
+ val r1 = 12 xx;
+ val r2 = 12.xx
+ val r3 = 12.`xx`
+ val r4 = 12.xx + 12.xx
+ val r5 = 12.`xx` + 12.xx
+ val r6 = 12.3.`xx` + 12.xx
+
+ assert(r5 == 24)
+ }
+} \ No newline at end of file
diff --git a/test/files/run/t2526.scala b/test/files/run/t2526.scala
new file mode 100644
index 0000000000..d37185535f
--- /dev/null
+++ b/test/files/run/t2526.scala
@@ -0,0 +1,53 @@
+/**
+ * Checks that various foreach methods overridden in mutable.HashMap as part of ticket #2526
+ * still work correctly.
+ */
+object Test {
+ import collection._
+
+ def main(args: Array[String]) {
+ val m = new mutable.HashMap[String, String]
+
+ /* Use non hash-based structure for verification */
+ val keys = List("a", "b", "c", "d", "e")
+ val valueSuffix = "value"
+ val values = keys.map(_ + valueSuffix)
+ val entries = keys.zip(values)
+
+ for (k <- keys) m(k) = k + valueSuffix
+
+ assertForeach(keys, m.keySet.iterator)
+ assertForeach(keys, m.keysIterator)
+ assertForeach(keys, m.keySet)
+
+ assertForeach(values, m.values.iterator)
+ assertForeach(values, m.valuesIterator)
+
+ assertForeach(entries, m)
+ }
+
+ /* Checks foreach of `actual` goes over all the elements in `expected` */
+ private def assertForeach[E](expected: Traversable[E], actual: Iterator[E]): Unit = {
+ val notYetFound = new mutable.ArrayBuffer[E]() ++= expected
+ actual.foreach { e =>
+ assert(notYetFound.contains(e))
+ notYetFound -= e
+ }
+ assert(notYetFound.size == 0, "mutable.HashMap.foreach should have iterated over: " + notYetFound)
+ }
+
+ /*
+ * Checks foreach of `actual` goes over all the elements in `expected`
+ * We duplicate the method above because there is no common inteface between Traversable and
+ * Iterator and we want to avoid converting between collections to ensure that we test what
+ * we mean to test.
+ */
+ private def assertForeach[E](expected: Traversable[E], actual: Traversable[E]): Unit = {
+ val notYetFound = new mutable.ArrayBuffer[E]() ++= expected
+ actual.foreach { e =>
+ assert(notYetFound.contains(e))
+ notYetFound -= e
+ }
+ assert(notYetFound.size == 0, "mutable.HashMap.foreach should have iterated over: " + notYetFound)
+ }
+}
diff --git a/test/files/run/t2552.check b/test/files/run/t2552.check
new file mode 100644
index 0000000000..1deeae772f
--- /dev/null
+++ b/test/files/run/t2552.check
@@ -0,0 +1,48 @@
+p(0)
+0
+p(1)
+1
+p(2)
+2
+p(3)
+3
+p(4)
+4
+p(5)
+5
+p(6)
+6
+p(7)
+7
+p(8)
+8
+p(9)
+9
+p(10)
+p(0)
+true
+true
+0
+p(1)
+true
+1
+p(2)
+false
+false
+p(0)
+true
+true
+0
+p(1)
+p(2)
+2
+p(3)
+p(4)
+4
+p(5)
+p(6)
+6
+p(7)
+p(8)
+8
+p(9)
diff --git a/test/files/run/t2552.scala b/test/files/run/t2552.scala
new file mode 100644
index 0000000000..17dcac596b
--- /dev/null
+++ b/test/files/run/t2552.scala
@@ -0,0 +1,34 @@
+object Test extends App {
+ def testTakeWhile = {
+ val numbers = Iterator.range(0, 50)
+ val zeroTo9 = numbers.takeWhile(x => { println("p(" + x + ")"); x < 10 } )
+
+ zeroTo9.foreach(println _)
+
+ val zeroTo1 = Iterator.range(0, 20).takeWhile(x => { println("p(" + x + ")"); x < 2 } )
+
+ println(zeroTo1.hasNext)
+ println(zeroTo1.hasNext)
+ println(zeroTo1.next)
+ println(zeroTo1.hasNext)
+ println(zeroTo1.next)
+ println(zeroTo1.hasNext)
+ println(zeroTo1.hasNext)
+ }
+
+ def testFilter = {
+ val predicate = (x: Int) => { println("p(" + x + ")"); x % 2 == 0 }
+
+ val evens = Iterator.range(0, 10).filter(predicate)
+
+ println(evens.hasNext)
+ println(evens.hasNext)
+ println(evens.next)
+
+ evens.foreach(println _)
+ }
+
+ testTakeWhile
+ testFilter
+}
+
diff --git a/test/files/run/t2594_tcpoly.check b/test/files/run/t2594_tcpoly.check
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/test/files/run/t2594_tcpoly.check
diff --git a/test/files/run/t2594_tcpoly.scala b/test/files/run/t2594_tcpoly.scala
new file mode 100644
index 0000000000..e759ca8b0f
--- /dev/null
+++ b/test/files/run/t2594_tcpoly.scala
@@ -0,0 +1,18 @@
+trait Monad[M[_]] {
+ def foo[A](a: M[A]): M[A]
+}
+
+class Bar[A, B]
+class Bar1[A] { type And[B] = Bar[A, B] }
+
+object Test {
+ // the combination of partial applications and anonymous class is essential to reproduce the bug
+ // problem: missing bridge method
+ // --> abstractmethoderror `Main$$anon$1.foo(Ljava/lang/Object;)Ljava/lang/Object;`
+ // the anonymous class only gets `public Bar foo(Bar a)`
+ def BarMonad[X] = new Monad[Bar1[X]#And] {
+ def foo[A](a: Bar[X, A]) = a
+ }
+
+ def main(as: Array[String]) { BarMonad[Int] foo (new Bar[Int, Int]) }
+} \ No newline at end of file
diff --git a/test/files/run/t2636.scala b/test/files/run/t2636.scala
new file mode 100644
index 0000000000..3271f79ffc
--- /dev/null
+++ b/test/files/run/t2636.scala
@@ -0,0 +1,35 @@
+object Test
+{
+ type Foo = { def update(x: Int, value: String): Unit }
+ type Foo2 = { def update(x: Int, value: String): Int }
+ type Foo3 = { def update(x: Int, value: String): Array[Int] }
+
+ def alen() = {
+ type L1 = { def length: Int }
+ def len(p: L1) = p.length
+ val x: L1 = Array(1,2,3)
+ len(x)
+ }
+
+ type A1 = { def apply(x: Int): String }
+ def arrApply(a: A1, x: Int) = a(x)
+
+ def main(args: Array[String]): Unit = {
+ val arr = new Array[String](3)
+ val p1: Foo = arr
+ def a1 = p1(0) = "b"
+
+ val p2: Foo2 = new { def update(x: Int, value: String) = { p1(1) = "o" ; 1 } }
+ def a2 = p2(0) = "c"
+
+ val p3: Foo3 = new { def update(x: Int, value: String) = { p1(2) = "b" ; Array(1) } }
+ def a3 = p3(10) = "hi mom"
+
+ a1 ; a2 ; a3 ;
+
+ assert(arr.mkString == "bob")
+ assert(alen() == 3)
+ assert(arrApply(arr, 1) == "o")
+ assert(arrApply(new { def apply(x: Int) = "tom" }, -100) == "tom")
+ }
+} \ No newline at end of file
diff --git a/test/files/run/t266.scala b/test/files/run/t266.scala
new file mode 100644
index 0000000000..1fd6dab185
--- /dev/null
+++ b/test/files/run/t266.scala
@@ -0,0 +1,23 @@
+// #266, yee ha
+
+trait O {
+ self: Test.type =>
+
+ Nil foreach identity
+
+ def f = (1 to 10).toList map identity
+}
+
+object Test extends O {
+ def main(args: Array[String]): Unit = {
+ assert(f.sum == 55)
+ }
+}
+
+// Don't lose this part, it's what (formerly) crashes.
+// For some reason the one actually mixed in does not.
+object Pip
+
+trait P { self: Pip.type =>
+ Nil foreach identity
+} \ No newline at end of file
diff --git a/test/files/run/t2721.check b/test/files/run/t2721.check
new file mode 100644
index 0000000000..2bd7656b36
--- /dev/null
+++ b/test/files/run/t2721.check
@@ -0,0 +1,2 @@
+root:-rootVal-sub:-subVal-
+root:-rootVal-sub:-subVal-
diff --git a/test/files/run/t2721.scala b/test/files/run/t2721.scala
new file mode 100644
index 0000000000..93af884a60
--- /dev/null
+++ b/test/files/run/t2721.scala
@@ -0,0 +1,12 @@
+object Test
+{
+ val xml1 = <root xmlns:ns="nsUri" ns:at="rootVal"><sub ns:at="subVal"/></root>
+ val xml2= scala.xml.XML.loadString("""<root xmlns:ns="nsUri" ns:at="rootVal"><sub ns:at="subVal"/></root>""")
+
+ def backslashSearch(x: xml.Elem) = "root:-"+(x \ "@{nsUri}at") +"-sub:-"+(x \ "sub" \ "@{nsUri}at") +"-"
+
+ def main(args: Array[String]): Unit = {
+ println(backslashSearch(xml1))
+ println(backslashSearch(xml2))
+ }
+}
diff --git a/test/files/run/t2754.scala b/test/files/run/t2754.scala
new file mode 100644
index 0000000000..aeb5259dab
--- /dev/null
+++ b/test/files/run/t2754.scala
@@ -0,0 +1,39 @@
+object Test {
+ def main(args: Array[String]) {
+ val v: FooBarPlus[Int] = new FooBarPlusImpl()
+ v.foo += 10
+ }
+}
+
+trait Foo[P] {
+ def foo: P
+}
+
+trait FooBar[P] extends Foo[P] {
+ def bar: P
+}
+
+trait FooBarPlus[P] extends FooBar[P] {
+ override def foo: P
+ override def bar: P
+
+ def foo_=(x: P)
+ def bar_=(x: P)
+}
+
+class FooImpl extends Foo[Int] {
+ def foo = 1
+}
+
+class FooBarImpl extends FooImpl with FooBar[Int] {
+ protected var f = 0
+ protected var b = 0
+
+ override def foo = f
+ def bar = b
+}
+
+class FooBarPlusImpl extends FooBarImpl with FooBarPlus[Int] {
+ def foo_=(x: Int) { f = x }
+ def bar_=(x: Int) { b = x }
+}
diff --git a/test/files/run/t2755.check b/test/files/run/t2755.check
new file mode 100644
index 0000000000..4905c0052d
--- /dev/null
+++ b/test/files/run/t2755.check
@@ -0,0 +1,21 @@
+1
+2
+3
+4
+5
+6
+7
+1
+2
+3
+4
+5
+6
+7
+1
+2
+3
+4
+5
+6
+7
diff --git a/test/files/run/t2755.scala b/test/files/run/t2755.scala
new file mode 100644
index 0000000000..c279ecc24e
--- /dev/null
+++ b/test/files/run/t2755.scala
@@ -0,0 +1,58 @@
+// Test cases: the only place we can cut and paste without crying
+// ourself to sleep.
+object Test {
+ def f1(a: Any) = a match {
+ case x: Array[Int] => x(0)
+ case x: Array[Double] => 2
+ case x: Array[Float] => x.sum.toInt
+ case x: Array[String] => x.size
+ case x: Array[AnyRef] => 5
+ case x: Array[_] => 6
+ case _ => 7
+ }
+ def f2(a: Array[_]) = a match {
+ case x: Array[Int] => x(0)
+ case x: Array[Double] => 2
+ case x: Array[Float] => x.sum.toInt
+ case x: Array[String] => x.size
+ case x: Array[AnyRef] => 5
+ case x: Array[_] => 6
+ case _ => 7
+ }
+ def f3[T](a: Array[T]) = a match {
+ case x: Array[Int] => x(0)
+ case x: Array[Double] => 2
+ case x: Array[Float] => x.sum.toInt
+ case x: Array[String] => x.size
+ case x: Array[AnyRef] => 5
+ case x: Array[_] => 6
+ case _ => 7
+ }
+
+
+ def main(args: Array[String]): Unit = {
+ println(f1(Array(1, 2, 3)))
+ println(f1(Array(1.0, -2.0, 3.0, 1.0)))
+ println(f1(Array(1.0f, 2.0f, 3.0f, -3.0f)))
+ println(f1((1 to 4).toArray map (_.toString)))
+ println(f1(new Array[Any](10))) // should match as Array[AnyRef]
+ println(f1(Array(1L)))
+ println(f1(null))
+
+ println(f2(Array(1, 2, 3)))
+ println(f2(Array(1.0, -2.0, 3.0, 1.0)))
+ println(f2(Array(1.0f, 2.0f, 3.0f, -3.0f)))
+ println(f2((1 to 4).toArray map (_.toString)))
+ println(f2(new Array[Any](10))) // should match as Array[AnyRef]
+ println(f2(Array(1L)))
+ println(f2(null))
+
+ println(f3(Array(1, 2, 3)))
+ println(f3(Array(1.0, -2.0, 3.0, 1.0)))
+ println(f3(Array(1.0f, 2.0f, 3.0f, -3.0f)))
+ println(f3((1 to 4).toArray map (_.toString)))
+ println(f3(new Array[Any](10))) // should match as Array[AnyRef]
+ println(f3(Array(1L)))
+ println(f3(null))
+ }
+}
diff --git a/test/files/run/t2788.check b/test/files/run/t2788.check
new file mode 100644
index 0000000000..684f5f616c
--- /dev/null
+++ b/test/files/run/t2788.check
@@ -0,0 +1 @@
+List(1, 2) \ No newline at end of file
diff --git a/test/files/run/t2788.scala b/test/files/run/t2788.scala
new file mode 100644
index 0000000000..b1596d5823
--- /dev/null
+++ b/test/files/run/t2788.scala
@@ -0,0 +1,3 @@
+object Test extends App {
+ println(Array(Some(1), None, Some(2)).flatten.toList)
+}
diff --git a/test/files/run/t2800.check b/test/files/run/t2800.check
new file mode 100644
index 0000000000..546ee52413
--- /dev/null
+++ b/test/files/run/t2800.check
@@ -0,0 +1,14 @@
+false
+false
+List()
+false
+false
+false
+false
+Vector(1)
+false
+false
+true
+false
+false
+false
diff --git a/test/files/run/t2800.scala b/test/files/run/t2800.scala
new file mode 100644
index 0000000000..cc6fb30bbc
--- /dev/null
+++ b/test/files/run/t2800.scala
@@ -0,0 +1,36 @@
+object Test {
+ def f1 = ("": Any) match { case List(x @ _*) => x ; case _ => false }
+ def f2 = (5: Any) match { case List(x @ _*) => x ; case _ => false }
+ def f3 = (Nil: Any) match { case List(x @ _*) => x ; case _ => false }
+ def f4 = (Array(1): Any) match { case List(x @ _*) => x ; case _ => false }
+
+ def f5 = ("": Any) match { case Array(x @ _*) => x ; case _ => false }
+ def f6 = (5: Any) match { case Array(x @ _*) => x ; case _ => false }
+ def f7 = (Nil: Any) match { case Array(x @ _*) => x ; case _ => false }
+ def f8 = (Array(1): Any) match { case Array(x @ _*) => x ; case _ => false }
+
+ def f9 = ("": Any) match { case x @ List(_*) => x ; case _ => false }
+ def f10 = ("": Any) match { case List(_*) => true ; case _ => false }
+ def f11 = (Nil: Any) match { case List(_*) => true ; case _ => false }
+ def f12 = ("": Any) match { case x @ Array(_*) => x ; case _ => false }
+ def f13 = ("": Any) match { case Array(_*) => true ; case _ => false }
+ def f14 = (Nil: Any) match { case Array(_*) => true ; case _ => false }
+
+
+ def main(args: Array[String]): Unit = {
+ println(f1)
+ println(f2)
+ println(f3)
+ println(f4)
+ println(f5)
+ println(f6)
+ println(f7)
+ println(f8)
+ println(f9)
+ println(f10)
+ println(f11)
+ println(f12)
+ println(f13)
+ println(f14)
+ }
+}
diff --git a/test/files/run/t2813.2.scala b/test/files/run/t2813.2.scala
new file mode 100644
index 0000000000..f41f6451f4
--- /dev/null
+++ b/test/files/run/t2813.2.scala
@@ -0,0 +1,39 @@
+import java.util.LinkedList
+import collection.JavaConversions._
+
+object Test extends App {
+ def assertListEquals[A](expected: List[A], actual: Seq[A]) {
+ assert(expected.sameElements(actual),
+ "Expected list to contain " + expected.mkString("[", ", ", "]") +
+ ", but was " + actual.mkString("[", ", ", "]"))
+ }
+
+ def addAllOfNonCollectionWrapperAtZeroOnEmptyLinkedList() {
+ val l = new LinkedList[Int]
+ l.addAll(0, List(1, 2))
+ assertListEquals(List(1, 2), l)
+ }
+
+ def addAllOfNonCollectionWrapperAtZeroOnLinkedList() {
+ val l = new LinkedList[Int] += 1 += 2
+ l.addAll(0, List(10, 11))
+ assertListEquals((List(10, 11, 1, 2)), l)
+ }
+
+ def addAllOfCollectionWrapperAtZeroOnLinkedList() {
+ val l = new LinkedList[Int] += 1 += 2
+ l.addAll(0, new LinkedList[Int] += 10 += 11)
+ assertListEquals((List(10, 11, 1, 2)), l)
+ }
+
+ def addAllOfCollectionWrapperAtZeroOnEmptyLinkedList() {
+ val l = new LinkedList[Int]
+ l.addAll(0, new LinkedList[Int] += 10 += 11)
+ assertListEquals((List(10, 11)), l)
+ }
+
+ addAllOfNonCollectionWrapperAtZeroOnEmptyLinkedList
+ addAllOfNonCollectionWrapperAtZeroOnLinkedList
+ addAllOfCollectionWrapperAtZeroOnEmptyLinkedList
+ addAllOfCollectionWrapperAtZeroOnLinkedList
+}
diff --git a/test/files/run/t2849.scala b/test/files/run/t2849.scala
new file mode 100644
index 0000000000..0995f64010
--- /dev/null
+++ b/test/files/run/t2849.scala
@@ -0,0 +1,48 @@
+import scala.collection.immutable.SortedSet
+import scala.collection.immutable.TreeSet
+
+object Test {
+
+ def main(args: Array[String]) {
+ ticketExample
+ similarExample
+ }
+
+ //def freeMBytes = Runtime.getRuntime.freeMemory / 1048576
+ def totalMBytes = Runtime.getRuntime.totalMemory / 1048576
+
+ val N = if (totalMBytes > 1000) 10000 else 4000
+ val M = N / 10
+
+ def ticketExample {
+ var big = 100000
+
+ var aSortedSet: SortedSet[Int] = TreeSet(big)
+
+ for (i <- 1 until N) {
+ aSortedSet = (aSortedSet - big) ++ (TreeSet(i, big - 1))
+ big -= 1
+ if (i % M == 0) {
+ //println("big: "+big+", free memory: "+freeMBytes)
+ aSortedSet.until(i)
+ }
+ }
+ }
+
+ def similarExample {
+ var big = 100
+
+ var aSortedSet: SortedSet[Int] = TreeSet(big)
+
+ for (i <- 1 until N) {
+ aSortedSet = (aSortedSet - big) ++ (TreeSet(i, big - 1)) + big
+ big -= 1
+ if (i % M == 0) {
+ aSortedSet.until(i)
+ }
+ }
+ }
+
+}
+
+
diff --git a/test/files/run/t2857.check b/test/files/run/t2857.check
new file mode 100644
index 0000000000..c508d5366f
--- /dev/null
+++ b/test/files/run/t2857.check
@@ -0,0 +1 @@
+false
diff --git a/test/files/run/t2857.scala b/test/files/run/t2857.scala
new file mode 100644
index 0000000000..c523227c4f
--- /dev/null
+++ b/test/files/run/t2857.scala
@@ -0,0 +1,9 @@
+object Test extends App {
+ import collection.mutable._
+ val m = new HashMap[Int, Set[String]] with MultiMap[Int, String]
+ m.addBinding(6, "Foo")
+ m.removeBinding(6, "Foo")
+ println(m.contains(6))
+}
+
+
diff --git a/test/files/run/t2867.scala b/test/files/run/t2867.scala
new file mode 100644
index 0000000000..0d30f95f8d
--- /dev/null
+++ b/test/files/run/t2867.scala
@@ -0,0 +1,15 @@
+object Test {
+ case class A(l: List[_]*)
+
+ def main(args: Array[String]): Unit = {
+ /** Kind of sneaking a slightly different test in here as well as
+ * testing 2867. How subversive.
+ */
+ val xs1 = List(1, 2, 3)
+ val xs2 = List(1.0, 2.0, 3.0)
+ val xs3 = List[Any](1.0f, 2.0f, 3.0f)
+ val xs4 = List[Byte](1, 2, 3)
+
+ assert(A(List(xs1, xs2)) == A(List(xs3, xs4)))
+ }
+}
diff --git a/test/files/run/t2873.check b/test/files/run/t2873.check
new file mode 100644
index 0000000000..9198280f61
--- /dev/null
+++ b/test/files/run/t2873.check
@@ -0,0 +1 @@
+scala.collection.immutable.RedBlack<A>.Empty$
diff --git a/test/files/run/t2873.scala b/test/files/run/t2873.scala
new file mode 100644
index 0000000000..8d48a8dbb4
--- /dev/null
+++ b/test/files/run/t2873.scala
@@ -0,0 +1,5 @@
+object Test {
+ def main(args: Array[String]): Unit = {
+ println(classOf[scala.collection.immutable.RedBlack[_]].getMethod("Empty").getGenericReturnType)
+ }
+}
diff --git a/test/files/run/t2876.scala b/test/files/run/t2876.scala
new file mode 100644
index 0000000000..f71879ebff
--- /dev/null
+++ b/test/files/run/t2876.scala
@@ -0,0 +1,7 @@
+object Test
+{
+ def main(args: Array[String]): Unit = {
+ "x".view.filter(_ => true).take(1)
+ }
+}
+
diff --git a/test/files/run/t2886.check b/test/files/run/t2886.check
new file mode 100644
index 0000000000..5fe1e73a45
--- /dev/null
+++ b/test/files/run/t2886.check
@@ -0,0 +1,5 @@
+((x: scala.Predef.String) => {
+ val x$1 = x;
+ val x$2 = x;
+ Test.test(x$2, x$1)
+})
diff --git a/test/files/run/t2958.scala b/test/files/run/t2958.scala
new file mode 100644
index 0000000000..b9563a1b77
--- /dev/null
+++ b/test/files/run/t2958.scala
@@ -0,0 +1,16 @@
+object Test {
+ def f(args: Array[String]) = args match {
+ case Array("-p", prefix, from, to) =>
+ prefix + from + to
+
+ case Array(from, to) =>
+ from + to
+
+ case _ =>
+ "default"
+ }
+
+ def main(args: Array[String]) {
+ assert(f(Array("1", "2")) == "12")
+ }
+} \ No newline at end of file
diff --git a/test/files/run/bug298.check b/test/files/run/t298.check
index 1cd1d2266c..1cd1d2266c 100644
--- a/test/files/run/bug298.check
+++ b/test/files/run/t298.check
diff --git a/test/files/run/t298.scala b/test/files/run/t298.scala
new file mode 100644
index 0000000000..bfc219ec5a
--- /dev/null
+++ b/test/files/run/t298.scala
@@ -0,0 +1,17 @@
+object Test extends App {
+ implicit def anyList[T]: List[T] = Nil
+
+ implicit def intList: List[Int] = 42::24::Nil
+
+ def foo[T](implicit x: T) = x
+
+ val s = foo[List[Int]]
+
+ println(s) // correct - prints "List(42, 24)"
+
+ implicit def tupleList[T](implicit t: List[T]): List[(T,T)] = t.map(x => (x,x))
+
+ val t = foo[List[Tuple2[Int,Int]]]
+
+ println(t) // incorrect - prints "List()"
+}
diff --git a/test/files/run/t3004.scala b/test/files/run/t3004.scala
new file mode 100644
index 0000000000..a1e9c6c72f
--- /dev/null
+++ b/test/files/run/t3004.scala
@@ -0,0 +1,14 @@
+object MyClass {
+ val duplicate: Int = 10
+}
+
+class MyClass {
+ private val duplicate = MyClass.duplicate
+}
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ val x = new MyClass
+ ()
+ }
+}
diff --git a/test/files/run/t3026.check b/test/files/run/t3026.check
new file mode 100644
index 0000000000..8c29b615fa
--- /dev/null
+++ b/test/files/run/t3026.check
@@ -0,0 +1,2 @@
+RED
+YELLOW
diff --git a/test/files/run/t3026.scala b/test/files/run/t3026.scala
new file mode 100755
index 0000000000..0231c7bcd1
--- /dev/null
+++ b/test/files/run/t3026.scala
@@ -0,0 +1,8 @@
+object Test {
+ abstract class Colour
+ case object RED extends Colour
+ case object YELLOW extends Colour
+ val items = Array(RED, YELLOW)
+
+ def main(args: Array[String]): Unit = items foreach println
+}
diff --git a/test/files/run/t3038.check b/test/files/run/t3038.check
new file mode 100644
index 0000000000..9a325c4c18
--- /dev/null
+++ b/test/files/run/t3038.check
@@ -0,0 +1,19 @@
+a1
+a2
+a3
+a4
+a5
+a6
+a7
+a8
+a9
+c1
+c2
+c3
+c4
+c5
+c6
+c7
+c8
+c9
+c10
diff --git a/test/files/run/t3038.scala b/test/files/run/t3038.scala
new file mode 100644
index 0000000000..986fc982e7
--- /dev/null
+++ b/test/files/run/t3038.scala
@@ -0,0 +1,68 @@
+class A {
+ private lazy val a1 = "a1"
+ object B
+ private lazy val a2 = "a2"
+
+
+ @transient lazy val a3 = "a3"
+ @transient private lazy val a4 = "a4"
+ @transient lazy val a5 = "a5"
+ @transient private lazy val a6 = "a6"
+
+ final val a7 = "a7"
+ private final val a8 = "a8"
+ @transient final val a9 = "a9"
+
+
+
+
+ def run = {
+ println(a1)
+ B
+ println(a2)
+ println(a3)
+ println(a4)
+ println(a5)
+ println(a6)
+ println(a7)
+ println(a8)
+ println(a9)
+ }
+}
+
+class C extends A {
+ private lazy val c1 = "c1"
+ lazy val c2 = "c2"
+
+ private lazy val c3 = "c3"
+
+ @transient lazy val c4 = "c4"
+ @transient private lazy val c5 = "c5"
+ @transient lazy val c6 = "c6"
+ @transient private lazy val c7 = "c7"
+ lazy val c8 = "c8"
+
+ final val c9 = "c9"
+ private final val c10 = "c10"
+
+
+
+ override def run = {
+ super.run
+ println(c1)
+ println(c2)
+ println(c3)
+ println(c4)
+ println(c5)
+ println(c6)
+ println(c7)
+ println(c8)
+ println(c9)
+ println(c10)
+ }
+}
+
+object Test extends App {
+ (new C).run
+}
+
diff --git a/test/files/run/t3038b.check b/test/files/run/t3038b.check
new file mode 100644
index 0000000000..cf0389a5af
--- /dev/null
+++ b/test/files/run/t3038b.check
@@ -0,0 +1,6 @@
+1
+2
+3
+4
+5
+6 \ No newline at end of file
diff --git a/test/files/run/t3038b.flags b/test/files/run/t3038b.flags
new file mode 100644
index 0000000000..ae08446055
--- /dev/null
+++ b/test/files/run/t3038b.flags
@@ -0,0 +1 @@
+-Xcheckinit \ No newline at end of file
diff --git a/test/files/run/t3038b.scala b/test/files/run/t3038b.scala
new file mode 100644
index 0000000000..1527d64ebc
--- /dev/null
+++ b/test/files/run/t3038b.scala
@@ -0,0 +1,20 @@
+class A {
+ val a1 = 1
+ val a2 = 2
+ private val b1 = 3
+ private val b2 = 4
+ @transient val c1 = 5
+ @transient val c2 = 6
+ def run = {
+ println(a1)
+ println(a2)
+ println(b1)
+ println(b2)
+ println(c1)
+ println(c2)
+ }
+}
+
+object Test extends App {
+ new A().run
+}
diff --git a/test/files/run/t3038c.check b/test/files/run/t3038c.check
new file mode 100644
index 0000000000..a7e7ae9bda
--- /dev/null
+++ b/test/files/run/t3038c.check
@@ -0,0 +1,2 @@
+List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70)
+List(71, 72, 73, 74, 75, 76, 77, 78, 79, 80)
diff --git a/test/files/run/t3038c/A_1.scala b/test/files/run/t3038c/A_1.scala
new file mode 100644
index 0000000000..14579fcf67
--- /dev/null
+++ b/test/files/run/t3038c/A_1.scala
@@ -0,0 +1,83 @@
+class A {
+ lazy val a0 = 1
+ lazy val a1 = 2
+ lazy val a2 = 3
+ lazy val a3 = 4
+ lazy val a4 = 5
+ lazy val a5 = 6
+ lazy val a6 = 7
+ lazy val a7 = 8
+ lazy val a8 = 9
+ lazy val a9 = 10
+ lazy val a10 = 11
+ lazy val a11 = 12
+ lazy val a12 = 13
+ lazy val a13 = 14
+ lazy val a14 = 15
+ lazy val a15 = 16
+ lazy val a16 = 17
+ lazy val a17 = 18
+ lazy val a18 = 19
+ lazy val a19 = 20
+ lazy val a20 = 21
+ lazy val a21 = 22
+ lazy val a22 = 23
+ lazy val a23 = 24
+ lazy val a24 = 25
+ lazy val a25 = 26
+ lazy val a26 = 27
+ lazy val a27 = 28
+ lazy val a28 = 29
+ lazy val a29 = 30
+ lazy val a30 = 31
+ lazy val a31 = 32
+ lazy val a32 = 33
+ lazy val a33 = 34
+ lazy val a34 = 35
+ lazy val a35 = 36
+ lazy val a36 = 37
+ lazy val a37 = 38
+ lazy val a38 = 39
+ lazy val a39 = 40
+ lazy val a40 = 41
+ lazy val a41 = 42
+ lazy val a42 = 43
+ lazy val a43 = 44
+ lazy val a44 = 45
+ lazy val a45 = 46
+ lazy val a46 = 47
+ lazy val a47 = 48
+ lazy val a48 = 49
+ lazy val a49 = 50
+ lazy val a50 = 51
+ lazy val a51 = 52
+ lazy val a52 = 53
+ lazy val a53 = 54
+ lazy val a54 = 55
+ lazy val a55 = 56
+ lazy val a56 = 57
+ lazy val a57 = 58
+ lazy val a58 = 59
+ lazy val a59 = 60
+ private lazy val a60 = 61
+ private lazy val a61 = 62
+ private lazy val a62 = 63
+ private lazy val a63 = 64
+ private lazy val a64 = 65
+ private lazy val a65 = 66
+ private lazy val a66 = 67
+ private lazy val a67 = 68
+ private lazy val a68 = 69
+ private lazy val a69 = 70
+
+ def run = {
+ println(List(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9,
+ a10, a11, a12, a13, a14, a15, a16, a17, a18, a19,
+ a20, a21, a22, a23, a24, a25, a26, a27, a28, a29,
+ a30, a31, a32, a33, a34, a35, a36, a37, a38, a39,
+ a40, a41, a42, a43, a44, a45, a46, a47, a48, a49,
+ a50, a51, a52, a53, a54, a55, a56, a57, a58, a59,
+ a60, a61, a62, a63, a64, a65, a66, a67, a68, a69))
+ }
+
+}
diff --git a/test/files/run/t3038c/B_2.scala b/test/files/run/t3038c/B_2.scala
new file mode 100644
index 0000000000..81f3f8d481
--- /dev/null
+++ b/test/files/run/t3038c/B_2.scala
@@ -0,0 +1,24 @@
+
+class B extends A {
+ lazy val b0 = 71
+ lazy val b1 = 72
+ lazy val b2 = 73
+ lazy val b3 = 74
+ lazy val b4 = 75
+ lazy val b5 = 76
+ lazy val b6 = 77
+ lazy val b7 = 78
+ lazy val b8 = 79
+ lazy val b9 = 80
+ override def run = {
+ super.run
+ println(List(b0, b1, b2, b3, b4, b5, b6, b7, b8, b9))
+ }
+
+}
+
+object Test {
+ def main(args: Array[String]) {
+ new B().run
+ }
+}
diff --git a/test/files/run/t3038d.flags b/test/files/run/t3038d.flags
new file mode 100644
index 0000000000..ae08446055
--- /dev/null
+++ b/test/files/run/t3038d.flags
@@ -0,0 +1 @@
+-Xcheckinit \ No newline at end of file
diff --git a/test/files/run/t3038d.scala b/test/files/run/t3038d.scala
new file mode 100644
index 0000000000..6cd2d83776
--- /dev/null
+++ b/test/files/run/t3038d.scala
@@ -0,0 +1,60 @@
+trait Foo {
+ @transient protected var load = 1
+ @transient protected var a = 12
+
+ protected def init[B](in: java.io.ObjectInputStream) {
+ in.defaultReadObject
+ load = in.readInt
+ val sizea = in.readInt
+ a = 12
+ }
+
+ protected def serializeTo(out: java.io.ObjectOutputStream) {
+ out.defaultWriteObject
+ out.writeInt(load)
+ out.writeInt(a)
+ }
+}
+
+
+@serializable
+class Bar extends Foo {
+ @transient protected var first: Any = null
+ def size = a
+ @transient var second: Any = null
+
+ def checkMember { first }
+
+ private def writeObject(out: java.io.ObjectOutputStream) {
+ serializeTo(out)
+ }
+
+ private def readObject(in: java.io.ObjectInputStream) {
+ first = null
+ init(in)
+ }
+}
+
+object Test {
+ private def toObject[A](bytes: Array[Byte]): A = {
+ val in = new java.io.ObjectInputStream(new java.io.ByteArrayInputStream(bytes))
+ in.readObject.asInstanceOf[A]
+ }
+
+ private def toBytes(o: AnyRef): Array[Byte] = {
+ val bos = new java.io.ByteArrayOutputStream
+ val out = new java.io.ObjectOutputStream(bos)
+ out.writeObject(o)
+ out.close
+ bos.toByteArray
+ }
+
+
+ def main(args: Array[String]) {
+ val a1 = new Bar()
+ val serialized:Array[Byte] = toBytes(a1)
+ val deserialized: Bar = toObject(serialized)
+ deserialized.size
+ deserialized.checkMember
+ }
+}
diff --git a/test/files/run/t3050.scala b/test/files/run/t3050.scala
new file mode 100644
index 0000000000..ca9d91e191
--- /dev/null
+++ b/test/files/run/t3050.scala
@@ -0,0 +1,9 @@
+object Test {
+ def main(args: Array[String]): Unit = {
+ val x =
+ try { ("": Any) match { case List(_*) => true } }
+ catch { case _ => false }
+
+ assert(!x)
+ }
+}
diff --git a/test/files/run/t3088.scala b/test/files/run/t3088.scala
new file mode 100644
index 0000000000..ea820b1c9c
--- /dev/null
+++ b/test/files/run/t3088.scala
@@ -0,0 +1,9 @@
+import collection.mutable._
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ val b = new ListBuffer[Int]
+ b += 1
+ b ++= b
+ }
+}
diff --git a/test/files/run/t3112.check b/test/files/run/t3112.check
new file mode 100644
index 0000000000..a95644c82c
--- /dev/null
+++ b/test/files/run/t3112.check
@@ -0,0 +1,4 @@
+Vector()
+Vector()
+Vector()
+Vector() \ No newline at end of file
diff --git a/test/files/run/t3112.scala b/test/files/run/t3112.scala
new file mode 100644
index 0000000000..88677fa09e
--- /dev/null
+++ b/test/files/run/t3112.scala
@@ -0,0 +1,11 @@
+// #3112
+object Test {
+
+ def main(args: Array[String]): Unit = {
+ println((Vector() ++ (0 until 32)) take 0) // works
+ println((Vector() ++ (0 until 33)) take 0) // error
+ println((Vector() ++ (0 until 32)) takeRight 0) // works
+ println((Vector() ++ (0 until 33)) takeRight 0) // error
+ }
+
+} \ No newline at end of file
diff --git a/test/files/run/t3126.scala b/test/files/run/t3126.scala
new file mode 100644
index 0000000000..36322bf896
--- /dev/null
+++ b/test/files/run/t3126.scala
@@ -0,0 +1,9 @@
+object Test {
+ case class C(x: Int)
+ val v: Some[Int] = null
+
+ def main(args: Array[String]): Unit = {
+ try C.unapply(null) catch { case _: MatchError => }
+ try v match { case Some(1) => } catch { case _: MatchError => }
+ }
+}
diff --git a/test/files/run/t3150.scala b/test/files/run/t3150.scala
new file mode 100644
index 0000000000..8acdb50354
--- /dev/null
+++ b/test/files/run/t3150.scala
@@ -0,0 +1,10 @@
+object Test {
+ case object Bob { override def equals(other: Any) = true }
+ def f(x: Any) = x match { case Bob => Bob }
+
+ def main(args: Array[String]): Unit = {
+ assert(f(Bob) eq Bob)
+ assert(f(0) eq Bob)
+ assert(f(Nil) eq Bob)
+ }
+}
diff --git a/test/files/run/t3158.check b/test/files/run/t3158.check
new file mode 100644
index 0000000000..ab1cb284d5
--- /dev/null
+++ b/test/files/run/t3158.check
@@ -0,0 +1 @@
+Array(<function1>)
diff --git a/test/files/run/t3158.scala b/test/files/run/t3158.scala
new file mode 100644
index 0000000000..2261b5cd81
--- /dev/null
+++ b/test/files/run/t3158.scala
@@ -0,0 +1,9 @@
+object Test {
+ def main(args: Array[String]) {
+ println(args.map(_ => foo _).deep)
+ }
+
+ def foo(xs: String*) {
+ println(xs)
+ }
+}
diff --git a/test/files/run/t3175.check b/test/files/run/t3175.check
new file mode 100644
index 0000000000..12246140f4
--- /dev/null
+++ b/test/files/run/t3175.check
@@ -0,0 +1,11 @@
+10
+15
+3
+3
+3
+5
+5
+5
+100
+jabooboo
+hi mom
diff --git a/test/files/run/t3175.scala b/test/files/run/t3175.scala
new file mode 100644
index 0000000000..aff2e67d0d
--- /dev/null
+++ b/test/files/run/t3175.scala
@@ -0,0 +1,55 @@
+/** A bit down the road this test will examine
+ * the bytecode.
+ */
+object Test {
+ def len(x:{ def length: Int }) = x.length
+ def f1(x:{ def apply(x: Int): Long }) = x(0)
+ def f2(x:{ def apply(x: Int): Byte }) = x(0)
+ def f3(x:{ def apply(x: Int): String }) = x(0).length
+
+ def f4(x:{ def update(x: Int, y: Long): Unit }, y: Long) = x(0) = y
+ def f5(x:{ def update(x: Int, y: Byte): Unit }, y: Byte) = x(0) = y
+ def f6(x:{ def update(x: Int, y: String): Unit }, y: String) = x(0) = y
+
+ def f7(x: { def length: Any }) = x.length
+
+ def f8(x: { def apply(x: Int): Any }) = x(0)
+ def f9(x: { def apply(x: Int): Int }) = x(0)
+ def f10(x: { def apply(x: Int): Long }) = x(0)
+
+ // update has some interesting special cases
+ def f11(x:{ def update(x: Int, y: Long): Any }, y: Long) = x(0) = y
+ def f12(x:{ def update(x: Int, y: String): AnyVal }, y: String) = x(0) = y
+ def f13(x:{ def update(x: Int, y: String): AnyRef }, y: String) = x(0) = y
+
+ // doesn't work yet, see #3197
+ // def fclone(x:{ def clone(): AnyRef }) = x.clone()
+
+ def main(args: Array[String]): Unit = {
+ val longs = Array(5L)
+ val bytes = Array(5: Byte)
+ val strs = Array("abcde", "fghjij")
+
+ println(len(Array(1,2,3)) + len(Array(4.0,5.0f)) + len(Array("abc", 5)) + len("bop"))
+ println(f1(longs) + f2(bytes) + f3(strs))
+
+ f4(longs, 1)
+ f5(bytes, 1)
+ f6(strs, "a")
+
+ println(f1(longs) + f2(bytes) + f3(strs))
+
+ println(f7(Array(1,2,3)))
+ println(f7("def"))
+
+ println(f8(Array(5)))
+ println(f9(Array(5)))
+ println(f10(Array(5)))
+
+ f11(longs, 100L)
+ f12(strs, "jabooboo")
+ println(longs(0))
+ println(strs(0))
+ f13(new { def update(x: Int, y: String): List[Int] = { println("hi mom") ; Nil } }, "irrelevant")
+ }
+}
diff --git a/test/files/run/t3186.check b/test/files/run/t3186.check
new file mode 100644
index 0000000000..c508d5366f
--- /dev/null
+++ b/test/files/run/t3186.check
@@ -0,0 +1 @@
+false
diff --git a/test/files/run/t3186.scala b/test/files/run/t3186.scala
new file mode 100644
index 0000000000..09de1a5ce0
--- /dev/null
+++ b/test/files/run/t3186.scala
@@ -0,0 +1,7 @@
+object Dist1 extends Enumeration { val Mile, Foot, Inch = Value }
+
+object Dist2 extends Enumeration { val Kilometer, Millimeter, Parsec = Value }
+
+object Test extends App {
+ println(Dist1.Mile == Dist2.Kilometer)
+}
diff --git a/test/files/run/t3232.scala b/test/files/run/t3232.scala
new file mode 100644
index 0000000000..feff7e7089
--- /dev/null
+++ b/test/files/run/t3232.scala
@@ -0,0 +1,21 @@
+object Test {
+ // some maximally sized ranges
+ val r1 = 0 until Int.MaxValue
+ val r2 = 1 to Int.MaxValue
+ val r3 = Int.MinValue to -2
+ val r4 = Int.MinValue until -1
+
+ // some exceptional conditions
+ val e1 = () => (0 to Int.MaxValue).length
+ val e2 = () => (5 until 5).last
+
+ def main(args: Array[String]): Unit = {
+ List(r1, r2, r3, r4) foreach (x => assert(x.length == Int.MaxValue))
+
+ // exception required
+ List(e1, e2) foreach { f =>
+ try { f() ; assert(false) }
+ catch { case _ => () }
+ }
+ }
+}
diff --git a/test/files/run/t3241.check b/test/files/run/t3241.check
new file mode 100644
index 0000000000..348ebd9491
--- /dev/null
+++ b/test/files/run/t3241.check
@@ -0,0 +1 @@
+done \ No newline at end of file
diff --git a/test/files/run/t3241.scala b/test/files/run/t3241.scala
new file mode 100644
index 0000000000..40097a046f
--- /dev/null
+++ b/test/files/run/t3241.scala
@@ -0,0 +1,23 @@
+object Test {
+
+ def main(args : Array[String]) : Unit = {
+ recurse(Map(1->1, 2->2, 3->3, 4->4, 5->5, 6->6, 7->7))
+ recurse(Set(1,2,3,4,5,6,7))
+ println("done")
+ }
+
+ def recurse(map: collection.immutable.Map[Int, Int]): Unit = {
+ if (!map.isEmpty) {
+ val x = map.keys.head
+ recurse(map - x)
+ }
+ }
+
+ def recurse(set: collection.immutable.Set[Int]): Unit = {
+ if (!set.isEmpty) {
+ val x = set.toStream.head
+ recurse(set - x)
+ }
+ }
+
+}
diff --git a/test/files/run/t3242.check b/test/files/run/t3242.check
new file mode 100644
index 0000000000..a145f6df8f
--- /dev/null
+++ b/test/files/run/t3242.check
@@ -0,0 +1,18 @@
+ append [num: 200] vec
+ remove [num: 200] vec
+ append [num: 400] vec
+ remove [num: 400] vec
+ append [num: 600] vec
+ remove [num: 600] vec
+ append [num: 800] vec
+ remove [num: 800] vec
+>> comparison done, num: 200
+ append [num: 2000] vec
+ remove [num: 2000] vec
+ append [num: 4000] vec
+ remove [num: 4000] vec
+ append [num: 6000] vec
+ remove [num: 6000] vec
+ append [num: 8000] vec
+ remove [num: 8000] vec
+>> comparison done, num: 2000
diff --git a/test/files/run/t3242.scala b/test/files/run/t3242.scala
new file mode 100644
index 0000000000..f8defaa5cd
--- /dev/null
+++ b/test/files/run/t3242.scala
@@ -0,0 +1,49 @@
+object Test {
+
+ def benchmarkA(num: Int) {
+
+ type A = Int
+
+ def updateM[M[_]](ms: M[A], update: (M[A], A)=>M[A]): M[A] = {
+ var is = ms
+ for (i <- 0 until num) is = update(is, i)
+ is
+ }
+
+ //
+ def vectorAppend: Vector[A] = updateM[Vector](Vector(), (as, a)=>{
+ val v = (as :+ a)
+ //println("==>append: i: "+i1+", v: "+v)
+ v
+ })
+ // this will crash, Vector bug!
+ def vectorRemove(vec: Vector[A]): Vector[A] = updateM[Vector](vec, (as, a)=>{
+ val v = (as filterNot{ _ == a})
+ //val v = (is filter{ _ != i})
+ //println("==>remove: i: "+a)
+ v
+ })
+
+ val ct = vectorAppend
+ println(" append [num: "+num+"] vec")
+ vectorRemove(ct)
+ println(" remove [num: "+num+"] vec")
+ } // BenchmarkA
+
+ def comparison(num: Int): Unit = {
+ for (i <- 1 until 5) benchmarkA(num*i)
+ println(">> comparison done, num: "+num);
+ }
+
+ def main(args: Array[String]): Unit = {
+ try {
+ //createBenchmarkA(23).testRun
+
+ comparison(200) // OK
+ comparison(2000) // this will crach
+
+ } catch {
+ case e: Exception => e.printStackTrace()
+ }
+ }
+}
diff --git a/test/files/run/t3242b.scala b/test/files/run/t3242b.scala
new file mode 100644
index 0000000000..7a296aac15
--- /dev/null
+++ b/test/files/run/t3242b.scala
@@ -0,0 +1,17 @@
+import scala.collection.immutable._
+
+object Test {
+
+ def test(n: Int) = {
+ var vb = new VectorBuilder[Int]
+ for (i <- 0 until n)
+ vb += i
+ val v = vb.result
+ assert(v == (0 until n), "not same as (0 until " + n + "): " + v)
+ }
+
+ def main(args: Array[String]): Unit = {
+ for (i <- 0 until 2000)
+ test(i)
+ }
+}
diff --git a/test/files/run/t3269.check b/test/files/run/t3269.check
new file mode 100644
index 0000000000..c25611c15c
--- /dev/null
+++ b/test/files/run/t3269.check
@@ -0,0 +1,2 @@
+1
+Hello
diff --git a/test/files/run/t3269.scala b/test/files/run/t3269.scala
new file mode 100644
index 0000000000..6fe727111c
--- /dev/null
+++ b/test/files/run/t3269.scala
@@ -0,0 +1,9 @@
+object Test {
+ def main(args: Array[String]): Unit = {
+ val it = List(1).iterator ++ { println("Hello"); Iterator.empty }
+ println(it.next)
+ it.hasNext
+ it.hasNext
+ it.hasNext
+ }
+}
diff --git a/test/files/run/t3273.scala b/test/files/run/t3273.scala
new file mode 100644
index 0000000000..a4dfc4b30c
--- /dev/null
+++ b/test/files/run/t3273.scala
@@ -0,0 +1,10 @@
+object Test {
+ val num1: Stream[Int] = 1 #:: num1.map(_ + 1)
+ val num2: Stream[Int] = 1 #:: num2.iterator.map(_ + 1).toStream
+
+ def main(args: Array[String]): Unit = {
+ val x1 = (num1 take 10).toList
+ val x2 = (num2 take 10).toList
+ assert(x1 == x2)
+ }
+}
diff --git a/test/files/run/t3327.check b/test/files/run/t3327.check
new file mode 100644
index 0000000000..980a0d5f19
--- /dev/null
+++ b/test/files/run/t3327.check
@@ -0,0 +1 @@
+Hello World!
diff --git a/test/files/run/t3327.scala b/test/files/run/t3327.scala
new file mode 100644
index 0000000000..7e6d3fc210
--- /dev/null
+++ b/test/files/run/t3327.scala
@@ -0,0 +1,8 @@
+object Test {
+ def main (args : Array[String]) {
+ val b = new StringBuilder
+ b.append ("Hello World!")
+ b.lastIndexOf ('e')
+ println (b.toString)
+ }
+} \ No newline at end of file
diff --git a/test/files/run/t3361.scala b/test/files/run/t3361.scala
new file mode 100644
index 0000000000..7fbc6777f2
--- /dev/null
+++ b/test/files/run/t3361.scala
@@ -0,0 +1,98 @@
+object Test extends App {
+ import scala.collection.mutable.DoubleLinkedList
+
+ empty
+ builder_1
+ builder_2
+ chaining_1
+ chaining_2
+ insert_1
+ insert_2
+ append_1
+ append_2
+
+ def empty {
+ val none = DoubleLinkedList()
+ require(none.size == 0)
+ none.foreach( _ => require(false))
+ }
+
+ def builder_1 {
+ val ten = DoubleLinkedList(1 to 10: _*)
+ require(10 == ten.size)
+ }
+
+ def builder_2 {
+ val ten = DoubleLinkedList(1 to 10: _*)
+ require((ten.size*(ten.size+1))/2 == ten.reduceLeft(_ + _))
+ }
+
+ def chaining_1 {
+ val ten = DoubleLinkedList(1 to 10: _*)
+ require(ten.reverse == DoubleLinkedList((1 to 10).reverse: _*))
+ }
+
+ def chaining_2 {
+ val ten = DoubleLinkedList(1 to 10: _*)
+ require(ten == ten.reverse.reverse)
+ }
+
+ def insert_1 {
+ val ten = DoubleLinkedList(1 to 10: _*)
+ ten.append(DoubleLinkedList(11))
+
+ // Post-insert size test
+ require(11 == ten.size)
+ // Post-insert data test
+ require((ten.size*(ten.size+1))/2 == ten.reduceLeft(_ + _))
+ // Post-insert chaining test
+ require(ten == ten.reverse.reverse)
+ // Post-insert position test
+ require(ten.last == 11)
+ }
+
+ def insert_2 {
+ val ten = DoubleLinkedList(1 to 10: _*)
+ try {
+ DoubleLinkedList().insert(ten)
+ } catch {
+ case _: IllegalArgumentException => require(true)
+ case _ => require(false)
+ }
+ val zero = DoubleLinkedList(0)
+ zero.insert(ten)
+ require(zero.size == 11)
+ require(zero.head == 0)
+ require(zero.last == 10)
+ }
+
+ def append_1 {
+ val ten = DoubleLinkedList(1 to 10: _*)
+ val eleven = ten.append(DoubleLinkedList(11))
+ // Post-append equality test
+ require(ten == eleven)
+ // Post-append size test
+ require(11 == ten.size)
+ // Post-append data test
+ require((ten.size*(ten.size+1))/2 == ten.reduceLeft(_ + _))
+ // Post-append chaining test
+ require(ten == ten.reverse.reverse)
+ // Post-append position test
+ require(ten.last == 11)
+ }
+
+ def append_2 {
+ val ten = DoubleLinkedList(1 to 10: _*)
+ try {
+ DoubleLinkedList().append(ten)
+ } catch {
+ case _: IllegalArgumentException => require(true)
+ case _ => require(false)
+ }
+ val zero = DoubleLinkedList(0)
+ zero.append(ten)
+ require(zero.size == 11)
+ require(zero.head == 0)
+ require(zero.last == 10)
+ }
+}
diff --git a/test/files/run/t3376.check b/test/files/run/t3376.check
new file mode 100644
index 0000000000..3a1d7d581b
--- /dev/null
+++ b/test/files/run/t3376.check
@@ -0,0 +1,18 @@
+Type in expressions to have them evaluated.
+Type :help for more information.
+
+scala>
+
+scala> class M[@specialized T] { override def toString = "mmm" }
+defined class M
+
+scala> val m1 = new M[Int]()
+m1: M[Int] = mmm
+
+scala> val m2 = new M[Float]()
+m2: M[Float] = mmm
+
+scala> val m3 = new M[String]()
+m3: M[String] = mmm
+
+scala>
diff --git a/test/files/run/t3376.scala b/test/files/run/t3376.scala
new file mode 100644
index 0000000000..e2c94e5072
--- /dev/null
+++ b/test/files/run/t3376.scala
@@ -0,0 +1,13 @@
+import scala.tools.nsc.interpreter._
+import scala.tools.partest.ReplTest
+
+object Test extends ReplTest {
+ class M[@specialized T] { }
+
+ def code = """
+ |class M[@specialized T] { override def toString = "mmm" }
+ |val m1 = new M[Int]()
+ |val m2 = new M[Float]()
+ |val m3 = new M[String]()
+ |""".stripMargin
+}
diff --git a/test/files/run/t3395.check b/test/files/run/t3395.check
new file mode 100644
index 0000000000..5f5521fae2
--- /dev/null
+++ b/test/files/run/t3395.check
@@ -0,0 +1,2 @@
+abc
+def
diff --git a/test/files/run/t3395.scala b/test/files/run/t3395.scala
new file mode 100644
index 0000000000..01cc431871
--- /dev/null
+++ b/test/files/run/t3395.scala
@@ -0,0 +1,13 @@
+object Test {
+ def main(args: Array[String]): Unit = {
+ Seq("") match {
+ case Seq("") => println("abc")
+ case Seq(_, _, x) => println(x)
+ }
+
+ Seq(1, 2, "def") match {
+ case Seq("") => println("abc")
+ case Seq(_, _, x) => println(x)
+ }
+ }
+} \ No newline at end of file
diff --git a/test/files/run/t3397.scala b/test/files/run/t3397.scala
new file mode 100644
index 0000000000..243fe766de
--- /dev/null
+++ b/test/files/run/t3397.scala
@@ -0,0 +1,7 @@
+object Test {
+ def main(args: Array[String]): Unit = {
+ val x = Seq(Set(1,2,3),Set(4,5,6),Set(7,8,9)).transpose
+
+ ()
+ }
+}
diff --git a/test/files/run/t3487.scala b/test/files/run/t3487.scala
new file mode 100644
index 0000000000..f2ca735913
--- /dev/null
+++ b/test/files/run/t3487.scala
@@ -0,0 +1,15 @@
+trait Bippy {
+ def bippy = 5
+}
+
+class Test extends Bippy {
+ def f1 = 55
+}
+
+object Test extends Test {
+ def dingus = bippy
+ def main(args: Array[String]): Unit = {
+ assert(bippy + f1 == 110)
+ }
+ override def bippy = 55
+}
diff --git a/test/files/run/t3493.scala b/test/files/run/t3493.scala
new file mode 100644
index 0000000000..b0b7589cfd
--- /dev/null
+++ b/test/files/run/t3493.scala
@@ -0,0 +1,15 @@
+
+
+
+
+object Test {
+
+ def main(args: Array[String]) {
+ import scala.collection.immutable._
+ val x = TreeSet("a", "b", "c", "d")
+ val x2 = x + "e"
+ assert(x2.toString == "TreeSet(a, b, c, d, e)")
+ assert(x2.toString == runtime.ScalaRunTime.stringOf(x2).trim)
+ }
+
+}
diff --git a/test/files/run/t3496.scala b/test/files/run/t3496.scala
new file mode 100644
index 0000000000..80a4e6bd86
--- /dev/null
+++ b/test/files/run/t3496.scala
@@ -0,0 +1,15 @@
+
+
+
+
+// ticket #3496
+object Test {
+
+ def main(args: Array[String]) {
+ val s = Stream.from(1)
+ s.take(5)
+ s.drop(5)
+ s.splitAt(5)
+ }
+
+}
diff --git a/test/files/run/t3502.scala b/test/files/run/t3502.scala
new file mode 100644
index 0000000000..9492b2d4d4
--- /dev/null
+++ b/test/files/run/t3502.scala
@@ -0,0 +1,24 @@
+
+
+
+
+
+// ticket #3502
+object Test {
+
+ object GeneratePrimeFactorsLazy extends (Int => List[Int]) {
+ override def apply(n:Int) = {
+ val s = Stream.range(2, n / 2).filter(n % _ == 0)
+ //val s = for (i <- Stream.range(2, n / 2); if n % i == 0) yield i
+ s.headOption.map(x => x :: apply(n / x)).getOrElse(List(n))
+ }
+ }
+
+ def main(args:Array[String]) {
+ // a prime number
+ //val num = 623456789
+ val num = 2796203
+ assert(GeneratePrimeFactorsLazy(num) == List(num))
+ }
+
+}
diff --git a/test/files/run/t3508.scala b/test/files/run/t3508.scala
new file mode 100644
index 0000000000..01d976ba0d
--- /dev/null
+++ b/test/files/run/t3508.scala
@@ -0,0 +1,11 @@
+
+
+import collection.immutable._
+
+
+// ticket #3508
+object Test {
+ def main(args: Array[String]) {
+ assert(Stream.tabulate(123)(_ + 1).toList == List.tabulate(123)(_ + 1))
+ }
+}
diff --git a/test/files/run/t3509.flags b/test/files/run/t3509.flags
new file mode 100644
index 0000000000..6933d924d3
--- /dev/null
+++ b/test/files/run/t3509.flags
@@ -0,0 +1 @@
+-Yinline \ No newline at end of file
diff --git a/test/files/run/t3509.scala b/test/files/run/t3509.scala
new file mode 100644
index 0000000000..7ec150eb01
--- /dev/null
+++ b/test/files/run/t3509.scala
@@ -0,0 +1,9 @@
+object Test {
+
+ class Foo(final var i:Int)
+
+ def main(args : Array[String]) : Unit = {
+ val foo = new Foo(0)
+ foo.i += 1
+ }
+} \ No newline at end of file
diff --git a/test/files/run/t3511.scala b/test/files/run/t3511.scala
new file mode 100644
index 0000000000..9b4d581462
--- /dev/null
+++ b/test/files/run/t3511.scala
@@ -0,0 +1,36 @@
+
+
+
+import scala.collection.immutable._
+
+
+// ticket #3511
+object Test {
+
+ def main(args: Array[String]) {
+ assert(Stream.from(0).view.force.take(5) == List(0, 1, 2, 3, 4))
+
+ val s = Stream.from(0)
+ val smap = s.view.map(_ * 2).force.take(5)
+ assert(smap == List(0, 2, 4, 6, 8))
+
+ val sfilter = s.view.filter(_ % 2 == 0).force.take(5)
+ assert(sfilter == List(0, 2, 4, 6, 8))
+
+ val sflatmap = s.view.flatMap(n => List(n, n * 2)).force.take(6)
+ assert(sflatmap == List(0, 0, 1, 2, 2, 4))
+
+ val stakewhile = s.view.takeWhile(_ < 10).force
+ assert(stakewhile == List.range(0, 10))
+
+ val szip = s.view.zip(s.map(_ / 2)).force.take(5)
+ assert(szip == List((0, 0), (1, 0), (2, 1), (3, 1), (4, 2)))
+
+ val szipall = s.view.zipAll(List(0, 1, 2), 0, 0).force.take(5)
+ assert(szipall == List((0, 0), (1, 1), (2, 2), (3, 0), (4, 0)))
+
+ val spatch = s.view.patch(1, List(5, 5, 5), 5).force.take(5)
+ assert(spatch == List(0, 5, 5, 5, 6))
+ }
+
+}
diff --git a/test/files/run/t3516.check b/test/files/run/t3516.check
new file mode 100644
index 0000000000..d0d10d82fa
--- /dev/null
+++ b/test/files/run/t3516.check
@@ -0,0 +1,3 @@
+1
+1
+21
diff --git a/test/files/run/t3516.scala b/test/files/run/t3516.scala
new file mode 100644
index 0000000000..82a97f27de
--- /dev/null
+++ b/test/files/run/t3516.scala
@@ -0,0 +1,13 @@
+object Test {
+ def mkIterator = (1 to 5).iterator map (x => { println(x) ; x })
+ def mkInfinite = Iterator continually { println(1) ; 1 }
+
+ def main(args: Array[String]): Unit = {
+ // Stream is strict in its head so we should see 1 from each of them.
+ val s1 = mkIterator.toStream
+ val s2 = mkInfinite.toStream
+ // back and forth without slipping into nontermination.
+ println((Stream from 1).toIterator.drop(10).toStream.drop(10).toIterator.next)
+ ()
+ }
+}
diff --git a/test/files/run/t3518.scala b/test/files/run/t3518.scala
new file mode 100644
index 0000000000..36ca9daaa2
--- /dev/null
+++ b/test/files/run/t3518.scala
@@ -0,0 +1,16 @@
+object Test {
+ val r1 = 1.0 to 10.0 by 0.5
+ val r2 = 1.0 to 1.0 by 1.0
+ val r3 = 10.0 to 1.0 by -0.5
+ val r4 = 1.0 until 1.0 by 1.0
+ val r5 = 1 to 100 by 2
+
+ def main(args: Array[String]): Unit = {
+ assert(r3 forall (r1 contains _))
+ assert(r1 forall (r3 contains _))
+ assert(r2.size == 1)
+ assert(r4.isEmpty)
+ assert(List(1,3,5,97,99) forall (r5 contains _))
+ assert(List(2,4,6,98,100) forall (x => !r5.contains(x)))
+ }
+}
diff --git a/test/files/run/t3529.scala b/test/files/run/t3529.scala
new file mode 100644
index 0000000000..bb82424bf6
--- /dev/null
+++ b/test/files/run/t3529.scala
@@ -0,0 +1,14 @@
+object Test {
+ def main(args: Array[String]): Unit = {
+ assert(1 to 10 drop 10 isEmpty)
+ assert(1 until 10 drop 9 isEmpty)
+ assert(1 to 10 by 2 drop 5 isEmpty)
+ assert(10 to 1 by -1 drop 10 isEmpty)
+ assert((10 to 1 by -1 drop 9) == Seq(1))
+
+ assert((1 to 10 drop 9) == Seq(10))
+ assert((1 until 10 drop 9) == Nil)
+
+ assert(Stream(1 to 10).flatten.toList == Stream(1 until 11).flatten.toList)
+ }
+}
diff --git a/test/files/run/t3530.check b/test/files/run/t3530.check
new file mode 100644
index 0000000000..1f906680e9
--- /dev/null
+++ b/test/files/run/t3530.check
@@ -0,0 +1,12 @@
+two
+three
+list: 4
+list: 0
+list: 5
+not a list
+
+two
+three
+list: 4
+list: 0
+list: 5
diff --git a/test/files/run/t3530.scala b/test/files/run/t3530.scala
new file mode 100644
index 0000000000..3fedc66dbe
--- /dev/null
+++ b/test/files/run/t3530.scala
@@ -0,0 +1,35 @@
+object Test {
+ def f(x: Any) = println(x match {
+ case List(_, _) => "two"
+ case List(_, _, _) => "three"
+ case xs @ List(_*) => "list: " + xs.length
+ case _ => "not a list"
+ })
+
+ def f2[T](x: List[T]) = println(x match {
+ case List(_, _) => "two"
+ case List(_, _, _) => "three"
+ case List(xs @ _*) => "list: " + xs.length
+ // bug: the default case is marked unreachable
+ // case _ => "not a list"
+ })
+
+ def main(args: Array[String]) {
+ f(List(1, 2))
+ f(List('a', 'b', 'c'))
+ f(List('a', 'b', 'c', 'd'))
+ f(Nil)
+ f(List(1,2,3,4,5))
+ f(null)
+
+ println
+
+ f2(List(1, 2))
+ f2(List('a', 'b', 'c'))
+ f2(List('a', 'b', 'c', 'd'))
+ f2(Nil)
+ f2(List(1,2,3,4,5))
+ // bug: this NPEs on xs.length
+ // f2(null)
+ }
+} \ No newline at end of file
diff --git a/test/files/run/t3540.scala b/test/files/run/t3540.scala
new file mode 100644
index 0000000000..4eb3de780b
--- /dev/null
+++ b/test/files/run/t3540.scala
@@ -0,0 +1,7 @@
+object Test {
+ def main(args: Array[String]): Unit = {
+ assert(List.iterate(List(1,2,3), 4)(_.tail).last.isEmpty)
+ assert(Stream.iterate(Stream(1,2,3), 4)(_.tail).last.isEmpty)
+ assert(Array.iterate(Array(1,2,3), 4)(_.tail).last.isEmpty)
+ }
+}
diff --git a/test/files/run/t3563.scala b/test/files/run/t3563.scala
new file mode 100644
index 0000000000..2a80ef412a
--- /dev/null
+++ b/test/files/run/t3563.scala
@@ -0,0 +1,21 @@
+
+
+
+
+
+// ticket #3563
+object Test {
+
+ def main(args: Array[String]) {
+ var sum = 0
+ val setseq = Set(1, 2, 3, 4).toSeq
+ setseq.map( n => { sum += n; n * n }).head
+ assert(sum == 10)
+
+ sum = 0
+ val mapseq = Map(1 -> 1, 2 -> 2, 3 -> 3, 4 -> 4).toSeq
+ mapseq.map( n => { sum += n._1; (n._1 + n._1, n._2 * n._2) }).head
+ assert(sum == 10)
+ }
+
+}
diff --git a/test/files/run/t3580.scala b/test/files/run/t3580.scala
new file mode 100644
index 0000000000..ac9f81ab9e
--- /dev/null
+++ b/test/files/run/t3580.scala
@@ -0,0 +1,17 @@
+
+
+
+
+
+object Test {
+
+ class Empty extends Traversable[Nothing] {
+ def foreach[U](f: Nothing => U) {}
+ }
+
+ def main(args: Array[String]) {
+ val t = new Empty
+ t.toStream
+ }
+
+}
diff --git a/test/files/run/t3603.scala b/test/files/run/t3603.scala
new file mode 100644
index 0000000000..a0821a2a45
--- /dev/null
+++ b/test/files/run/t3603.scala
@@ -0,0 +1,18 @@
+
+
+
+object Test {
+
+ def main(args: Array[String]) {
+ import collection.immutable._
+
+ val intmap = IntMap(1 -> 1, 2 -> 2)
+ val intres = intmap.map { case (a, b) => (a, b.toString) }
+ assert(intres.isInstanceOf[IntMap[_]])
+
+ val longmap = LongMap(1L -> 1, 2L -> 2)
+ val longres = longmap.map { case (a, b) => (a, b.toString) }
+ assert(longres.isInstanceOf[LongMap[_]])
+ }
+
+}
diff --git a/test/files/run/t3613.scala b/test/files/run/t3613.scala
new file mode 100644
index 0000000000..c3b249571b
--- /dev/null
+++ b/test/files/run/t3613.scala
@@ -0,0 +1,22 @@
+class Boopy {
+ private val s = new Schnuck
+ def observer : PartialFunction[ Any, Unit ] = s.observer
+
+ private class Schnuck extends javax.swing.AbstractListModel {
+ model =>
+ val observer : PartialFunction[ Any, Unit ] = {
+ case "Boopy" => fireIntervalAdded( model, 0, 1 )
+ }
+ def getSize = 0
+ def getElementAt( idx: Int ) : AnyRef = "egal"
+ }
+
+}
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ val x = new Boopy
+ val o = x.observer
+ o( "Boopy" ) // --> throws runtime error
+ }
+}
diff --git a/test/files/run/t3616.check b/test/files/run/t3616.check
new file mode 100644
index 0000000000..f31e21baff
--- /dev/null
+++ b/test/files/run/t3616.check
@@ -0,0 +1 @@
+Fruit.ValueSet(A, B, C)
diff --git a/test/files/run/t3616.scala b/test/files/run/t3616.scala
new file mode 100644
index 0000000000..777b97f9ab
--- /dev/null
+++ b/test/files/run/t3616.scala
@@ -0,0 +1,12 @@
+object X extends Enumeration {
+ val Y = Value
+}
+object Fruit extends Enumeration {
+ val x = X.Y
+ val A,B,C = Value
+}
+object Test {
+ def main(args: Array[String]): Unit = {
+ println(Fruit.values)
+ }
+}
diff --git a/test/files/run/t3619.scala b/test/files/run/t3619.scala
new file mode 100644
index 0000000000..46324b4d69
--- /dev/null
+++ b/test/files/run/t3619.scala
@@ -0,0 +1,34 @@
+class Dep(x: Int)(implicit val nameClash: String)
+
+object Test extends App {
+ implicit val nameClash: String = "meh"
+
+ def meth(implicit w: String) = 1
+
+ // when typing Meh's default constructor Meh.this.nameClash (inherited from Dep)
+ // shadows Test.nameClash, thus, when inferring the argument `w` in the call to meth,
+ // Test.nameClash is not eligible statically, Meh.this.nameClash is picked (which then causes the VerifyError)
+ // BUG: Meth.this.nameClash should not be in (the implicit) scope during the super constructor call in the first place
+ class Meh extends Dep(meth)
+ /*
+ class Meh extends Dep {
+ def this() {
+ this(Test.this.meth(Meh.this.nameClash))(Test.this.nameClash)
+ }
+ }
+ */
+
+ new Meh
+}
+
+
+/*
+ {
+ def this(a: String, b: Int) {
+ this()
+ }
+ def this(x: String) {
+ this(Meh.this.nameClash, 1)
+ }
+ }
+*/
diff --git a/test/files/run/bug363.check b/test/files/run/t363.check
index 040b97c07a..040b97c07a 100644
--- a/test/files/run/bug363.check
+++ b/test/files/run/t363.check
diff --git a/test/files/run/t363.scala b/test/files/run/t363.scala
new file mode 100644
index 0000000000..5f3f30a098
--- /dev/null
+++ b/test/files/run/t363.scala
@@ -0,0 +1,9 @@
+object Test {
+ def main(args: Array[String]) {
+ println("I love the smell of (Array[String])Unit in the morning.")
+ }
+}
+
+class Test {
+ def kurtz() = "We must kill them. We must incinerate them."
+}
diff --git a/test/files/run/t3645.scala b/test/files/run/t3645.scala
new file mode 100644
index 0000000000..af2543377b
--- /dev/null
+++ b/test/files/run/t3645.scala
@@ -0,0 +1,6 @@
+object Test {
+ def main(args: Array[String]) {
+ val s = Stream.tabulate(5)(x => x+2)
+ assert( s.toList == List(2,3,4,5,6) )
+ }
+}
diff --git a/test/files/run/t3647.scala b/test/files/run/t3647.scala
new file mode 100644
index 0000000000..434a13f414
--- /dev/null
+++ b/test/files/run/t3647.scala
@@ -0,0 +1,23 @@
+
+
+
+import collection.immutable._
+
+
+object Test {
+ def main(args: Array[String]) {
+ val ps = PagedSeq.fromLines(List(
+ "line1",
+ "line2",
+ "line3",
+ "line4"
+ ).iterator)
+ assert(ps.filter(_ == '\n').size == 3)
+
+ val ps1 = PagedSeq.fromLines(List("Ok").iterator)
+ assert(ps1.filter(_ == '\n').size == 0)
+
+ val eps = PagedSeq.fromLines(List().iterator)
+ assert(eps.filter(_ == '\n').size == 0)
+ }
+}
diff --git a/test/files/run/t3651.scala b/test/files/run/t3651.scala
new file mode 100644
index 0000000000..49ae173249
--- /dev/null
+++ b/test/files/run/t3651.scala
@@ -0,0 +1,10 @@
+class Klass[@specialized(Long) A]( val a: A )
+
+class LongKlass( override val a: Long ) extends Klass[Long](a)
+
+object Test {
+ def main(args: Array[String]) {
+ val lk = new LongKlass(10)
+ lk.a
+ }
+}
diff --git a/test/files/run/t3667.check b/test/files/run/t3667.check
new file mode 100644
index 0000000000..bbe5d1bc48
--- /dev/null
+++ b/test/files/run/t3667.check
@@ -0,0 +1,6 @@
+1
+2
+3
+4
+2
+3
diff --git a/test/files/run/t3667.scala b/test/files/run/t3667.scala
new file mode 100644
index 0000000000..f30d57ce3a
--- /dev/null
+++ b/test/files/run/t3667.scala
@@ -0,0 +1,84 @@
+object Test {
+ def main(args: Array[String]) {
+ val o1 = new Outer1
+ val o2 = new Outer2
+ val o3 = new Outer3
+ val o4 = new Outer4
+ val o5 = new Outer5
+ val o6 = new Outer6
+
+ println(1)
+ ser(new o1.Inner(1))
+ o1.Inner // make sure the Inner$module field of the Outer1 instance is initialized!
+ ser(new o1.Inner(1))
+
+ println(2)
+ ser(new o2.Inner(1))
+ o2.Inner
+ ser(new o2.Inner(1))
+
+ println(3)
+ ser(new o3.Inner(1))
+ o3.Inner
+ ser(new o3.Inner(1))
+
+ println(4)
+ ser(new o4.Inner(1))
+ o4.Inner
+ ser(new o4.Inner(1))
+
+ println(2)
+ ser(new o5.Inner(1))
+ o5.Inner
+ ser(new o5.Inner(1))
+
+ println(3)
+ ser(new o6.Inner(1))
+ o6.Inner
+ ser(new o6.Inner(1))
+
+ foo
+ }
+
+ def foo {
+ case class C(x: Int)
+ ser(new C(1))
+ ser(C)
+ }
+
+ def ser(o: AnyRef) {
+ val oos = new java.io.ObjectOutputStream(new java.io.ByteArrayOutputStream())
+ oos.writeObject(o)
+ oos.close()
+ }
+
+}
+
+@serializable
+class Outer1 {
+ @serializable
+ class Inner(x: Int = 1)
+}
+
+@serializable
+class Outer2 {
+ case class Inner(x: Int = 1)
+}
+
+@serializable
+class Outer3 {
+ case class Inner(x: Int)
+}
+
+
+class Outer4 extends Serializable {
+ class Inner(x: Int = 1) extends Serializable
+}
+
+class Outer5 extends Serializable {
+ case class Inner(x: Int = 1)
+}
+
+class Outer6 extends Serializable {
+ case class Inner(x: Int)
+}
diff --git a/test/files/run/t3670.check b/test/files/run/t3670.check
new file mode 100644
index 0000000000..bc49bb6437
--- /dev/null
+++ b/test/files/run/t3670.check
@@ -0,0 +1,5 @@
+a
+b
+1
+2
+42
diff --git a/test/files/run/t3670.scala b/test/files/run/t3670.scala
new file mode 100644
index 0000000000..97f1e8a79c
--- /dev/null
+++ b/test/files/run/t3670.scala
@@ -0,0 +1,31 @@
+class C {
+ val things = List("abcs")
+
+ if (things.length < 30) {
+ lazy val a = "a"
+ println(a)
+ }
+ if (things.length < 30) {
+ lazy val b = "b"
+ println(b)
+ }
+}
+
+class M extends App {
+ def foo {
+ lazy val a = {
+ lazy val b = 1
+ lazy val c = 2
+ println(b)
+ println(c)
+ }
+ a
+ lazy val d = 42
+ println(d)
+ }
+}
+
+object Test extends App {
+ new C()
+ new M().foo
+}
diff --git a/test/files/run/t3687.check b/test/files/run/t3687.check
new file mode 100644
index 0000000000..0f35862645
--- /dev/null
+++ b/test/files/run/t3687.check
@@ -0,0 +1,2 @@
+t.ValueSet(a, b)
+t.ValueSet(a, b) \ No newline at end of file
diff --git a/test/files/run/t3687.scala b/test/files/run/t3687.scala
new file mode 100644
index 0000000000..e26433beca
--- /dev/null
+++ b/test/files/run/t3687.scala
@@ -0,0 +1,6 @@
+object t extends Enumeration { val a, b = Value }
+
+object Test extends App {
+ println(t.values)
+ println(t.values)
+}
diff --git a/test/files/run/t3699.scala b/test/files/run/t3699.scala
new file mode 100644
index 0000000000..0475353887
--- /dev/null
+++ b/test/files/run/t3699.scala
@@ -0,0 +1,11 @@
+object Test {
+ def act: Int => Int = {
+ case _ =>
+ lazy val (a, b) = (3,9)
+ a
+ b
+ }
+ def main(args: Array[String]) = {
+ assert(act(1) == 9)
+ }
+} \ No newline at end of file
diff --git a/test/files/run/t3714.scala b/test/files/run/t3714.scala
new file mode 100644
index 0000000000..c344b40f1f
--- /dev/null
+++ b/test/files/run/t3714.scala
@@ -0,0 +1,33 @@
+trait Break {
+ protected val break: Int;
+}
+
+case class BreakImpl(protected val break: Int) extends Break { }
+
+object Test {
+ // def f1(x: Break) = x match {
+ // case b: BreakImpl => b.break
+ // case b => -1
+ // }
+ def f2(x: Break) = x match {
+ case BreakImpl(x) => x
+ case _ => -1
+ }
+ // def f3(x: Any) = x match {
+ // case b: BreakImpl => b.break
+ // case b => -1
+ // }
+ def f4(x: Any) = x match {
+ case BreakImpl(x) => x
+ case _ => -1
+ }
+
+ def main(args: Array[String]) {
+ val break = BreakImpl(22)
+ // assert(f1(break) == 22)
+ assert(f2(break) == 22)
+ // assert(f3(break) == 22)
+ assert(f4(break) == 22)
+ }
+}
+
diff --git a/test/files/run/t3719.check b/test/files/run/t3719.check
new file mode 100644
index 0000000000..111fc7fd63
--- /dev/null
+++ b/test/files/run/t3719.check
@@ -0,0 +1,4 @@
+List(Mon, Tue, Wed, Thu, Fri, Sat, Sun)
+Mon
+Tue
+Mon \ No newline at end of file
diff --git a/test/files/run/t3719.scala b/test/files/run/t3719.scala
new file mode 100644
index 0000000000..4649f11bb1
--- /dev/null
+++ b/test/files/run/t3719.scala
@@ -0,0 +1,35 @@
+object Days extends Enumeration {
+ type Day = DayValue
+ val Mon, Tue, Wed, Thu, Fri, Sat, Sun = new DayValue // DayValue
+
+ protected class DayValue extends Val {
+ def isWeekday: Boolean =
+ this match {
+ case Sun => false
+ case Sat => false
+ case _ => true
+ }
+ }
+}
+
+object Test extends App {
+ def dayElementsShouldBeNamed(): List[String] =
+ Days.values.toList.sorted.map(x => x.toString)
+
+ def nameOfMon(): String = {
+ import Days._
+ val d: Day = Mon
+ d.toString
+ }
+
+ def nameOfTue(): String = {
+ import Days._
+ val d: Day = Tue
+ d.toString
+ }
+
+ println(dayElementsShouldBeNamed())
+ println(nameOfMon())
+ println(nameOfTue())
+ println(nameOfMon())
+}
diff --git a/test/files/run/t3726.check b/test/files/run/t3726.check
new file mode 100644
index 0000000000..7a5775bf34
--- /dev/null
+++ b/test/files/run/t3726.check
@@ -0,0 +1,2 @@
+hi there
+5 \ No newline at end of file
diff --git a/test/files/run/t3726.scala b/test/files/run/t3726.scala
new file mode 100644
index 0000000000..02b262fdac
--- /dev/null
+++ b/test/files/run/t3726.scala
@@ -0,0 +1,8 @@
+object Test extends App {
+ def test(f: () => Int) = {
+ val x = f()
+ 5
+ }
+
+ println(test(() => { println("hi there"); 0 }))
+}
diff --git a/test/files/run/t3760.scala b/test/files/run/t3760.scala
new file mode 100644
index 0000000000..b78406824e
--- /dev/null
+++ b/test/files/run/t3760.scala
@@ -0,0 +1,17 @@
+object Test {
+ def main(args: Array[String]): Unit = {
+ {
+ val it = Iterable(1,2).iterator
+ val xs = it.toList
+
+ assert(it.isEmpty)
+ }
+
+ {
+ val it = Iterator(1, 2)
+ val xs = it.toStream.toList
+
+ assert(it.isEmpty)
+ }
+ }
+}
diff --git a/test/files/run/t3763.scala b/test/files/run/t3763.scala
new file mode 100644
index 0000000000..1ac3013c84
--- /dev/null
+++ b/test/files/run/t3763.scala
@@ -0,0 +1,3 @@
+object Test extends App {
+ val x = Array(Array(1), List(1))
+}
diff --git a/test/files/run/t3822.scala b/test/files/run/t3822.scala
new file mode 100644
index 0000000000..eaf0a145d3
--- /dev/null
+++ b/test/files/run/t3822.scala
@@ -0,0 +1,19 @@
+import scala.collection.{ mutable, immutable, generic }
+import immutable.ListSet
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ val xs = ListSet(-100000 to 100001: _*)
+
+ assert(xs.size == 200002)
+ assert(xs.sum == 100001)
+
+ val ys = ListSet[Int]()
+ val ys1 = (1 to 12).grouped(3).foldLeft(ys)(_ ++ _)
+ val ys2 = (1 to 12).foldLeft(ys)(_ + _)
+
+ assert(ys1 == ys2)
+ }
+}
+
+
diff --git a/test/files/run/t3829.scala b/test/files/run/t3829.scala
new file mode 100644
index 0000000000..e3d8c56882
--- /dev/null
+++ b/test/files/run/t3829.scala
@@ -0,0 +1,40 @@
+// ticket #3829
+object Test {
+ import collection.{ mutable, immutable }
+
+ def main(args: Array[String]) {
+ val map = immutable.Map(1 -> 2, 3 -> 4)
+ assert(map.get(0) == None)
+
+ // Since r24255 defaultMap.get(x) returns None rather than
+ // using the default, so these mostly use apply.
+ val defmap = map.withDefaultValue(-1)
+ assert(defmap(0) == -1)
+ assert(defmap.size == 2)
+ assert(defmap.iterator.size == 2)
+ assert(defmap.empty(0) == -1)
+ assert((defmap + (2 -> 3))(0) == -1)
+ assert((defmap + (2 -> 3))(1) == 2)
+ assert((defmap + (2 -> 3))(2) == 3)
+ assert((defmap - 1)(0) == -1)
+ assert((defmap - 1)(1) == -1)
+ assert((defmap - 1)(3) == 4)
+
+ val mutmap = mutable.Map(1 -> 2, 2 -> 3)
+ assert(mutmap.get(0) == None)
+
+ val defmutmap = mutmap.withDefaultValue(-1)
+ assert(defmutmap(0) == -1)
+ assert(defmutmap(3) == -1)
+ mutmap += 3 -> 4
+ assert(defmutmap(3) == 4)
+ assert(defmutmap(1) == 2)
+ mutmap -= 1
+ assert(defmutmap(1) == -1)
+ assert(mutmap.get(1) == None)
+ defmutmap += 1 -> 2
+ assert(defmutmap(1) == 2)
+ assert(mutmap(1) == 2)
+ }
+
+}
diff --git a/test/files/run/t3835.check b/test/files/run/t3835.check
new file mode 100644
index 0000000000..995415951d
--- /dev/null
+++ b/test/files/run/t3835.check
@@ -0,0 +1,2 @@
+6
+1
diff --git a/test/files/run/t3835.scala b/test/files/run/t3835.scala
new file mode 100644
index 0000000000..49e591195f
--- /dev/null
+++ b/test/files/run/t3835.scala
@@ -0,0 +1,4 @@
+object Test extends App {
+ println((1, 2, 3) match { case (r, \u03b8, \u03c6) => r + \u03b8 + \u03c6 })
+ println(1 match { case \u00e9 => \u00e9 })
+}
diff --git a/test/files/run/t3855.scala b/test/files/run/t3855.scala
new file mode 100644
index 0000000000..e55714201f
--- /dev/null
+++ b/test/files/run/t3855.scala
@@ -0,0 +1,18 @@
+object Test {
+ def byval[A](a: => A) = a
+ def closure[A](f: () => A) = f()
+
+ def f1(s: String) = {
+ var n = try { s.toInt } catch { case _ => 1 }
+ byval(n)
+ }
+ def f2(s: String) = {
+ var n = try { s.toInt } catch { case _ => 1 }
+ closure(() => n)
+ }
+
+ def main(args: Array[String]) = {
+ val sum = f1("12") + f2("the witch is dead")
+ assert(sum == 13)
+ }
+}
diff --git a/test/files/run/t3877.check b/test/files/run/t3877.check
new file mode 100644
index 0000000000..72aa5577f6
--- /dev/null
+++ b/test/files/run/t3877.check
@@ -0,0 +1,104 @@
+test1: 3
+test1: 4
+test1: 5
+test1: 6
+test1: 7
+test1: 8
+test1: 9
+test1: 10
+test2: 3
+test2: 4
+test2: 5
+test2: 6
+test2: 7
+test2: 8
+test2: 9
+test2: 10
+test3: 3
+test3: 4
+test3: 5
+test3: 6
+test3: 7
+test3: 8
+test3: 9
+test3: 10
+test4: 3
+test4: 4
+test4: 5
+test4: 6
+test4: 7
+test4: 8
+test4: 9
+test4: 10
+test5.1: 3
+test5.2: 3
+test5.2: 4
+test5.2: 5
+test5.2: 6
+test5.2: 7
+test5.2: 8
+test5.2: 9
+test5.2: 10
+test5.1: 4
+test5.2: 3
+test5.2: 4
+test5.2: 5
+test5.2: 6
+test5.2: 7
+test5.2: 8
+test5.2: 9
+test5.2: 10
+test5.1: 5
+test5.2: 3
+test5.2: 4
+test5.2: 5
+test5.2: 6
+test5.2: 7
+test5.2: 8
+test5.2: 9
+test5.2: 10
+test5.1: 6
+test5.2: 3
+test5.2: 4
+test5.2: 5
+test5.2: 6
+test5.2: 7
+test5.2: 8
+test5.2: 9
+test5.2: 10
+test5.1: 7
+test5.2: 3
+test5.2: 4
+test5.2: 5
+test5.2: 6
+test5.2: 7
+test5.2: 8
+test5.2: 9
+test5.2: 10
+test5.1: 8
+test5.2: 3
+test5.2: 4
+test5.2: 5
+test5.2: 6
+test5.2: 7
+test5.2: 8
+test5.2: 9
+test5.2: 10
+test5.1: 9
+test5.2: 3
+test5.2: 4
+test5.2: 5
+test5.2: 6
+test5.2: 7
+test5.2: 8
+test5.2: 9
+test5.2: 10
+test5.1: 10
+test5.2: 3
+test5.2: 4
+test5.2: 5
+test5.2: 6
+test5.2: 7
+test5.2: 8
+test5.2: 9
+test5.2: 10
diff --git a/test/files/run/t3877.scala b/test/files/run/t3877.scala
new file mode 100644
index 0000000000..ce1e9283a7
--- /dev/null
+++ b/test/files/run/t3877.scala
@@ -0,0 +1,81 @@
+object Test {
+ val LIMIT = 10
+
+ def test1 {
+ var d = 2
+ var i = 0 // avoid infinite loops
+ while (d < LIMIT && i < LIMIT) {
+ lazy val b = d + 1
+ d = b
+ i += 1
+ println("test1: " + d)
+ }
+ }
+
+ def test2 {
+ var d = 2
+ var i = 0
+ while (true) {
+ lazy val b = d + 1
+ d = b
+ i += 1
+ println("test2: " + d)
+
+ if (d >= LIMIT || i >= LIMIT)
+ return
+ }
+ }
+
+ def test3 {
+ var d = 2
+ var i = 0
+ do {
+ lazy val b = d + 1
+ d = b
+ i += 1
+ println("test3: " + d)
+ } while (d < LIMIT && i < LIMIT)
+ }
+
+ def test4 {
+ var d = 2
+ var i = 0
+ do {
+ lazy val b = d + 1
+ d = b
+ i += 1
+ println("test4: " + d)
+ if (d >= LIMIT || i >= LIMIT)
+ return
+ } while (true)
+ }
+
+ def test5 {
+ var d = 2
+ var i = 0
+ while (d < LIMIT && i < LIMIT) {
+ lazy val b = d + 1
+ d = b
+ i += 1
+ println("test5.1: " + d)
+
+ var e = 2
+ var j = 0
+ while (e < LIMIT && j < LIMIT) {
+ lazy val f = e + 1
+ e = f
+ j += 1
+ println("test5.2: " + e)
+ }
+ }
+ }
+
+
+ def main(args: Array[String]) {
+ test1
+ test2
+ test3
+ test4
+ test5
+ }
+}
diff --git a/test/files/run/t3886.scala b/test/files/run/t3886.scala
new file mode 100644
index 0000000000..1e8e7ad252
--- /dev/null
+++ b/test/files/run/t3886.scala
@@ -0,0 +1,11 @@
+object Test {
+ def main(args: Array[String]) {
+ assert( <k a="1" b="2"/> == <k a="1" b="2"/> )
+ assert( <k a="1" b="2"/> != <k a="1" b="3"/> )
+ assert( <k a="1" b="2"/> != <k a="2" b="2"/> )
+
+ assert( <k a="1" b="2"/> != <k/> )
+ assert( <k a="1" b="2"/> != <k a="1"/> )
+ assert( <k a="1" b="2"/> != <k b="2"/> )
+ }
+}
diff --git a/test/files/run/t3887.scala b/test/files/run/t3887.scala
new file mode 100644
index 0000000000..81fa7a917e
--- /dev/null
+++ b/test/files/run/t3887.scala
@@ -0,0 +1,16 @@
+object Test {
+ def main(args: Array[String]) {
+ assert( matchPair(1) )
+ assert( !matchPair(2) )
+ }
+
+ def matchPair(i: Int) = {
+ (i, "abc") match {
+ case this.option1 => true
+ case _ => false
+ }
+ }
+
+ val option1: (Int, String) = (1, "abc")
+
+}
diff --git a/test/files/run/t3888.scala b/test/files/run/t3888.scala
new file mode 100644
index 0000000000..e0f1453b1d
--- /dev/null
+++ b/test/files/run/t3888.scala
@@ -0,0 +1,26 @@
+object Test {
+
+ val T1 = new P
+ private[this] val T2 = T1
+
+ def m1 =
+ (1, 2) match {
+ case T1 => true
+ case _ => false
+ }
+
+ def m2 =
+ (1, 2) match {
+ case T2 => true
+ case _ => false
+ }
+
+ def main(args: Array[String]) = {
+ assert( m1 )
+ assert( m2 )
+ }
+}
+
+class P extends Pair(1, 1) {
+ override def equals(x: Any) = true
+} \ No newline at end of file
diff --git a/test/files/run/t3895.check b/test/files/run/t3895.check
new file mode 100644
index 0000000000..3045ebf016
--- /dev/null
+++ b/test/files/run/t3895.check
@@ -0,0 +1,2 @@
+17
+17 \ No newline at end of file
diff --git a/test/files/run/t3895.flags b/test/files/run/t3895.flags
new file mode 100644
index 0000000000..ae08446055
--- /dev/null
+++ b/test/files/run/t3895.flags
@@ -0,0 +1 @@
+-Xcheckinit \ No newline at end of file
diff --git a/test/files/run/t3895.scala b/test/files/run/t3895.scala
new file mode 100644
index 0000000000..9028e0a08a
--- /dev/null
+++ b/test/files/run/t3895.scala
@@ -0,0 +1,36 @@
+class C extends A{
+
+ val a = 10
+ //object bb
+ lazy val bb = 17
+ val b = 12
+}
+
+abstract class A{
+ val a: Int
+ val b: Int
+ val c: Int = 12
+}
+
+class B extends A{
+
+ val a = 10
+ //object bb
+ lazy val bb = 17
+ val b = 12
+}
+
+trait T {
+ private final val a = false
+}
+
+class Impl extends T
+
+
+object Test {
+ def main(args: Array[String]) {
+ println(new B().bb)
+ println(new C().bb)
+ }
+}
+
diff --git a/test/files/run/t3895b.scala b/test/files/run/t3895b.scala
new file mode 100644
index 0000000000..a74f7b2ead
--- /dev/null
+++ b/test/files/run/t3895b.scala
@@ -0,0 +1,27 @@
+class DryRun {
+ import scala.tools.nsc.{Global, Settings, CompilerCommand}
+ import scala.tools.nsc.reporters.ConsoleReporter
+
+ val settings = new Settings()
+ settings.classpath.value = System.getProperty("java.class.path")
+ val command = new CompilerCommand(List(), settings)
+ val reporter = new ConsoleReporter(settings, scala.Console.in, new java.io.PrintWriter(new java.io.PrintStream(scala.Console.out)))
+ object compiler extends Global(command.settings, reporter) {
+ object test1
+ lazy val test2 = 1
+ object test3
+ }
+ def test {
+ compiler.test1
+ compiler.test2
+ compiler.test3
+ val run = new compiler.Run
+ run compile command.files
+ }
+}
+
+object Test {
+ def main(args: Array[String]) {
+ new DryRun().test
+ }
+}
diff --git a/test/files/run/t3897.check b/test/files/run/t3897.check
new file mode 100644
index 0000000000..244b83716f
--- /dev/null
+++ b/test/files/run/t3897.check
@@ -0,0 +1,8 @@
+(One$$messages,scala.collection.mutable.MutableList<java.lang.String>)
+(One$$messages,scala.collection.mutable.MutableList<java.lang.String>)
+(messages,scala.collection.mutable.MutableList<java.lang.String>)
+(messages,scala.collection.mutable.MutableList<java.lang.String>)
+(One$$messages,scala.collection.mutable.MutableList<java.lang.String>)
+(One$$messages,scala.collection.mutable.MutableList<java.lang.String>)
+(messages,scala.collection.mutable.MutableList<java.lang.String>)
+(messages,scala.collection.mutable.MutableList<java.lang.String>)
diff --git a/test/files/run/t3897/J_2.java b/test/files/run/t3897/J_2.java
new file mode 100644
index 0000000000..178412dc92
--- /dev/null
+++ b/test/files/run/t3897/J_2.java
@@ -0,0 +1,27 @@
+import java.lang.reflect.*;
+
+public class J_2 {
+ public void f1(Class<?> clazz) {
+ Field[] fields = clazz.getDeclaredFields();
+ for (int i = 0 ; i < fields.length; i++) {
+ String name = fields[i].getName();
+ if (name.length() >= 7 && name.substring(0, 7).equals("bitmap$")) { }
+ else System.out.println("(" + name + "," + fields[i].getGenericType() + ")");
+ }
+ }
+ public void f2(Class<?> clazz) {
+ Method[] methods = clazz.getDeclaredMethods();
+ for (int i = 0 ; i < methods.length; i++) {
+ String name = methods[i].getName();
+ if (name.length() >= 7 && name.substring(0, 7).equals("bitmap$")) { }
+ else System.out.println("(" + name + "," + methods[i].getGenericReturnType() + ")");
+ }
+ }
+
+ public void javaRun() {
+ f1(One.class);
+ f2(One.class);
+ f1(Two.class);
+ f2(Two.class);
+ }
+} \ No newline at end of file
diff --git a/test/files/run/t3897/a_1.scala b/test/files/run/t3897/a_1.scala
new file mode 100644
index 0000000000..4da959e2ac
--- /dev/null
+++ b/test/files/run/t3897/a_1.scala
@@ -0,0 +1,8 @@
+class One {
+ private val messages = new collection.mutable.MutableList[String]
+ List("a") foreach { messages += _ }
+}
+
+class Two {
+ private val messages = new collection.mutable.MutableList[String]
+}
diff --git a/test/files/run/t3897/a_2.scala b/test/files/run/t3897/a_2.scala
new file mode 100644
index 0000000000..4d9e59ef05
--- /dev/null
+++ b/test/files/run/t3897/a_2.scala
@@ -0,0 +1,23 @@
+object Test {
+ def f1(clazz: Class[_]) = (
+ clazz.getDeclaredFields.toList
+ . filterNot (_.getName contains "bitmap$")
+ . map (f => (f.getName, f.getGenericType))
+ . foreach (println)
+ )
+ def f2(clazz: Class[_]) = (
+ clazz.getDeclaredMethods.toList
+ . filterNot (_.getName contains "bitmap$")
+ . map (f => (f.getName, f.getGenericReturnType))
+ . foreach (println)
+ )
+
+ def main(args: Array[String]): Unit = {
+ f1(classOf[One])
+ f2(classOf[One])
+ f1(classOf[Two])
+ f2(classOf[Two])
+
+ new J_2().javaRun
+ }
+}
diff --git a/test/files/run/t3923.scala b/test/files/run/t3923.scala
new file mode 100644
index 0000000000..484095a607
--- /dev/null
+++ b/test/files/run/t3923.scala
@@ -0,0 +1,8 @@
+object Test {
+ def main(args: Array[String]): Unit = {
+ assert(collection.mutable.ArraySeq() == Nil)
+ assert(collection.mutable.ArraySeq() == Seq())
+ assert(Seq() == collection.mutable.ArraySeq())
+ assert(Nil == collection.mutable.ArraySeq())
+ }
+}
diff --git a/test/files/run/t3932.check b/test/files/run/t3932.check
new file mode 100644
index 0000000000..5ec39bbdeb
--- /dev/null
+++ b/test/files/run/t3932.check
@@ -0,0 +1,6 @@
+true
+true
+true
+true
+true
+true
diff --git a/test/files/run/t3932.scala b/test/files/run/t3932.scala
new file mode 100644
index 0000000000..51fc16d6ea
--- /dev/null
+++ b/test/files/run/t3932.scala
@@ -0,0 +1,35 @@
+class Foo
+
+abstract class C {
+ val f: Foo
+ def g1 = (f == f)
+}
+object O1 extends C {
+ val f = new Foo()
+ def g2 = (f == f)
+}
+object O2 extends C {
+ object f extends Foo
+ def g2 = (f == f)
+}
+
+class O3 extends C {
+ object f extends Foo
+ def g2 = (f == f)
+}
+
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ println(O1.g1)
+ println(O1.g2)
+
+ println(O2.g1)
+ println(O2.g2)
+
+ val o3 = new O3()
+ println(o3.g1)
+ println(o3.g2)
+
+ }
+}
diff --git a/test/files/run/t3935.scala b/test/files/run/t3935.scala
new file mode 100644
index 0000000000..c66b1b0599
--- /dev/null
+++ b/test/files/run/t3935.scala
@@ -0,0 +1,15 @@
+
+
+
+
+object Test {
+ def main(args: Array[String]) {
+ val q = scala.collection.mutable.Queue[String]()
+ assert(q.length == 0)
+ try {
+ assert(q.front != null)
+ } catch {
+ case _ =>
+ }
+ }
+}
diff --git a/test/files/run/t3950.check b/test/files/run/t3950.check
new file mode 100644
index 0000000000..10f81c51ad
--- /dev/null
+++ b/test/files/run/t3950.check
@@ -0,0 +1,3 @@
+minus
+zero
+plus \ No newline at end of file
diff --git a/test/files/run/t3950.scala b/test/files/run/t3950.scala
new file mode 100644
index 0000000000..58466e13fb
--- /dev/null
+++ b/test/files/run/t3950.scala
@@ -0,0 +1,17 @@
+
+object NegativeId extends Enumeration {
+ val Negative = Value(-1, "minus")
+ val Zero = Value(0, "zero")
+ val Positive = Value(1, "plus")
+
+ def fromInt(id: Int) = values find (_.id == id) match {
+ case Some(v) => v
+ case None => null
+ }
+}
+
+object Test extends App {
+ println(NegativeId.fromInt(-1))
+ println(NegativeId.fromInt(0))
+ println(NegativeId.fromInt(1))
+}
diff --git a/test/files/run/t3964.check b/test/files/run/t3964.check
new file mode 100644
index 0000000000..55569e49e6
--- /dev/null
+++ b/test/files/run/t3964.check
@@ -0,0 +1,2 @@
+42
+-21
diff --git a/test/files/run/t3964.scala b/test/files/run/t3964.scala
new file mode 100644
index 0000000000..80ba361a20
--- /dev/null
+++ b/test/files/run/t3964.scala
@@ -0,0 +1,16 @@
+object Test {
+ class Base
+ object Bob extends Base
+ class Foo { def bippy = 42 }
+ class Oof { def bippy = -21 }
+
+ // I am more specific than you
+ implicit def f1(x: Bob.type): Foo = new Foo
+ implicit def f2(x: Base): Oof = new Oof
+
+ def main(args: Array[String]): Unit = {
+ // this would of course print an unambiguous 42
+ println(Bob.bippy)
+ println((new Base).bippy)
+ }
+}
diff --git a/test/files/run/t3970.scala b/test/files/run/t3970.scala
new file mode 100644
index 0000000000..f8c763bc85
--- /dev/null
+++ b/test/files/run/t3970.scala
@@ -0,0 +1,21 @@
+
+
+
+import collection.mutable._
+
+
+
+object Test {
+ def main(args: Array[String]) {
+ val dl = DoubleLinkedList[Int]()
+ dl.remove()
+
+ val dl2 = DoubleLinkedList[Int](1, 2, 3)
+ dl2.next.remove()
+ assert(dl2 == DoubleLinkedList(1, 3))
+
+ val dl3 = DoubleLinkedList[Int](1, 2, 3)
+ assert(dl3.drop(1) == DoubleLinkedList(2, 3))
+ assert(dl3.drop(1).prev == null)
+ }
+}
diff --git a/test/files/run/t3980.check b/test/files/run/t3980.check
new file mode 100644
index 0000000000..8bb03f18bb
--- /dev/null
+++ b/test/files/run/t3980.check
@@ -0,0 +1,3 @@
+once
+2
+2
diff --git a/test/files/run/t3980.scala b/test/files/run/t3980.scala
new file mode 100644
index 0000000000..4e693eba9b
--- /dev/null
+++ b/test/files/run/t3980.scala
@@ -0,0 +1,19 @@
+object A {
+ def run1 {
+ lazy val x: Unit = {(); println("once")}
+ x
+ x
+ }
+ def run2 {
+ lazy val y: Int = 2
+ println(y)
+ println(y)
+ }
+}
+
+object Test {
+ def main(args: Array[String]) = {
+ A.run1
+ A.run2
+ }
+} \ No newline at end of file
diff --git a/test/files/run/t3984.scala b/test/files/run/t3984.scala
new file mode 100644
index 0000000000..9a2e00a2a8
--- /dev/null
+++ b/test/files/run/t3984.scala
@@ -0,0 +1,52 @@
+object SetBug {
+ import scala.collection.immutable.{ Set => ImmutSet }
+ import scala.collection.mutable.{ Set => MutSet }
+
+ case class IH (i: Int, h: Int) {
+ override def hashCode: Int = h
+ }
+
+ def run() {
+ var is = ImmutSet.empty[IH]
+ var ms = MutSet.empty[IH]
+ for (ih <- List(IH(2,0),IH(0,0),IH(4,4),IH(6,4),IH(-8,1520786080))) {
+ is = is + ih
+ ms = ms + ih
+ }
+ assert(is == ms)
+ val x = IH(6,4)
+ is = is - x
+ ms = ms - x
+ assert(is == ms)
+ }
+}
+
+object MapBug {
+ import scala.collection.immutable.{ Map => ImmutMap }
+ import scala.collection.mutable.{ Map => MutMap }
+
+ case class IH (i: Int, h: Int) {
+ override def hashCode: Int = h
+ }
+
+ def run() {
+ var im = ImmutMap.empty[IH,IH]
+ var mm = MutMap.empty[IH,IH]
+ for (ih <- List(IH(2,0),IH(0,0),IH(4,4),IH(6,4),IH(-8,1520786080))) {
+ im = im + ((ih,ih))
+ mm = mm + ((ih,ih))
+ }
+ assert(im == mm)
+ val x = IH(6,4)
+ im = im - x
+ mm = mm - x
+ assert(im == mm)
+ }
+}
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ SetBug.run()
+ MapBug.run()
+ }
+}
diff --git a/test/files/run/t3989.scala b/test/files/run/t3989.scala
new file mode 100644
index 0000000000..0daa8abee3
--- /dev/null
+++ b/test/files/run/t3989.scala
@@ -0,0 +1,17 @@
+
+
+
+
+
+class Foo{ override def equals(o: Any) = false; override def hashCode = 1}
+
+// should not result in a stack overflow
+object Test {
+ def main(args: Array[String]) {
+ import collection.immutable.HashMap
+ var m = Map[Foo, Int]()
+ for (i <- 1 to 30000) m += (new Foo) -> i
+ assert(m.size == 30000)
+ m.toString
+ }
+}
diff --git a/test/files/run/t3996.scala b/test/files/run/t3996.scala
new file mode 100644
index 0000000000..e6e5549cfa
--- /dev/null
+++ b/test/files/run/t3996.scala
@@ -0,0 +1,13 @@
+
+
+
+
+
+// should not result in a stack overflow
+object Test {
+ def main(args: Array[String]) {
+ import collection.mutable.LinkedList
+ val l = new LinkedList[Int]() ++ (0 until 10000)
+ assert(l.length == 10000)
+ }
+}
diff --git a/test/files/run/t4013.scala b/test/files/run/t4013.scala
new file mode 100644
index 0000000000..da7fbc5b3f
--- /dev/null
+++ b/test/files/run/t4013.scala
@@ -0,0 +1,24 @@
+
+
+trait Base[B] {
+ def data: AnyRef;
+}
+
+
+class Suba[@specialized B](override val data: Array[B]) extends Base[B] {
+ assert(data != null)
+}
+
+
+class Subopt[@specialized B](override val data: Option[B]) extends Base[B] {
+ assert(data != null)
+}
+
+
+object Test {
+ def main(args: Array[String]) {
+ val ss = new Suba[String](Array(""))
+ val si = new Suba[Int](Array(0))
+ new Subopt[Int](Some(0))
+ }
+}
diff --git a/test/files/run/t4013b.scala b/test/files/run/t4013b.scala
new file mode 100644
index 0000000000..f17eaea3d3
--- /dev/null
+++ b/test/files/run/t4013b.scala
@@ -0,0 +1,20 @@
+
+
+trait Base[B] {
+ def data: AnyRef;
+}
+
+
+class M[@specialized(Int) A]
+
+
+class Sub3[@specialized(Int) B](override val data: M[B]) extends Base[B] {
+ assert(data != null)
+}
+
+
+object Test {
+ def main(args: Array[String]) {
+ new Sub3[Int](new M[Int])
+ }
+}
diff --git a/test/files/run/t4013c.scala b/test/files/run/t4013c.scala
new file mode 100644
index 0000000000..5737fff369
--- /dev/null
+++ b/test/files/run/t4013c.scala
@@ -0,0 +1,10 @@
+class Suba[@specialized(Int) B](val data: Array[B]) {
+ assert(data != null)
+}
+
+
+object Test {
+ def main(args: Array[String]) {
+ new Suba[Int](Array(0))
+ }
+}
diff --git a/test/files/run/t4024.scala b/test/files/run/t4024.scala
new file mode 100644
index 0000000000..ef768beb99
--- /dev/null
+++ b/test/files/run/t4024.scala
@@ -0,0 +1,9 @@
+object Test extends App {
+
+ val x = "abc"
+
+ val m = x.getClass.getMethod("toString")
+
+ assert(m.invoke(x, (Nil: List[AnyRef]): _*) == "abc")
+}
+
diff --git a/test/files/run/t4047.check b/test/files/run/t4047.check
new file mode 100644
index 0000000000..2a942a70e0
--- /dev/null
+++ b/test/files/run/t4047.check
@@ -0,0 +1,5 @@
+Unit: called A.foo
+Unit: called B.foo
+Unit: called C.foo
+Unit: called D.foo
+Unit: called D.foo
diff --git a/test/files/run/t4047.scala b/test/files/run/t4047.scala
new file mode 100644
index 0000000000..cd42a8b4df
--- /dev/null
+++ b/test/files/run/t4047.scala
@@ -0,0 +1,34 @@
+trait Foo[T] { val foo: T}
+
+class A extends Foo[Unit]{
+ lazy val foo = println("Unit: called A.foo")
+}
+
+class B extends Foo[Unit]{
+ val foo = println("Unit: called B.foo")
+}
+
+trait Bar[T] { def foo: T}
+
+class C extends Bar[Unit]{
+ lazy val foo = println("Unit: called C.foo")
+}
+
+class D extends Bar[Unit]{
+ def foo = println("Unit: called D.foo")
+}
+
+object Test extends Application {
+ val a: Foo[Unit] = new A
+ a.foo
+ a.foo
+ val b: Foo[Unit] = new B
+ b.foo
+ b.foo
+ val c: Bar[Unit] = new C
+ c.foo
+ c.foo
+ val d: Bar[Unit] = new D
+ d.foo
+ d.foo
+}
diff --git a/test/files/run/t405.scala b/test/files/run/t405.scala
new file mode 100644
index 0000000000..e736fc1e57
--- /dev/null
+++ b/test/files/run/t405.scala
@@ -0,0 +1,5 @@
+object Test extends App {
+ val x = M;
+ object M;
+ assert(x eq M)
+}
diff --git a/test/files/run/t4054.scala b/test/files/run/t4054.scala
new file mode 100644
index 0000000000..8f1f685854
--- /dev/null
+++ b/test/files/run/t4054.scala
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+object Test {
+ def main(args: Array[String]) {
+ val it = Iterator.from(1).map(n => n * n).scanLeft(0)(_+_)
+
+ assert(it.next == 0)
+ assert(it.next == 1)
+ assert(it.next == 5)
+ assert(it.next == 14)
+ assert(it.next == 30)
+ assert(it.next == 55)
+ assert(it.next == 91)
+ assert(it.next == 140)
+ assert(it.next == 204)
+ assert(it.next == 285)
+ assert(it.next == 385)
+ }
+}
diff --git a/test/files/run/t4062.check b/test/files/run/t4062.check
new file mode 100644
index 0000000000..1d474d5255
--- /dev/null
+++ b/test/files/run/t4062.check
@@ -0,0 +1,2 @@
+false
+true
diff --git a/test/files/run/t4062.scala b/test/files/run/t4062.scala
new file mode 100644
index 0000000000..6a5aea5b47
--- /dev/null
+++ b/test/files/run/t4062.scala
@@ -0,0 +1,16 @@
+class A(val f : String)
+
+class B(f: String) extends A(f) {
+ def foo(x: String) = x match {
+ case `f` => true
+ case _ => false
+ }
+}
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ val b = new B("abc")
+ println(b foo "bippy")
+ println(b foo "abc")
+ }
+}
diff --git a/test/files/run/t4072.flags b/test/files/run/t4072.flags
new file mode 100644
index 0000000000..ae08446055
--- /dev/null
+++ b/test/files/run/t4072.flags
@@ -0,0 +1 @@
+-Xcheckinit \ No newline at end of file
diff --git a/test/files/run/t4072.scala b/test/files/run/t4072.scala
new file mode 100644
index 0000000000..872072a4ce
--- /dev/null
+++ b/test/files/run/t4072.scala
@@ -0,0 +1,13 @@
+import scala.tools.nsc._
+
+object Test {
+ class DryRun {
+ val compiler = new Global(new Settings()) {
+ lazy val test1 = new AnyRef
+ }
+ }
+
+ def main(args: Array[String]) {
+ new DryRun().compiler.test1
+ }
+}
diff --git a/test/files/run/t408.scala b/test/files/run/t408.scala
new file mode 100644
index 0000000000..4d3dcbcb84
--- /dev/null
+++ b/test/files/run/t408.scala
@@ -0,0 +1,12 @@
+object Test
+{
+ val a = scala.collection.immutable.Set.empty ++ (0 to 100000)
+ val b = scala.collection.immutable.Set.empty ++ (0 to 100000)
+
+ def main(args: Array[String]): Unit = {
+ a -- b
+ a -- b
+ a -- b
+ a -- b
+ }
+}
diff --git a/test/files/run/t4080.check b/test/files/run/t4080.check
new file mode 100644
index 0000000000..66ce31bb43
--- /dev/null
+++ b/test/files/run/t4080.check
@@ -0,0 +1 @@
+LinkedList(1, 0, 2, 3)
diff --git a/test/files/run/t4080.scala b/test/files/run/t4080.scala
new file mode 100644
index 0000000000..92740ed776
--- /dev/null
+++ b/test/files/run/t4080.scala
@@ -0,0 +1,12 @@
+import scala.collection.mutable.LinkedList
+
+object Test {
+ def main(args: Array[String]) {
+ val ll = LinkedList(1, 2, 3)
+ ll.insert(LinkedList(0))
+ println(ll)
+ val ll2 = LinkedList[Int]()
+ try println(ll2.head)
+ catch { case _ => () }
+ }
+}
diff --git a/test/files/run/t4110.check b/test/files/run/t4110.check
new file mode 100644
index 0000000000..8b005989de
--- /dev/null
+++ b/test/files/run/t4110.check
@@ -0,0 +1,2 @@
+Object with Test$A with Test$B
+Object with Test$A with Test$B
diff --git a/test/files/run/t4110.scala b/test/files/run/t4110.scala
new file mode 100644
index 0000000000..4bd377b73e
--- /dev/null
+++ b/test/files/run/t4110.scala
@@ -0,0 +1,11 @@
+object Test extends App {
+ def inferredType[T : Manifest](v : T) = println(manifest[T])
+
+ trait A
+ trait B
+
+ inferredType(new A with B)
+
+ val name = new A with B
+ inferredType(name)
+} \ No newline at end of file
diff --git a/test/files/run/t4119/J.java b/test/files/run/t4119/J.java
new file mode 100644
index 0000000000..42508993ea
--- /dev/null
+++ b/test/files/run/t4119/J.java
@@ -0,0 +1,7 @@
+package foo.bar;
+
+public abstract class J {
+ protected void foo(J j) {
+ return;
+ }
+}
diff --git a/test/files/run/t4119/S.scala b/test/files/run/t4119/S.scala
new file mode 100644
index 0000000000..e5e3db5da3
--- /dev/null
+++ b/test/files/run/t4119/S.scala
@@ -0,0 +1,14 @@
+class S extends foo.bar.J {
+ sss =>
+
+ val fn = () => {
+ foo(S.this)
+ }
+ fn()
+}
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ new S
+ }
+}
diff --git a/test/files/run/t4122.scala b/test/files/run/t4122.scala
new file mode 100644
index 0000000000..7ead2b7742
--- /dev/null
+++ b/test/files/run/t4122.scala
@@ -0,0 +1,14 @@
+object Test {
+ val sw: Seq[Char] = "ab"
+ val sw2: Seq[Char] = Array('a', 'b')
+ val sw3 = Seq('a', 'b')
+ val sw4 = "ab".toList
+ val all = List(sw, sw2, sw3, sw4)
+
+ def main(args: Array[String]): Unit = {
+ for (s1 <- all ; s2 <- all) {
+ assert(s1 == s2, s1 + " != " + s2)
+ assert(s1.## == s2.##, s1 + ".## != " + s2 + ".##")
+ }
+ }
+}
diff --git a/test/files/run/t4146.scala b/test/files/run/t4146.scala
new file mode 100644
index 0000000000..93ce22b519
--- /dev/null
+++ b/test/files/run/t4146.scala
@@ -0,0 +1,7 @@
+object bob extends Application {
+ var name = "Bob"
+}
+
+object Test extends App {
+ assert(bob.name == "Bob")
+}
diff --git a/test/files/run/t4148.check b/test/files/run/t4148.check
new file mode 100644
index 0000000000..544b0d19d1
--- /dev/null
+++ b/test/files/run/t4148.check
@@ -0,0 +1,3 @@
+cce1
+5
+100
diff --git a/test/files/run/t4148.scala b/test/files/run/t4148.scala
new file mode 100644
index 0000000000..0739403594
--- /dev/null
+++ b/test/files/run/t4148.scala
@@ -0,0 +1,9 @@
+object Test {
+ val x1 = try { "aaa".asInstanceOf[Int] } catch { case _ => "cce1" }
+ val x2 = try { (5: Any).asInstanceOf[Int] } catch { case _ => "cce2" }
+ val x3 = try { (new java.lang.Short(100.toShort).asInstanceOf[Int]) } catch { case _ => "cce3" }
+
+ def main(args: Array[String]): Unit = {
+ List(x1, x2, x3) foreach println
+ }
+}
diff --git a/test/files/run/t4172.check b/test/files/run/t4172.check
new file mode 100644
index 0000000000..95e3eb950d
--- /dev/null
+++ b/test/files/run/t4172.check
@@ -0,0 +1,11 @@
+Type in expressions to have them evaluated.
+Type :help for more information.
+
+scala>
+
+scala> val c = { class C { override def toString = "C" }; ((new C, new C { def f = 2 })) }
+c: (C, C{def f: Int}) forSome { type C <: Object with ScalaObject } = (C,C)
+
+scala>
+
+scala>
diff --git a/test/files/run/t4172.scala b/test/files/run/t4172.scala
new file mode 100644
index 0000000000..3a08f2fecd
--- /dev/null
+++ b/test/files/run/t4172.scala
@@ -0,0 +1,7 @@
+import scala.tools.partest.ReplTest
+
+object Test extends ReplTest {
+ def code = """
+ val c = { class C { override def toString = "C" }; ((new C, new C { def f = 2 })) }
+ """
+}
diff --git a/test/files/run/t4201.scala b/test/files/run/t4201.scala
new file mode 100644
index 0000000000..f6c0acaf94
--- /dev/null
+++ b/test/files/run/t4201.scala
@@ -0,0 +1,7 @@
+object Test {
+ def main(args: Array[String]): Unit = {
+ val f = 0.0 to 1.0 by 1.0 / 3.0
+ assert(f.size == 4)
+ }
+}
+
diff --git a/test/files/run/t4238/J_1.java b/test/files/run/t4238/J_1.java
new file mode 100644
index 0000000000..21a4b182ad
--- /dev/null
+++ b/test/files/run/t4238/J_1.java
@@ -0,0 +1,16 @@
+import scala.*;
+
+class J_1 {
+ scala.collection.mutable.HashMap<String, String> map =
+ new scala.collection.mutable.HashMap<String, String>();
+
+ Function1<Tuple2<String, String>, Integer> f =
+ new scala.runtime.AbstractFunction1<Tuple2<String, String>, Integer>() {
+ public Integer apply(Tuple2<String, String> s) {
+ return s._1().length();
+ }
+ };
+
+ scala.collection.Seq<Integer> counts =
+ map.groupBy(f).keys().toList();
+}
diff --git a/test/files/run/t4238/s_2.scala b/test/files/run/t4238/s_2.scala
new file mode 100644
index 0000000000..a6e9bd11de
--- /dev/null
+++ b/test/files/run/t4238/s_2.scala
@@ -0,0 +1,5 @@
+object Test {
+ def main(args: Array[String]): Unit = {
+ val x = new J_1
+ }
+}
diff --git a/test/files/run/t4285.check b/test/files/run/t4285.check
new file mode 100644
index 0000000000..84f8929e43
--- /dev/null
+++ b/test/files/run/t4285.check
@@ -0,0 +1,17 @@
+Type in expressions to have them evaluated.
+Type :help for more information.
+
+scala>
+
+scala> val x = Array(1,2,3,4,5,6,7)
+x: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7)
+
+scala> val y = x transform (_ * 2)
+y: scala.collection.mutable.WrappedArray[Int] = WrappedArray(2, 4, 6, 8, 10, 12, 14)
+
+scala> println(y.sum)
+56
+
+scala>
+
+scala>
diff --git a/test/files/run/t4285.flags b/test/files/run/t4285.flags
new file mode 100644
index 0000000000..eb4d19bcb9
--- /dev/null
+++ b/test/files/run/t4285.flags
@@ -0,0 +1 @@
+-optimise \ No newline at end of file
diff --git a/test/files/run/t4285.scala b/test/files/run/t4285.scala
new file mode 100644
index 0000000000..1d9afcaf3d
--- /dev/null
+++ b/test/files/run/t4285.scala
@@ -0,0 +1,8 @@
+import scala.tools.partest.ReplTest
+object Test extends ReplTest {
+ def code = """
+ |val x = Array(1,2,3,4,5,6,7)
+ |val y = x transform (_ * 2)
+ |println(y.sum)
+ """.stripMargin
+}
diff --git a/test/files/run/t4288.scala b/test/files/run/t4288.scala
new file mode 100644
index 0000000000..eafd2808f1
--- /dev/null
+++ b/test/files/run/t4288.scala
@@ -0,0 +1,13 @@
+object Test {
+ def f1 = scala.collection.mutable.ListBuffer(1 to 9: _*).slice(-5, -1)
+ def f2 = scala.collection.mutable.ListBuffer(1 to 9: _*).readOnly.slice(-5, -1)
+ def f3 = Vector(1 to 9: _*).slice(-5, -1)
+ def f4 = Traversable(1 to 9: _*).slice(-5, -1)
+ def f5 = (1 to 9).toArray.slice(-5, -1)
+ def f6 = (1 to 9).toStream.slice(-5, -1)
+ def f7 = (1 to 9).slice(-5, -1)
+
+ def main(args: Array[String]): Unit = {
+ List[Traversable[Int]](f1, f2, f3, f4, f5, f6, f7) foreach (x => assert(x.isEmpty, x))
+ }
+}
diff --git a/test/files/run/t429.check b/test/files/run/t429.check
new file mode 100644
index 0000000000..22b91b7850
--- /dev/null
+++ b/test/files/run/t429.check
@@ -0,0 +1 @@
+AyB5
diff --git a/test/files/run/t429.scala b/test/files/run/t429.scala
new file mode 100644
index 0000000000..e62a6b307b
--- /dev/null
+++ b/test/files/run/t429.scala
@@ -0,0 +1,15 @@
+object Test {
+ abstract class A {
+ Console.print("A");
+ val x: Int;
+ val y: Int = {Console.print("y"); x + 1}
+ }
+ class B extends A {
+ Console.print("B");
+ lazy val z = 0;
+ lazy val x = 4 + z
+ }
+ def main (args: Array[String]): Unit = {
+ Console.print((new B).y);
+ }
+}
diff --git a/test/files/run/t4294.scala b/test/files/run/t4294.scala
new file mode 100644
index 0000000000..fafaf1d8ef
--- /dev/null
+++ b/test/files/run/t4294.scala
@@ -0,0 +1,7 @@
+object Test {
+ def main(args: Array[String]) {
+ (Stream.from(1).collect{case x if x > 5000000 => x}: Stream[Int])
+
+ assert((Stream from 1 take 10 collect { case x if x <= 3 => x*x }).sum == 14)
+ }
+}
diff --git a/test/files/run/t4297.scala b/test/files/run/t4297.scala
new file mode 100644
index 0000000000..7497dfe4c2
--- /dev/null
+++ b/test/files/run/t4297.scala
@@ -0,0 +1,7 @@
+object Test {
+ def main(args: Array[String]): Unit = {
+ def f = List(1,2,3).view
+ assert(f.toString == "SeqView(...)")
+ assert(f.mkString == "123")
+ }
+}
diff --git a/test/files/run/t4300.check b/test/files/run/t4300.check
new file mode 100644
index 0000000000..f7bacac931
--- /dev/null
+++ b/test/files/run/t4300.check
@@ -0,0 +1,4 @@
+A
+A
+A
+A
diff --git a/test/files/run/t4300.scala b/test/files/run/t4300.scala
new file mode 100644
index 0000000000..243d347830
--- /dev/null
+++ b/test/files/run/t4300.scala
@@ -0,0 +1,25 @@
+
+trait A {
+ def f() = println("A")
+}
+
+class B extends A {
+ def b() = super[A].f()
+ trait C {
+ def c() = B.super[A].f()
+ }
+ def g() = for(i <- 0 until 1) super[A].f()
+ def h() = for(i <- 0 until 1) B.super[A].f()
+ override def f() = println("B")
+}
+
+
+object Test {
+ def main(args : Array[String]) : Unit = {
+ val b = new B()
+ b.b()
+ new b.C(){}.c()
+ b.g() // was ClassCastException
+ b.h() // was ClassCastException
+ }
+}
diff --git a/test/files/run/t4317.check b/test/files/run/t4317.check
new file mode 100644
index 0000000000..c6d0e511a5
--- /dev/null
+++ b/test/files/run/t4317.check
@@ -0,0 +1,3 @@
+0
+99
+33
diff --git a/test/files/run/t4317.flags b/test/files/run/t4317.flags
new file mode 100644
index 0000000000..e8fb65d50c
--- /dev/null
+++ b/test/files/run/t4317.flags
@@ -0,0 +1 @@
+-Xfatal-warnings \ No newline at end of file
diff --git a/test/files/run/t4317/J_2.java b/test/files/run/t4317/J_2.java
new file mode 100644
index 0000000000..4e81b390eb
--- /dev/null
+++ b/test/files/run/t4317/J_2.java
@@ -0,0 +1,5 @@
+public class J_2 {
+ int bar1() { return S_1.foo1(String.class) ; }
+ int bar2() { return S_1.foo2(String.class, 0); }
+ int bar3() { return S_1.foo3(11, 22); }
+} \ No newline at end of file
diff --git a/test/files/run/t4317/S_1.scala b/test/files/run/t4317/S_1.scala
new file mode 100644
index 0000000000..2de408268c
--- /dev/null
+++ b/test/files/run/t4317/S_1.scala
@@ -0,0 +1,9 @@
+object S_1 {
+ def foo1(x: Class[_ <: AnyRef]) = 0
+ def foo2(x: Class[_ <: AnyRef], y: Int) = 99
+ def foo3[T](x: Int, y: Int) = x + y
+ def foo4a(x: Unit): Unit = ()
+ def foo4[T](x: Unit): Unit = ()
+ def foo5[T <: Unit](x: T): T = sys.error("")
+ def foo6[T](x: Class[_], y: Class[T], z: Class[_ <: T]) = ((x, y, z))
+}
diff --git a/test/files/run/t4317/S_3.scala b/test/files/run/t4317/S_3.scala
new file mode 100644
index 0000000000..dd04ea31ef
--- /dev/null
+++ b/test/files/run/t4317/S_3.scala
@@ -0,0 +1,8 @@
+object Test {
+ def main(args: Array[String]): Unit = {
+ val j = new J_2()
+ println(j.bar1())
+ println(j.bar2())
+ println(j.bar3())
+ }
+}
diff --git a/test/files/run/t4387.scala b/test/files/run/t4387.scala
new file mode 100644
index 0000000000..68cbe97d08
--- /dev/null
+++ b/test/files/run/t4387.scala
@@ -0,0 +1,12 @@
+object Test {
+ import xml.XML.loadString
+ def mkElem(arg: String) = <foo a="1" b="2" c="3" d="4" e={arg} />
+
+ val x1 = mkElem("5")
+ val x2 = mkElem("50")
+
+ def main(args: Array[String]): Unit = {
+ assert(x1 == loadString("" + x1))
+ assert(x2 != loadString("" + x1))
+ }
+}
diff --git a/test/files/run/t4396.check b/test/files/run/t4396.check
new file mode 100644
index 0000000000..58f4fc5138
--- /dev/null
+++ b/test/files/run/t4396.check
@@ -0,0 +1,5 @@
+hallo
+constructor
+out:22
+bye
+foo
diff --git a/test/files/run/t4396.scala b/test/files/run/t4396.scala
new file mode 100644
index 0000000000..ca143165b7
--- /dev/null
+++ b/test/files/run/t4396.scala
@@ -0,0 +1,35 @@
+// #43896
+trait M extends DelayedInit {
+ def delayedInit(body : => Unit) {
+ println("hallo")
+ body
+ println("bye")
+ }
+}
+
+class C(init : Int) extends M {
+ def foo = init
+ println("constructor")
+ var x = init
+ println("out:"+x)
+}
+
+// #4380
+object Main {
+ def main(argv: Array[String]) {
+ class Bip {
+ class Foo { override def toString() = "foo" }
+ object Main extends App {
+ val cbn = new Foo()
+ }
+ Main.main(Array())
+ println(Main.cbn)
+ }
+ new Bip
+ }
+}
+
+object Test extends App {
+ new C(22)
+ Main.main(Array())
+}
diff --git a/test/files/run/t4398.scala b/test/files/run/t4398.scala
new file mode 100644
index 0000000000..1d57eb688d
--- /dev/null
+++ b/test/files/run/t4398.scala
@@ -0,0 +1,11 @@
+
+
+object Test {
+ def main(args: Array[String]) {
+ val x = 1 to 10 toSet
+ val y = x + 5
+ val z = y - 154321
+ assert(x eq y)
+ assert(x eq z)
+ }
+}
diff --git a/test/files/run/t4426.scala b/test/files/run/t4426.scala
new file mode 100644
index 0000000000..95759444d6
--- /dev/null
+++ b/test/files/run/t4426.scala
@@ -0,0 +1,24 @@
+import scala.tools.nsc._
+
+object Test {
+ val x = {
+ val settings = new Settings()
+ settings.classpath.value = System.getProperty("java.class.path")
+
+ object cc extends Global(settings) {
+ object dummy
+
+ override def computePluginPhases() = {
+ super.computePluginPhases()
+ assert(dummy ne null, "Dummy not initialized")
+ }
+ }
+ new cc.Run
+ ()
+ }
+
+ def main(args: Array[String]): Unit = {
+
+ }
+}
+
diff --git a/test/files/run/t4459.scala b/test/files/run/t4459.scala
new file mode 100644
index 0000000000..6e1b871cbe
--- /dev/null
+++ b/test/files/run/t4459.scala
@@ -0,0 +1,12 @@
+import collection._
+
+object Test {
+ def main(args: Array[String]) {
+ for (i <- 0 until 2000) {
+ foo((0 until 10000).toSeq.par)
+ }
+ }
+
+ def foo(arg: GenSeq[_]): String = arg.map(x => x).mkString(",")
+}
+
diff --git a/test/files/run/t4461.check b/test/files/run/t4461.check
new file mode 100644
index 0000000000..b05c7b5589
--- /dev/null
+++ b/test/files/run/t4461.check
@@ -0,0 +1,7 @@
+Include(End,1)
+Include(End,2)
+Include(End,3)
+Include(End,4)
+Include(End,5)
+Include(End,6)
+Include(End,7) \ No newline at end of file
diff --git a/test/files/run/t4461.scala b/test/files/run/t4461.scala
new file mode 100644
index 0000000000..99da122f6b
--- /dev/null
+++ b/test/files/run/t4461.scala
@@ -0,0 +1,19 @@
+import scala.collection.mutable._
+import scala.collection.script._
+
+
+// #4461
+object Test {
+ def main(args: Array[String]) {
+ val buf = new ArrayBuffer[Int] with ObservableBuffer[Int]
+ buf.subscribe(new Subscriber[Message[Int], ObservableBuffer[Int]] {
+ def notify(pub: ObservableBuffer[Int], event: Message[Int]) = println(event)
+ })
+
+ buf += 1 // works
+ buf ++= Array(2) // works
+ buf ++= ArrayBuffer(3, 4) // works
+ buf ++= List(5) // works
+ buf ++= collection.immutable.Vector(6, 7) // works
+ }
+}
diff --git a/test/files/run/t4535.check b/test/files/run/t4535.check
new file mode 100644
index 0000000000..9d4ce0d535
--- /dev/null
+++ b/test/files/run/t4535.check
@@ -0,0 +1,3 @@
+ArrayStack(1, 2, 3)
+ArrayStack(1, 2, 3, 4, 5, 6)
+ArrayStack(6, 5, 4, 3, 2, 1) \ No newline at end of file
diff --git a/test/files/run/t4535.scala b/test/files/run/t4535.scala
new file mode 100644
index 0000000000..eba79431c9
--- /dev/null
+++ b/test/files/run/t4535.scala
@@ -0,0 +1,30 @@
+
+
+import collection._
+
+
+// #4535
+object Test {
+
+ def main(args: Array[String]) {
+ val as = new mutable.ArrayStack[Int]
+ as push 1
+ as push 2
+ as push 3
+ println(as.reverse)
+
+ as push 4
+ as push 5
+ as push 6
+ println(as.reverse)
+
+ println(as map { x => x })
+
+ for (i <- 0 until 100) {
+ as push i
+ assert(as == as.map(x => x))
+ assert(as == as.reverse.reverse)
+ }
+ }
+
+}
diff --git a/test/files/run/t4542.check b/test/files/run/t4542.check
new file mode 100644
index 0000000000..cd7a2905e2
--- /dev/null
+++ b/test/files/run/t4542.check
@@ -0,0 +1,22 @@
+Type in expressions to have them evaluated.
+Type :help for more information.
+
+scala>
+
+scala> @deprecated("foooo", "ReplTest version 1.0-FINAL") class Foo() {
+ override def toString = "Bippy"
+}
+defined class Foo
+
+scala> val f = new Foo
+<console>:8: warning: class Foo is deprecated: foooo
+ val f = new Foo
+ ^
+<console>:8: warning: class Foo is deprecated: foooo
+ val f = new Foo
+ ^
+f: Foo = Bippy
+
+scala>
+
+scala>
diff --git a/test/files/run/t4542.scala b/test/files/run/t4542.scala
new file mode 100644
index 0000000000..5d6e8fe87c
--- /dev/null
+++ b/test/files/run/t4542.scala
@@ -0,0 +1,11 @@
+import scala.tools.partest.ReplTest
+
+object Test extends ReplTest {
+ override def extraSettings = "-deprecation"
+ def code = """
+ |@deprecated("foooo", "ReplTest version 1.0-FINAL") class Foo() {
+ | override def toString = "Bippy"
+ |}
+ |val f = new Foo
+ """.stripMargin
+}
diff --git a/test/files/run/t4558.scala b/test/files/run/t4558.scala
new file mode 100644
index 0000000000..e7661421dc
--- /dev/null
+++ b/test/files/run/t4558.scala
@@ -0,0 +1,6 @@
+object Test {
+ def main(args: Array[String]): Unit = {
+ val xs = Seq(1,2,3).view.groupBy(identity)
+ assert(xs.size == 3)
+ }
+}
diff --git a/test/files/run/t4560.check b/test/files/run/t4560.check
new file mode 100644
index 0000000000..fd3c81a4d7
--- /dev/null
+++ b/test/files/run/t4560.check
@@ -0,0 +1,2 @@
+5
+5
diff --git a/test/files/run/t4560.scala b/test/files/run/t4560.scala
new file mode 100644
index 0000000000..1392077e46
--- /dev/null
+++ b/test/files/run/t4560.scala
@@ -0,0 +1,39 @@
+object Pimper {
+ implicit def pimp(i: Int) = new {
+ def test: String = i.toString
+ }
+}
+
+trait A
+
+trait B {
+ self: A =>
+
+ def test {
+ import Pimper.pimp
+
+ println(5.test)
+ }
+}
+
+class A2
+
+trait B2 {
+ self: A2 =>
+
+ def test {
+ import Pimper.pimp
+
+ println(5.test)
+ }
+}
+
+object Test extends A with B {
+ def main(args: Array[String]) {
+ test
+ Test2.test
+ }
+}
+
+object Test2 extends A2 with B2
+
diff --git a/test/files/run/t4565_1.check b/test/files/run/t4565_1.check
new file mode 100644
index 0000000000..27ba77ddaf
--- /dev/null
+++ b/test/files/run/t4565_1.check
@@ -0,0 +1 @@
+true
diff --git a/test/files/run/t4565_1.scala b/test/files/run/t4565_1.scala
new file mode 100644
index 0000000000..1353355573
--- /dev/null
+++ b/test/files/run/t4565_1.scala
@@ -0,0 +1,14 @@
+trait T {
+ def foo = {
+ object A
+ def a(x: Any) = x == A
+ a(A)
+ }
+}
+
+object Test {
+ def main(args: Array[String]) {
+ val t = new T{}
+ println(t.foo)
+ }
+} \ No newline at end of file
diff --git a/test/files/run/t4570.check b/test/files/run/t4570.check
new file mode 100644
index 0000000000..257cc5642c
--- /dev/null
+++ b/test/files/run/t4570.check
@@ -0,0 +1 @@
+foo
diff --git a/test/files/run/t4570.scala b/test/files/run/t4570.scala
new file mode 100644
index 0000000000..5408caf6db
--- /dev/null
+++ b/test/files/run/t4570.scala
@@ -0,0 +1,8 @@
+object Test extends Enumeration {
+ val foo = Value
+ def bar = withName("foo")
+
+ def main(args: Array[String]): Unit = {
+ values foreach println
+ }
+}
diff --git a/test/files/run/t4582.scala b/test/files/run/t4582.scala
new file mode 100644
index 0000000000..f747791546
--- /dev/null
+++ b/test/files/run/t4582.scala
@@ -0,0 +1,11 @@
+object Test {
+ def main(args: Array[String]): Unit = {
+ var flag = true
+ def it = {
+ flag = false
+ Iterator(2)
+ }
+ val flat = (Iterator(Iterator(1)) ++ Iterator(it)).flatten
+ assert(flag)
+ }
+}
diff --git a/test/files/run/t4592.check b/test/files/run/t4592.check
new file mode 100644
index 0000000000..e133386482
--- /dev/null
+++ b/test/files/run/t4592.check
@@ -0,0 +1,3 @@
+3.14
+3.14
+3.14
diff --git a/test/files/run/t4592.scala b/test/files/run/t4592.scala
new file mode 100644
index 0000000000..d1666d84d7
--- /dev/null
+++ b/test/files/run/t4592.scala
@@ -0,0 +1,10 @@
+object Test {
+ def repeat[T](count: Int = 1, x: Boolean = true)(thunk: => T) : T = (0 until count).map(_ => thunk).last
+ def repeat[T](thunk: => T) : T = repeat()(thunk)
+
+ def main(args: Array[String]): Unit = {
+ println(repeat(3.14))
+ println(repeat(count=5)(3.14))
+ println(repeat(count=5,x=false)(3.14))
+ }
+}
diff --git a/test/files/run/t4601.check b/test/files/run/t4601.check
new file mode 100644
index 0000000000..83b0b0b0ff
--- /dev/null
+++ b/test/files/run/t4601.check
@@ -0,0 +1 @@
+'blubber
diff --git a/test/files/run/t4601.scala b/test/files/run/t4601.scala
new file mode 100644
index 0000000000..fe40634842
--- /dev/null
+++ b/test/files/run/t4601.scala
@@ -0,0 +1,15 @@
+class A
+
+trait B {
+ self: A =>
+
+ def test {
+ println('blubber)
+ }
+}
+
+object Test extends A with B {
+ def main(args: Array[String]) {
+ test
+ }
+} \ No newline at end of file
diff --git a/test/files/run/t4608.scala b/test/files/run/t4608.scala
new file mode 100644
index 0000000000..2d43bebd10
--- /dev/null
+++ b/test/files/run/t4608.scala
@@ -0,0 +1,8 @@
+// #4608
+object Test {
+
+ def main(args: Array[String]) {
+ ((1 to 100) sliding 10).toList.par.map{_.map{i => i * i}}.flatten
+ }
+
+}
diff --git a/test/files/run/t4617.check b/test/files/run/t4617.check
new file mode 100644
index 0000000000..6bbcce30eb
--- /dev/null
+++ b/test/files/run/t4617.check
@@ -0,0 +1 @@
+Str 8.0
diff --git a/test/files/run/t4617.scala b/test/files/run/t4617.scala
new file mode 100644
index 0000000000..3a877c1915
--- /dev/null
+++ b/test/files/run/t4617.scala
@@ -0,0 +1,15 @@
+object Test {
+ def f1 = new { def f { lazy val d = 0d } }
+ def f2 = {
+ lazy val d = 4D
+ lazy val f = 4f
+
+ def bar = "Str " + (d + f)
+ bar
+ }
+
+ def main(args: Array[String]): Unit = {
+ f1
+ println(f2)
+ }
+}
diff --git a/test/files/run/t4656.check b/test/files/run/t4656.check
new file mode 100644
index 0000000000..15a62794a9
--- /dev/null
+++ b/test/files/run/t4656.check
@@ -0,0 +1 @@
+List(1, 2, 3)
diff --git a/test/files/run/t4656.scala b/test/files/run/t4656.scala
new file mode 100644
index 0000000000..ab3e3cf53d
--- /dev/null
+++ b/test/files/run/t4656.scala
@@ -0,0 +1,13 @@
+object Test {
+ def f = {
+ val buf = new collection.mutable.ListBuffer[Int]
+ buf ++= List(1, 2, 3)
+ val l = buf.toList
+ buf prependToList List(4, 5, 6)
+ l
+ }
+
+ def main(args: Array[String]): Unit = {
+ println(f)
+ }
+}
diff --git a/test/files/run/t4658.check b/test/files/run/t4658.check
new file mode 100644
index 0000000000..743b0faee3
--- /dev/null
+++ b/test/files/run/t4658.check
@@ -0,0 +1,80 @@
+Ranges:
+1073741824
+1073741824
+0
+0
+55
+25
+1
+-45
+-55
+0
+-24
+-30
+0
+-40
+-55
+-10
+-24
+-30
+-10
+IntRanges:
+Disabled #1
+Disabled #2
+0
+0
+55
+25
+1
+-45
+-55
+0
+-24
+-30
+0
+-40
+-55
+-10
+-24
+-30
+-10
+LongRanges:
+Disabled #1
+Disabled #2
+0
+0
+55
+25
+1
+-45
+-55
+0
+-24
+-30
+0
+-40
+-55
+-10
+-24
+-30
+-10
+BigIntRanges:
+Disabled #1
+Disabled #2
+0
+0
+55
+25
+1
+-45
+-55
+0
+-24
+-30
+0
+-40
+-55
+-10
+-24
+-30
+-10
diff --git a/test/files/run/t4658.scala b/test/files/run/t4658.scala
new file mode 100644
index 0000000000..e1799fae9b
--- /dev/null
+++ b/test/files/run/t4658.scala
@@ -0,0 +1,41 @@
+import scala.collection.immutable.NumericRange
+//#4658
+object Test {
+
+ case class R(start: Int, end: Int, step: Int = 1, inclusive: Boolean = true)
+
+ val rangeData = Array(
+ R(1, Int.MaxValue), R(-Int.MaxValue, -1), R(0, 0), R(0,0, inclusive = false), R(1,10),
+ R(1,10,2), R(1,10,11), R(-10, -5), R(-10, 0), R(-10, 10), R(-10, -5, 2), R(-10, 0, 2), R(-10, 10, 2),
+ R(-10, -5, inclusive = false), R(-10, 0, inclusive = false), R(-10, 10, inclusive = false),
+ R(-10, -5, 2, inclusive = false), R(-10, 0, 2, inclusive = false), R(-10, 10, 2, inclusive = false)
+ )
+
+ def ranges = rangeData.map(r => if (r.inclusive) r.start to r.end by r.step else r.start until r.end by r.step)
+
+ def numericIntRanges = rangeData.map(r => if (r.inclusive) NumericRange.inclusive(r.start, r.end, r.step) else NumericRange(r.start, r.end, r.step))
+
+ def numericLongRanges = rangeData.map(r => if (r.inclusive) NumericRange.inclusive(r.start.toLong, r.end, r.step) else NumericRange(r.start.toLong, r.end, r.step))
+
+ def numericBigIntRanges = rangeData.map(r => if (r.inclusive) NumericRange.inclusive(BigInt(r.start), BigInt(r.end), BigInt(r.step)) else NumericRange(BigInt(r.start), BigInt(r.end), BigInt(r.step)))
+
+ def main(args: Array[String]) {
+ // We drop the first two tests for all ranges which don't have a decent sum implementation,
+ // because it is just too slow.
+ println("Ranges:")
+ ranges.foreach{range => println(range.sum)}
+ println("IntRanges:")
+ println("Disabled #1")
+ println("Disabled #2")
+ numericIntRanges.drop(2).foreach{range => println(range.sum)}
+ println("LongRanges:")
+ println("Disabled #1")
+ println("Disabled #2")
+ numericLongRanges.drop(2).foreach{range => println(range.sum)}
+ println("BigIntRanges:")
+ println("Disabled #1")
+ println("Disabled #2")
+ numericBigIntRanges.drop(2).foreach{range => println(range.sum)}
+ }
+
+} \ No newline at end of file
diff --git a/test/files/run/t4660.scala b/test/files/run/t4660.scala
new file mode 100644
index 0000000000..e57bb4bf25
--- /dev/null
+++ b/test/files/run/t4660.scala
@@ -0,0 +1,11 @@
+object Test {
+ def main(args: Array[String]): Unit = {
+ val traversable = 1 to 20 map (_.toString)
+ def normalize(m: Map[Char, Traversable[String]]) = m.map { case (k,v) => (k, v.toList) }
+
+ val groupedFromView = (traversable view).groupBy(_(0))
+ val groupedFromStrict = traversable.groupBy(_(0))
+
+ assert(normalize(groupedFromView) == normalize(groupedFromStrict))
+ }
+}
diff --git a/test/files/run/t4671.check b/test/files/run/t4671.check
new file mode 100644
index 0000000000..4699818cd4
--- /dev/null
+++ b/test/files/run/t4671.check
@@ -0,0 +1,46 @@
+Type in expressions to have them evaluated.
+Type :help for more information.
+
+scala> object o { val file = sys.props("partest.cwd") + "/t4671.scala" }
+defined module o
+
+scala> val s = scala.io.Source.fromFile(o.file)
+s: scala.io.BufferedSource = non-empty iterator
+
+scala> println(s.getLines.mkString("\n"))
+import scala.tools.partest.ReplTest
+
+object Test extends ReplTest {
+ // My god...it's full of quines
+ def code = """
+object o { val file = sys.props("partest.cwd") + "/t4671.scala" }
+val s = scala.io.Source.fromFile(o.file)
+println(s.getLines.mkString("\n"))
+
+val s = scala.io.Source.fromFile(o.file)
+println(s.mkString(""))
+""".trim
+}
+
+scala>
+
+scala> val s = scala.io.Source.fromFile(o.file)
+s: scala.io.BufferedSource = non-empty iterator
+
+scala> println(s.mkString(""))
+import scala.tools.partest.ReplTest
+
+object Test extends ReplTest {
+ // My god...it's full of quines
+ def code = """
+object o { val file = sys.props("partest.cwd") + "/t4671.scala" }
+val s = scala.io.Source.fromFile(o.file)
+println(s.getLines.mkString("\n"))
+
+val s = scala.io.Source.fromFile(o.file)
+println(s.mkString(""))
+""".trim
+}
+
+
+scala>
diff --git a/test/files/run/t4671.scala b/test/files/run/t4671.scala
new file mode 100644
index 0000000000..aba0138aad
--- /dev/null
+++ b/test/files/run/t4671.scala
@@ -0,0 +1,13 @@
+import scala.tools.partest.ReplTest
+
+object Test extends ReplTest {
+ // My god...it's full of quines
+ def code = """
+object o { val file = sys.props("partest.cwd") + "/t4671.scala" }
+val s = scala.io.Source.fromFile(o.file)
+println(s.getLines.mkString("\n"))
+
+val s = scala.io.Source.fromFile(o.file)
+println(s.mkString(""))
+""".trim
+}
diff --git a/test/files/run/t4680.check b/test/files/run/t4680.check
new file mode 100644
index 0000000000..b5cfc651f2
--- /dev/null
+++ b/test/files/run/t4680.check
@@ -0,0 +1,60 @@
+
+
+// new C { }
+-A -B -C
+
+// new C { 5 }
+-A -B -C
+A+ B+ C+
+
+// new D()
+-A -B -C -D
+A+ B+ C+ D+
+
+// new D() { }
+-A -B -C -D
+A+ B+ C+ D+
+
+// new D() { val x = 5 }
+-A -B -C -D
+A+ B+ C+ D+
+A+ B+ C+ D+
+
+// new { val x = 5 } with D()
+-A -B -C -D
+A+ B+ C+ D+
+
+// new E() { val x = 5 }
+-A -B -C -D
+A+ B+ C+ D+ E+
+-E
+
+A+ B+ C+ D+ E+
+
+A+ B+ C+ D+ E+
+
+
+// new { val x = 5 } with E()
+-A -B -C -D
+A+ B+ C+ D+ E+
+-E
+
+A+ B+ C+ D+ E+
+
+
+// new { val x = 5 } with E() { }
+-A -B -C -D
+A+ B+ C+ D+ E+
+-E
+
+A+ B+ C+ D+ E+
+
+
+// new { val x = 5 } with E() { 5 }
+-A -B -C -D
+A+ B+ C+ D+ E+
+-E
+
+A+ B+ C+ D+ E+
+
+A+ B+ C+ D+ E+
diff --git a/test/files/run/t4680.scala b/test/files/run/t4680.scala
new file mode 100644
index 0000000000..88611df7ae
--- /dev/null
+++ b/test/files/run/t4680.scala
@@ -0,0 +1,71 @@
+trait A extends DelayedInit {
+ print("-A ")
+
+ def delayedInit(body: => Unit) = {
+ body
+ postConstructionCode
+ }
+ protected def postConstructionCode: Unit = {
+ print("\nA+ ")
+ }
+}
+trait B extends A {
+ print("-B ")
+ override protected def postConstructionCode: Unit = {
+ super.postConstructionCode
+ print("B+ ")
+ }
+}
+
+trait C extends B {
+ print("-C ")
+ override protected def postConstructionCode: Unit = {
+ super.postConstructionCode
+ print("C+ ")
+ }
+}
+
+class D() extends C {
+ print("-D ")
+ override protected def postConstructionCode: Unit = {
+ super.postConstructionCode
+ print("D+ ")
+ }
+}
+class E() extends D() {
+ println("-E")
+ override protected def postConstructionCode: Unit = {
+ super.postConstructionCode
+ println("E+")
+ }
+}
+
+
+object Test {
+ def p(msg: String) = println("\n\n// " + msg)
+
+ def main(args: Array[String]) {
+ p("new C { }")
+ new C { }
+ p("new C { 5 }")
+ new C { 5 }
+
+ p("new D()")
+ new D()
+ p("new D() { }")
+ new D() { }
+ p("new D() { val x = 5 }")
+ new D() { val x = 5 }
+ p("new { val x = 5 } with D()")
+ new { val x = 5 } with D()
+
+ p("new E() { val x = 5 }")
+ new E() { val x = 5 }
+ p("new { val x = 5 } with E()")
+ new { val x = 5 } with E()
+ p("new { val x = 5 } with E() { }")
+ new { val x = 5 } with E() { }
+ p("new { val x = 5 } with E() { 5 }")
+ new { val x = 5 } with E() { 5 }
+ }
+}
diff --git a/test/files/run/t4697.check b/test/files/run/t4697.check
new file mode 100644
index 0000000000..b9d569380c
--- /dev/null
+++ b/test/files/run/t4697.check
@@ -0,0 +1 @@
+50005000
diff --git a/test/files/run/t4697.scala b/test/files/run/t4697.scala
new file mode 100644
index 0000000000..728d095ff8
--- /dev/null
+++ b/test/files/run/t4697.scala
@@ -0,0 +1,8 @@
+object Test {
+ var st = Stream(0)
+ for (i <- 1 to 10000) st = i +: st
+
+ def main(args: Array[String]): Unit = {
+ println(st.take(10000).sum)
+ }
+}
diff --git a/test/files/run/t4709.scala b/test/files/run/t4709.scala
new file mode 100644
index 0000000000..c61a440397
--- /dev/null
+++ b/test/files/run/t4709.scala
@@ -0,0 +1,10 @@
+
+
+import collection.GenSeq
+
+
+object Test {
+ def main(args: Array[String]) {
+ val Seq(1, 2) = Stream(1, 2)
+ }
+}
diff --git a/test/files/run/t4710.check b/test/files/run/t4710.check
new file mode 100644
index 0000000000..aa2f08d452
--- /dev/null
+++ b/test/files/run/t4710.check
@@ -0,0 +1,7 @@
+Type in expressions to have them evaluated.
+Type :help for more information.
+
+scala> def method : String = { implicit def f(s: Symbol) = "" ; 'symbol }
+method: String
+
+scala>
diff --git a/test/files/run/t4710.scala b/test/files/run/t4710.scala
new file mode 100644
index 0000000000..5e5b1e86b5
--- /dev/null
+++ b/test/files/run/t4710.scala
@@ -0,0 +1,6 @@
+import scala.tools.partest.ReplTest
+
+object Test extends ReplTest {
+ def code = """def method : String = { implicit def f(s: Symbol) = "" ; 'symbol }"""
+}
+
diff --git a/test/files/run/t4723.scala b/test/files/run/t4723.scala
new file mode 100644
index 0000000000..4278ff9aaf
--- /dev/null
+++ b/test/files/run/t4723.scala
@@ -0,0 +1,9 @@
+
+
+
+object Test {
+ def main(args: Array[String]) {
+ assert(Nil == collection.parallel.ParSeq())
+ assert(collection.parallel.ParSeq() == Nil)
+ }
+}
diff --git a/test/files/run/t4752.scala b/test/files/run/t4752.scala
new file mode 100644
index 0000000000..2a9fc5361f
--- /dev/null
+++ b/test/files/run/t4752.scala
@@ -0,0 +1,10 @@
+object Test {
+ object Bippy {
+ case object Dingus
+ }
+
+ def main(args: Array[String]): Unit = {
+ assert(None.## == "None".##, None)
+ assert(Test.Bippy.Dingus.## == "Dingus".##, Test.Bippy.Dingus)
+ }
+}
diff --git a/test/files/run/t4753.check b/test/files/run/t4753.check
new file mode 100644
index 0000000000..7b19ee8df2
--- /dev/null
+++ b/test/files/run/t4753.check
@@ -0,0 +1 @@
+boolean
diff --git a/test/files/run/t4753.scala b/test/files/run/t4753.scala
new file mode 100644
index 0000000000..98f3e92678
--- /dev/null
+++ b/test/files/run/t4753.scala
@@ -0,0 +1,12 @@
+trait A {
+ val actualType: Class[_]
+}
+trait B extends A {
+ final val actualType = classOf[Boolean]
+}
+
+object Test extends B {
+ def main(args: Array[String]): Unit = {
+ println(actualType)
+ }
+}
diff --git a/test/files/run/t4761.check b/test/files/run/t4761.check
new file mode 100644
index 0000000000..1698a57bfa
--- /dev/null
+++ b/test/files/run/t4761.check
@@ -0,0 +1,4 @@
+Vector(1, 1, 1, 1, 1)
+Vector(Vector(1, 1, 1, 1, 1))
+List(1, 2)
+List(List(1, 2))
diff --git a/test/files/run/t4761.scala b/test/files/run/t4761.scala
new file mode 100644
index 0000000000..a9c245d7d5
--- /dev/null
+++ b/test/files/run/t4761.scala
@@ -0,0 +1,11 @@
+object Test {
+ def main(args: Array[String]) {
+ val gs = for (x <- (1 to 5)) yield { if (x % 2 == 0) List(1).seq else List(1).par }
+ println(gs.flatten)
+ println(gs.transpose)
+
+ val s = Stream(Vector(1).par, Vector(2).par)
+ println(s.flatten.toList)
+ println(s.transpose.map(_.toList).toList)
+ }
+}
diff --git a/test/files/run/t4766.check b/test/files/run/t4766.check
new file mode 100644
index 0000000000..d00491fd7e
--- /dev/null
+++ b/test/files/run/t4766.check
@@ -0,0 +1 @@
+1
diff --git a/test/files/run/t4766.scala b/test/files/run/t4766.scala
new file mode 100644
index 0000000000..c2a864ddb2
--- /dev/null
+++ b/test/files/run/t4766.scala
@@ -0,0 +1,7 @@
+object Test extends App {
+ val x = new {
+ def > = 1
+ }
+
+ println(x>)
+}
diff --git a/test/files/run/t4794.check b/test/files/run/t4794.check
new file mode 100644
index 0000000000..f599e28b8a
--- /dev/null
+++ b/test/files/run/t4794.check
@@ -0,0 +1 @@
+10
diff --git a/test/files/run/t4794.scala b/test/files/run/t4794.scala
new file mode 100644
index 0000000000..afe89fa429
--- /dev/null
+++ b/test/files/run/t4794.scala
@@ -0,0 +1,12 @@
+trait Mutable[@specialized A] { def a: A; def a_=(a0: A): Unit }
+trait NotSpecialized { }
+class Arr[@specialized A](val arr: Array[A]) {
+ def bippy(m: Mutable[A]) { m.a = arr(0) }
+ def quux(m: Mutable[A] with NotSpecialized) { m.a = arr(0) }
+}
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ println(classOf[Arr[_]].getMethods filter (_.getName contains "quux") size) // expect 10, not 1
+ }
+}
diff --git a/test/files/run/t4827.scala b/test/files/run/t4827.scala
new file mode 100644
index 0000000000..7270cf169d
--- /dev/null
+++ b/test/files/run/t4827.scala
@@ -0,0 +1,15 @@
+object Test {
+ def main(args: Array[String]): Unit = Foo.foo()
+}
+
+trait CommonTrait {
+ def foo(): String = null
+}
+
+class Foo
+
+object Foo {
+ def goo() = new Foo() with CommonTrait
+
+ def foo(): String = null
+}
diff --git a/test/files/run/t4827b.scala b/test/files/run/t4827b.scala
new file mode 100644
index 0000000000..84d6d907d3
--- /dev/null
+++ b/test/files/run/t4827b.scala
@@ -0,0 +1,18 @@
+package foo {
+ class Foo { }
+ object Foo {
+ def bippy(x: Int) = x
+ }
+}
+
+package bar {
+ class Bippy extends foo.Foo {
+ def bippy(x: Int) = x
+ }
+}
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ new bar.Bippy bippy 5
+ }
+}
diff --git a/test/files/run/t4875.check b/test/files/run/t4875.check
new file mode 100644
index 0000000000..f7609d5ca5
--- /dev/null
+++ b/test/files/run/t4875.check
@@ -0,0 +1,17 @@
+Type in expressions to have them evaluated.
+Type :help for more information.
+
+scala>
+
+scala> import scala.reflect.Code
+import scala.reflect.Code
+
+scala> def codeOf[A](code: Code[A]) = code
+codeOf: [A](code: scala.reflect.Code[A])scala.reflect.Code[A]
+
+scala> codeOf((x: Iterable[_]) => throw new Exception)
+res0: scala.reflect.Code[Iterable[_] => Nothing] = Code(tree = ((x: Iterable[Any]) => throw new scala.`package`.Exception()), manifest = scala.Function1[scala.collection.Iterable[Any], Nothing])
+
+scala>
+
+scala>
diff --git a/test/files/run/t4875.scala b/test/files/run/t4875.scala
new file mode 100644
index 0000000000..c17211aede
--- /dev/null
+++ b/test/files/run/t4875.scala
@@ -0,0 +1,12 @@
+import scala.tools.nsc.interpreter._
+import scala.tools.partest.ReplTest
+
+object Test extends ReplTest {
+ class M[@specialized T] { }
+
+ def code = """
+ |import scala.reflect.Code
+ |def codeOf[A](code: Code[A]) = code
+ |codeOf((x: Iterable[_]) => throw new Exception)
+ """.stripMargin
+}
diff --git a/test/files/run/t4891.check b/test/files/run/t4891.check
new file mode 100644
index 0000000000..072f8df8d4
--- /dev/null
+++ b/test/files/run/t4891.check
@@ -0,0 +1,8 @@
+test.generic.T1
+ (m) public abstract A test.generic.T1.t1(A)
+test.generic.C1
+ (m) public void test.generic.C1.m1()
+test.generic.C2
+ (m) public void test.generic.C1.m1()
+null
+interface scala.ScalaObject
diff --git a/test/files/run/t4891/J_2.java b/test/files/run/t4891/J_2.java
new file mode 100644
index 0000000000..db1cc52b13
--- /dev/null
+++ b/test/files/run/t4891/J_2.java
@@ -0,0 +1,13 @@
+import test.generic.*;
+
+public class J_2 {
+ public static <A> void foo(T1<A> x) {
+ // x.m1();
+ }
+
+ public static void main(String[] args) {
+ Bug4891.main(null);
+ T1<Object> x = new C2<Object>();
+ foo(x);
+ }
+}
diff --git a/test/files/run/t4891/S_1.scala b/test/files/run/t4891/S_1.scala
new file mode 100644
index 0000000000..3309d22fbd
--- /dev/null
+++ b/test/files/run/t4891/S_1.scala
@@ -0,0 +1,26 @@
+package test.generic {
+ class C1[A] {
+ def m1(): Unit = ()
+ }
+
+ trait T1[A] extends C1[A] {
+ def t1(x: A) = x
+ }
+
+ class C2[A] extends T1[A]
+}
+
+import scala.tools.partest._
+
+object Bug4891 extends SigTest {
+ import test.generic._
+
+ def main(args: Array[String]): Unit = {
+ show[T1[_]]()
+ show[C1[_]]()
+ show[C2[_]]("m1")
+
+ println(classOf[T1[_]].getGenericSuperclass)
+ classOf[T1[_]].getGenericInterfaces foreach println
+ }
+}
diff --git a/test/files/run/t4891/S_3.scala b/test/files/run/t4891/S_3.scala
new file mode 100644
index 0000000000..0da4912bc5
--- /dev/null
+++ b/test/files/run/t4891/S_3.scala
@@ -0,0 +1,5 @@
+object Test {
+ def main(args: Array[String]): Unit = {
+ J_2 main null
+ }
+}
diff --git a/test/files/run/t4894.scala b/test/files/run/t4894.scala
new file mode 100644
index 0000000000..aa3b4340af
--- /dev/null
+++ b/test/files/run/t4894.scala
@@ -0,0 +1,27 @@
+
+
+
+
+
+object Test {
+
+ def main(args: Array[String]) {
+ import collection._
+ val hs = mutable.HashSet[Int]()
+ hs ++= 1 to 10
+ hs --= 1 to 10
+
+ val phs = parallel.mutable.ParHashSet[Int]()
+ phs ++= 1 to 10
+ for (i <- 1 to 10) assert(phs(i))
+ phs --= 1 to 10
+ assert(phs.isEmpty)
+
+ val phm = parallel.mutable.ParHashMap[Int, Int]()
+ phm ++= ((1 to 10) zip (1 to 10))
+ for (i <- 1 to 10) assert(phm(i) == i)
+ phm --= 1 to 10
+ assert(phm.isEmpty)
+ }
+
+}
diff --git a/test/files/run/t4895.scala b/test/files/run/t4895.scala
new file mode 100644
index 0000000000..a0e8c19f00
--- /dev/null
+++ b/test/files/run/t4895.scala
@@ -0,0 +1,16 @@
+object Test {
+
+ def checkPar(sz: Int) {
+ import collection._
+ val hs = mutable.HashSet[Int]() ++ (1 to sz)
+ assert(hs.par.map(_ + 1).seq.toSeq.sorted == (2 to (sz + 1)))
+ }
+
+ def main(args: Array[String]) {
+ for (i <- 0 until 100) checkPar(i)
+ for (i <- 100 until 1000 by 50) checkPar(i)
+ for (i <- 1000 until 10000 by 500) checkPar(i)
+ for (i <- 10000 until 100000 by 5000) checkPar(i)
+ }
+
+}
diff --git a/test/files/run/t4930.check b/test/files/run/t4930.check
new file mode 100644
index 0000000000..a58efd4685
--- /dev/null
+++ b/test/files/run/t4930.check
@@ -0,0 +1,2 @@
+List(1)
+List(1)
diff --git a/test/files/run/t4930.scala b/test/files/run/t4930.scala
new file mode 100644
index 0000000000..775f627948
--- /dev/null
+++ b/test/files/run/t4930.scala
@@ -0,0 +1,11 @@
+import collection.immutable.SortedMap
+
+object Test {
+ implicit val ord: Ordering[Array[Byte]] = Ordering.by((_: Array[Byte]).toIterable)
+
+ def main(args: Array[String]): Unit = {
+ val m = SortedMap(Array[Byte](1) -> 0)
+ println(m.to(Array[Byte](1)) flatMap (_._1.mkString))
+ println(m.from(Array[Byte](1)) flatMap (_._1.mkString))
+ }
+}
diff --git a/test/files/run/t498.scala b/test/files/run/t498.scala
index 50be317c4c..b4ede951f0 100644
--- a/test/files/run/t498.scala
+++ b/test/files/run/t498.scala
@@ -1,5 +1,5 @@
-object Test extends Application {
+object Test extends App {
// the function passed to flatMap produces lots of empty streams, but this should not overflow the stack
val res = Stream.from(1).flatMap(i => if (i < 3000) Stream.empty else List(1))
println(res take 42 force)
-} \ No newline at end of file
+}
diff --git a/test/files/run/t5052.scala b/test/files/run/t5052.scala
new file mode 100644
index 0000000000..9e418e8ac5
--- /dev/null
+++ b/test/files/run/t5052.scala
@@ -0,0 +1,6 @@
+object Test extends App {
+ assert(<elem attr={null:String} /> xml_== <elem />)
+ assert(<elem attr={None} /> xml_== <elem />)
+ assert(<elem /> xml_== <elem attr={null:String} />)
+ assert(<elem /> xml_== <elem attr={None} />)
+}
diff --git a/test/files/run/t5080.check b/test/files/run/t5080.check
new file mode 100644
index 0000000000..1385f264af
--- /dev/null
+++ b/test/files/run/t5080.check
@@ -0,0 +1 @@
+hey
diff --git a/test/files/run/t5080.scala b/test/files/run/t5080.scala
new file mode 100644
index 0000000000..ce72d13a54
--- /dev/null
+++ b/test/files/run/t5080.scala
@@ -0,0 +1,24 @@
+object Test extends App {
+
+ abstract class Value {
+ }
+
+ case class Num(value: Int) extends Value {
+ override def toString = value.toString;
+ }
+
+ implicit def conversions(x: Value) = new {
+ def toInt =
+ x match {
+ case Num(n) => n
+ case _ => throw new RuntimeException
+ }
+ }
+
+ def eval(v: Value): Value = {
+ println("hey")
+ Num(1)
+ }
+
+ eval(Num(1)).toInt
+}
diff --git a/test/files/run/t5105.check b/test/files/run/t5105.check
new file mode 100644
index 0000000000..1d4f6efff4
--- /dev/null
+++ b/test/files/run/t5105.check
@@ -0,0 +1 @@
+You buttered your bread. Now sleep in it!
diff --git a/test/files/run/t5105.scala b/test/files/run/t5105.scala
new file mode 100644
index 0000000000..f5a9a3c4da
--- /dev/null
+++ b/test/files/run/t5105.scala
@@ -0,0 +1,14 @@
+object Test {
+ def main(args: Array[String]) {
+ new foo.Bar
+ println("You buttered your bread. Now sleep in it!")
+ }
+}
+
+package foo {
+ trait Foo { def foo() {} }
+ class Bar extends Baz with Foo
+
+ abstract class Baz
+ object Baz extends Foo
+}
diff --git a/test/files/run/t5115.scala b/test/files/run/t5115.scala
new file mode 100644
index 0000000000..cf25214715
--- /dev/null
+++ b/test/files/run/t5115.scala
@@ -0,0 +1,14 @@
+import scala.collection.Iterable
+
+object Test extends App {
+ def assertHonorsIterableContract(i: Iterable[_]) = assert(i.size == i.iterator.size)
+
+ assertHonorsIterableContract(<a/>.attributes)
+ assertHonorsIterableContract(<a x=""/>.attributes)
+ assertHonorsIterableContract(<a y={None}/>.attributes)
+ assertHonorsIterableContract(<a y={None} x=""/>.attributes)
+ assertHonorsIterableContract(<a a="" y={None} />.attributes)
+ assertHonorsIterableContract(<a y={null:String}/>.attributes)
+ assertHonorsIterableContract(<a y={null:String} x=""/>.attributes)
+ assertHonorsIterableContract(<a a="" y={null:String} />.attributes)
+}
diff --git a/test/files/run/t5230.check b/test/files/run/t5230.check
new file mode 100644
index 0000000000..5db6ec9b38
--- /dev/null
+++ b/test/files/run/t5230.check
@@ -0,0 +1,2 @@
+2
+evaluated = null
diff --git a/test/files/run/t5230.scala b/test/files/run/t5230.scala
new file mode 100644
index 0000000000..5aab8f9290
--- /dev/null
+++ b/test/files/run/t5230.scala
@@ -0,0 +1,19 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ class C {
+ val x = 2
+ }
+
+ println(new C().x)
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ val evaluated = toolbox.runExpr(ttree)
+ println("evaluated = " + evaluated)
+}
diff --git a/test/files/run/t5239.check b/test/files/run/t5239.check
new file mode 100644
index 0000000000..40fe6a76e7
--- /dev/null
+++ b/test/files/run/t5239.check
@@ -0,0 +1,13 @@
+result = 2{Int(2)}
+[[syntax trees at end of typer]]// Scala source: NoSourceFile
+package <empty> {
+ final object __wrapper$1 extends Object {
+ def this(): object __wrapper$1 = {
+ __wrapper$1.super.this();
+ ()
+ };
+ def wrapper(): Int = 2
+ }
+}
+
+evaluated = 2
diff --git a/test/files/run/t5239.scala b/test/files/run/t5239.scala
new file mode 100644
index 0000000000..1f404196ba
--- /dev/null
+++ b/test/files/run/t5239.scala
@@ -0,0 +1,20 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ 2
+ };
+
+ val settings = new Settings
+ settings.Xprint.value = List("typer")
+
+ val reporter = new ConsoleReporter(settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ println("result = " + toolbox.showAttributed(ttree))
+
+ val evaluated = toolbox.runExpr(ttree)
+ println("evaluated = " + evaluated)
+}
diff --git a/test/files/run/t5266_1.check b/test/files/run/t5266_1.check
new file mode 100644
index 0000000000..3feac16a0b
--- /dev/null
+++ b/test/files/run/t5266_1.check
@@ -0,0 +1,2 @@
+2
+evaluated = null \ No newline at end of file
diff --git a/test/files/run/t5266_1.scala b/test/files/run/t5266_1.scala
new file mode 100644
index 0000000000..18e288e685
--- /dev/null
+++ b/test/files/run/t5266_1.scala
@@ -0,0 +1,16 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ def x = 2
+ println(x)
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ val evaluated = toolbox.runExpr(ttree)
+ println("evaluated = " + evaluated)
+} \ No newline at end of file
diff --git a/test/files/run/t5266_2.check b/test/files/run/t5266_2.check
new file mode 100644
index 0000000000..3feac16a0b
--- /dev/null
+++ b/test/files/run/t5266_2.check
@@ -0,0 +1,2 @@
+2
+evaluated = null \ No newline at end of file
diff --git a/test/files/run/t5266_2.scala b/test/files/run/t5266_2.scala
new file mode 100644
index 0000000000..eb319583f8
--- /dev/null
+++ b/test/files/run/t5266_2.scala
@@ -0,0 +1,17 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ def x = 2
+ def y = x
+ println(y)
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ val evaluated = toolbox.runExpr(ttree)
+ println("evaluated = " + evaluated)
+}
diff --git a/test/files/run/t576.check b/test/files/run/t576.check
new file mode 100644
index 0000000000..8a1218a102
--- /dev/null
+++ b/test/files/run/t576.check
@@ -0,0 +1,5 @@
+1
+2
+3
+4
+5
diff --git a/test/files/run/t576.scala b/test/files/run/t576.scala
new file mode 100644
index 0000000000..dc09d8dc98
--- /dev/null
+++ b/test/files/run/t576.scala
@@ -0,0 +1,45 @@
+class A {
+ override def equals(other: Any) = other match {
+ case _: this.type => true
+ case _ => false
+ }
+}
+
+object Dingus {
+ def IamDingus = 5
+}
+
+object Test {
+ val x1 = new A
+ val x2 = new A
+
+ val x3 = new { self =>
+ override def equals(other : Any) = other match {
+ case that: self.type => true
+ case _ => false
+ }
+ }
+ val x4 = new { self =>
+ def f(x: Any) = x match {
+ case _: x1.type => 1
+ case _: x2.type => 2
+ case _: x3.type => 3
+ case _: self.type => 4
+ case x: Dingus.type => x.IamDingus
+ }
+ }
+
+ def main(args: Array[String]): Unit = {
+
+ assert(x1 == x1)
+ assert(x1 != x2)
+ assert(x1 != ())
+ assert(x2 != x1)
+
+ assert(x3 == x3)
+ assert(x3 != x2)
+ assert(x2 != x3)
+
+ List(x1, x2, x3, x4, Dingus) map x4.f foreach println
+ }
+} \ No newline at end of file
diff --git a/test/files/run/bug594.check b/test/files/run/t594.check
index 814f4a4229..814f4a4229 100644
--- a/test/files/run/bug594.check
+++ b/test/files/run/t594.check
diff --git a/test/files/run/t594.scala b/test/files/run/t594.scala
new file mode 100644
index 0000000000..f923a3cd2a
--- /dev/null
+++ b/test/files/run/t594.scala
@@ -0,0 +1,8 @@
+object Test {
+ def main(args: Array[String]): Unit = {
+ val array = Array("one", "two", "three")
+ val firstTwo: Array[String] = array.slice(0,2)
+ for (x <- firstTwo)
+ Console.println(x)
+ }
+}
diff --git a/test/files/run/bug601.check b/test/files/run/t601.check
index 7c2a4f6a15..7c2a4f6a15 100644
--- a/test/files/run/bug601.check
+++ b/test/files/run/t601.check
diff --git a/test/files/run/bug601.scala b/test/files/run/t601.scala
index 98b51ce97c..98b51ce97c 100644
--- a/test/files/run/bug601.scala
+++ b/test/files/run/t601.scala
diff --git a/test/files/run/bug603.check b/test/files/run/t603.check
index 1f40825021..1f40825021 100644
--- a/test/files/run/bug603.check
+++ b/test/files/run/t603.check
diff --git a/test/files/run/t603.scala b/test/files/run/t603.scala
new file mode 100644
index 0000000000..b8825c933b
--- /dev/null
+++ b/test/files/run/t603.scala
@@ -0,0 +1,33 @@
+object forceDelay {
+ class Susp[+A](lazyValue: => A) extends Function0[A] {
+ private var func: () => Any = () => lazyValue
+ private var value: Any = null
+
+ override def apply() = {
+ if (func != null) {
+ value = func().asInstanceOf[A]
+ func = null
+ }
+ value.asInstanceOf[A]
+ }
+
+ override def toString() =
+ if (func == null) "Susp(" + value + ")"
+ else "Susp(?)"
+ }
+
+ def delay[A](value: => A) = new Susp[A](value)
+ implicit def force[A](s: Susp[A]): A = s()
+}
+
+object Test {
+ import forceDelay._
+
+ def main(args: Array[String]) = {
+ val s: Susp[Int] = delay { Console.println("evaluating..."); 3 }
+ Console.println("s = " + s)
+ Console.println("s() = " + s())
+ Console.println("s = " + s)
+ Console.println("2 + s = " + (2 + s))
+ }
+}
diff --git a/test/files/run/bug627.check b/test/files/run/t627.check
index 39e641d987..39e641d987 100644
--- a/test/files/run/bug627.check
+++ b/test/files/run/t627.check
diff --git a/test/files/run/t627.scala b/test/files/run/t627.scala
new file mode 100644
index 0000000000..ecaf150741
--- /dev/null
+++ b/test/files/run/t627.scala
@@ -0,0 +1,6 @@
+object Test {
+ def main(args: Array[String]) {
+ val s: Seq[Int] = Array(1, 2, 3, 4)
+ println(s)
+ }
+}
diff --git a/test/files/run/t629.check b/test/files/run/t629.check
new file mode 100644
index 0000000000..d86bac9de5
--- /dev/null
+++ b/test/files/run/t629.check
@@ -0,0 +1 @@
+OK
diff --git a/test/files/run/bug629.scala b/test/files/run/t629.scala
index 67baead5f1..67baead5f1 100644
--- a/test/files/run/bug629.scala
+++ b/test/files/run/t629.scala
diff --git a/test/files/run/bug657.check b/test/files/run/t657.check
index b0aad4deb5..b0aad4deb5 100644
--- a/test/files/run/bug657.check
+++ b/test/files/run/t657.check
diff --git a/test/files/run/t657.scala b/test/files/run/t657.scala
new file mode 100644
index 0000000000..a9726092e7
--- /dev/null
+++ b/test/files/run/t657.scala
@@ -0,0 +1,51 @@
+abstract class BaseList {
+ type Node <: NodeImpl;
+ implicit def convertNode(ni : NodeImpl) = ni.asInstanceOf[Node];
+ abstract class NodeImpl;
+}
+abstract class LinkedList extends BaseList {
+ type Node <: NodeImpl;
+ trait NodeImpl extends super.NodeImpl;
+}
+trait OffsetList extends LinkedList {
+ type Node <: NodeImpl;
+ trait NodeImpl extends super.NodeImpl;
+}
+
+trait PriorityTree extends BaseList {
+ type Node <: NodeImpl;
+ trait NodeImpl extends super.NodeImpl {
+ def chop : Node = this;
+ }
+}
+
+trait PrecedenceParser extends LinkedList with PriorityTree {
+ type Node <: NodeImpl;
+ trait NodeImpl extends super[LinkedList].NodeImpl with super[PriorityTree].NodeImpl;
+}
+
+trait Matcher extends PrecedenceParser {
+ type Node <: NodeImpl;
+ trait NodeImpl extends super.NodeImpl;
+
+ type Matchable <: Node with MatchableImpl;
+ implicit def convertMatchable(m : MatchableImpl) = m.asInstanceOf[Matchable];
+ trait MatchableImpl extends NodeImpl {
+ override def chop : Node = {
+ Console.println("passed"); super.chop;
+ }
+ }
+}
+
+class Test1 extends OffsetList with Matcher {
+ type Node = NodeImpl;
+ trait NodeImpl extends super[OffsetList].NodeImpl with super[Matcher].NodeImpl;
+ class MatchableImpl extends super.MatchableImpl with NodeImpl;
+ type Matchable = MatchableImpl;
+}
+
+object Test extends App {
+ val test = new Test1;
+ val m = new test.MatchableImpl;
+ m.chop;
+}
diff --git a/test/files/run/bug744.check b/test/files/run/t744.check
index 757bf01370..757bf01370 100644
--- a/test/files/run/bug744.check
+++ b/test/files/run/t744.check
diff --git a/test/files/run/t744.scala b/test/files/run/t744.scala
new file mode 100644
index 0000000000..d5e9f6df34
--- /dev/null
+++ b/test/files/run/t744.scala
@@ -0,0 +1,20 @@
+trait Linked {
+ type File <: FileImpl;
+ trait FileImpl {
+ Console.println("Hello from linked");
+ }
+}
+object Test {
+ class Test extends Linked {
+ trait FileImpl extends super.FileImpl {
+// val x: int = 1
+ }
+ class File extends FileImpl;
+ }
+ def main(args : Array[String]) : Unit = {
+ Console.println("BEGIN");
+ val test = new Test;
+ val file = new test.File;
+ Console.println("END");
+ }
+}
diff --git a/test/files/run/t751.scala b/test/files/run/t751.scala
new file mode 100644
index 0000000000..294d3af5c2
--- /dev/null
+++ b/test/files/run/t751.scala
@@ -0,0 +1,6 @@
+object Test {
+ def main(args: Array[String]): Unit = {
+ val map = Map(1 -> "a", 2 -> "b", 3 -> "c")
+ assert(map.filterKeys(_ % 2 == 0).isInstanceOf[scala.collection.immutable.Map[_,_]])
+ }
+}
diff --git a/test/files/run/t874.check b/test/files/run/t874.check
new file mode 100644
index 0000000000..91de7e0a03
--- /dev/null
+++ b/test/files/run/t874.check
@@ -0,0 +1,2 @@
+U created with xyz and 2
+U created with abc and 1
diff --git a/test/files/run/t874.scala b/test/files/run/t874.scala
new file mode 100644
index 0000000000..41d124f728
--- /dev/null
+++ b/test/files/run/t874.scala
@@ -0,0 +1,17 @@
+object Test {
+ abstract class Base {
+ val U: {
+ def apply[A](x1: A)(x2: Int): Any
+ }
+ U("xyz")(2)
+ }
+ class Mix extends Base {
+ case class U[A](x1: A)(x2: Int) {
+ Console.println("U created with "+x1+" and "+x2)
+ }
+ }
+ def main(args : Array[String]) : Unit = {
+ val obvious: Base = new Mix;
+ obvious.U("abc")(1)
+ }
+}
diff --git a/test/files/run/bug889.check b/test/files/run/t889.check
index 67ca2bf467..67ca2bf467 100644
--- a/test/files/run/bug889.check
+++ b/test/files/run/t889.check
diff --git a/test/files/run/t889.scala b/test/files/run/t889.scala
new file mode 100644
index 0000000000..c2c1730811
--- /dev/null
+++ b/test/files/run/t889.scala
@@ -0,0 +1,9 @@
+object Test extends App {
+
+ val a = List("a")
+
+ a match {
+ case Seq("a", "b", rest @ _*) => println("a, b, " + rest)
+ case Seq(first, rest @ _*) => println("first: " + first + ", rest: " + rest)
+ }
+}
diff --git a/test/files/run/bug920.check b/test/files/run/t920.check
index 76018072e0..76018072e0 100644
--- a/test/files/run/bug920.check
+++ b/test/files/run/t920.check
diff --git a/test/files/run/t920.scala b/test/files/run/t920.scala
new file mode 100644
index 0000000000..1e12e6ba87
--- /dev/null
+++ b/test/files/run/t920.scala
@@ -0,0 +1,20 @@
+object Test {
+ trait A;
+ trait Foo0 { def foo : A; }
+ trait Baz extends Foo0;
+ trait B extends A {
+ def initialize = {
+ trait Foo extends Test.Foo0 {
+ def foo : B.this.type = B.this;
+ }
+ class baz extends Baz with Foo {
+ override def toString = "baz"
+ }
+ Console.println(new baz);
+ }
+ }
+ object b extends B;
+ def main(args : Array[String]) : Unit = {
+ b.initialize;
+ }
+}
diff --git a/test/files/run/t949.scala b/test/files/run/t949.scala
new file mode 100644
index 0000000000..a9c5d08c50
--- /dev/null
+++ b/test/files/run/t949.scala
@@ -0,0 +1,14 @@
+object Test extends App {
+
+ private def f = new T { val state = State.A }
+
+ private object State extends Enumeration {
+ val A, B = Value
+ }
+
+ f
+}
+
+trait T {
+}
+
diff --git a/test/files/run/t978.scala b/test/files/run/t978.scala
new file mode 100644
index 0000000000..3ffac92761
--- /dev/null
+++ b/test/files/run/t978.scala
@@ -0,0 +1,38 @@
+class Foo(val n: Int) {
+ override def hashCode = n % 2 // pretty bad hash
+ override def equals(other: Any): Boolean = other match {
+ case f: Foo => f.n == n
+ case _ => false
+ }
+
+ override def toString = "" + n
+}
+
+object Test extends App {
+ val set = new collection.mutable.HashSet[Foo]
+// val set = new collection.jcl.HashSet[Foo]
+
+ val max = 200
+ for (x <- 1 to max)
+ set += new Foo(x)
+
+ testRemove(2)
+ testExists(2)
+
+ def testRemove(m: Int) {
+ for (x <- 1 to max; if x % m == 0) {
+ val f = new Foo(x)
+ set -= f
+ assert(!(set contains f))
+ testExists(m)
+ }
+ }
+
+ def testExists(m: Int) {
+ for (x <- 1 to max; if x % m == 1) {
+ val f = new Foo(x)
+ assert(set contains f, "For element: " + f + " set: " + set)
+ }
+ }
+
+}
diff --git a/test/files/run/tailcalls.scala b/test/files/run/tailcalls.scala
index 7f40277d4d..04a1a8ba19 100644
--- a/test/files/run/tailcalls.scala
+++ b/test/files/run/tailcalls.scala
@@ -193,11 +193,11 @@ object FancyTailCalls {
val f2 = new FancyTailCalls
}
-object PolyObject extends Application {
- def tramp[A](x: Int): Int =
+object PolyObject extends App {
+ def tramp[A](x: Int): Int =
if (x > 0)
tramp[A](x - 1)
- else
+ else
0
}
@@ -233,7 +233,7 @@ class NonTailCall {
if (n == 0) 0
else f2(n - 1)
}
-
+
}
//############################################################################
@@ -273,7 +273,7 @@ object Test {
}
println
}
-
+
def check_overflow(name: String, closure: => Int) {
print("test " + name)
try {
@@ -295,7 +295,7 @@ object Test {
while (!stop) {
try {
calibrator.f(n, n);
- if (n >= Math.MAX_INT / 2) error("calibration failure");
+ if (n >= Int.MaxValue / 2) error("calibration failure");
n = 2 * n;
} catch {
case exception: compat.Platform.StackOverflowError => stop = true
@@ -367,7 +367,7 @@ object Test {
check_success("TailCall.g3", TailCall.g3(max, max, Nil), 0)
check_success("TailCall.h1", TailCall.h1(max, max ), 0)
println
-
+
val NonTailCall = new NonTailCall
check_success("NonTailCall.f1", NonTailCall.f1(2), 0)
check_overflow("NonTailCall.f2", NonTailCall.f2(max))
@@ -381,6 +381,18 @@ object Test {
check_success("PolyObject.tramp", PolyObject.tramp[Int](max), 0)
}
+ // testing explicit tailcalls.
+
+ import scala.util.control.TailCalls._
+
+ def isEven(xs: List[Int]): TailRec[Boolean] =
+ if (xs.isEmpty) done(true) else tailcall(isOdd(xs.tail))
+
+ def isOdd(xs: List[Int]): TailRec[Boolean] =
+ if (xs.isEmpty) done(false) else tailcall(isEven(xs.tail))
+
+ assert(isEven((1 to 100000).toList).result)
+
}
//############################################################################
diff --git a/test/files/run/takeAndDrop.scala b/test/files/run/takeAndDrop.scala
index 8d2dff0bfa..6e87838e11 100644
--- a/test/files/run/takeAndDrop.scala
+++ b/test/files/run/takeAndDrop.scala
@@ -1,9 +1,9 @@
-object Test {
+object Test {
def main(args: Array[String]): Unit = {
val range = 1 to 10
val target = (3 to 8).toList
val confirm = (xs: Seq[Int]) => assert(xs.toList == target, xs)
-
+
confirm(range drop 2 dropRight 2)
confirm(range drop 1 dropRight 1 drop 1 dropRight 1)
confirm(range take 8 drop 2)
diff --git a/test/files/run/tcpoly_monads.scala b/test/files/run/tcpoly_monads.scala
index bcfe6d2363..cffbcc963b 100644
--- a/test/files/run/tcpoly_monads.scala
+++ b/test/files/run/tcpoly_monads.scala
@@ -4,15 +4,15 @@ trait Monads {
* (>>=) :: m a -> (a -> m b) -> m b
* return :: a -> m a
*
- * MonadTC encodes the above Haskell type class,
+ * MonadTC encodes the above Haskell type class,
* an instance of MonadTC corresponds to a method dictionary.
* (see http://lampwww.epfl.ch/~odersky/talks/wg2.8-boston06.pdf)
*
* Note that the identity (`this') of the method dictionary does not really correspond
- * to the instance of m[x] (`self') that is `wrapped': e.g., unit does not use `self' (which
+ * to the instance of m[x] (`self') that is `wrapped': e.g., unit does not use `self' (which
* corresponds to the argument of the implicit conversion that encodes an instance of this type class)
*/
- trait MonadTC[m[x], a] {
+ trait MonadTC[m[x], a] {
def unit[a](orig: a): m[a]
// >>='s first argument comes from the implicit definition constructing this "method dictionary"
@@ -27,7 +27,7 @@ trait Monads {
*/
trait OptionMonad extends Monads {
// this implicit method encodes the Monad type class instance for Option
- implicit def OptionInstOfMonad[a](self: Option[a]): MonadTC[Option, a]
+ implicit def OptionInstOfMonad[a](self: Option[a]): MonadTC[Option, a]
= new MonadTC[Option, a] {
def unit[a](orig: a) = Some(orig)
def >>=[b](fun: a => Option[b]): Option[b] = self match {
@@ -37,6 +37,6 @@ trait OptionMonad extends Monads {
}
}
-object Test extends OptionMonad with Application {
+object Test extends OptionMonad with App {
Console.println((Some("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") >>= (x => Some(x.length))).get)
}
diff --git a/test/files/run/tcpoly_overriding.scala b/test/files/run/tcpoly_overriding.scala
index 00ab580579..86ba89f530 100644
--- a/test/files/run/tcpoly_overriding.scala
+++ b/test/files/run/tcpoly_overriding.scala
@@ -11,6 +11,6 @@ class B extends A[List] {
def b: List[Int] = List(1)
}
-object Test extends Application {
+object Test extends App {
Console.println((new B).b(0))
}
diff --git a/test/files/run/tcpoly_parseridioms.scala b/test/files/run/tcpoly_parseridioms.scala
index edc5d5cad8..634240e44d 100644
--- a/test/files/run/tcpoly_parseridioms.scala
+++ b/test/files/run/tcpoly_parseridioms.scala
@@ -1,10 +1,10 @@
trait Parsers {
type Input = List[Char]
-
+
sealed class ParseResult[+t](val next: Input)
- case class Success[+t](override val next: Input, result: t) extends ParseResult[t](next)
+ case class Success[+t](override val next: Input, result: t) extends ParseResult[t](next)
case class Failure(override val next: Input, msg: String) extends ParseResult[Nothing](next)
-
+
abstract class Parser[+t] {
def apply(in: Input): ParseResult[t]
}
@@ -16,7 +16,7 @@ trait Parsers {
case Success(next2, y) => Success(next2, Pair(x,y))
case Failure(_, msg) => Failure(in, msg)
}
- case Failure(_, msg) => Failure(in, msg)
+ case Failure(_, msg) => Failure(in, msg)
}
}
@@ -38,20 +38,20 @@ trait Parsers {
case Failure(n, msg) => Failure(n, msg)
}
}
-
+
def accept[T](c: Char, r: T): Parser[T] = new Parser[T] {
def apply(in: Input) = in match {
case c2 :: n if c2 == c => Success(n, r)
case n => Failure(n, "expected "+c+" at the head of "+n)
}
}
-
- def apply_++[s, tt](fun: Parser[s => tt], arg: Parser[s]): Parser[tt] = lift[Pair[s=>tt, s], tt]({case Pair(f, a) => f(a)})(sq(fun, arg))
-
+
+ def apply_++[s, tt](fun: Parser[s => tt], arg: Parser[s]): Parser[tt] = lift[Pair[s=>tt, s], tt]({case Pair(f, a) => f(a)})(sq(fun, arg))
+
def success[u](v: u): Parser[u] = new Parser[u] {
def apply(in: Input) = Success(in, v)
}
-
+
}
trait Idioms {
@@ -61,21 +61,21 @@ trait Idioms {
def pureMethod[a](name: String, x: a): idi[a] = pure(x) // hack for Mirrors: allow passing of method names
}
- class IdiomaticTarget[idi[x], idiom <: Idiom[idi], s](i: idiom, tgt: s) {
+ class IdiomaticTarget[idi[x], idiom <: Idiom[idi], s](i: idiom, tgt: s) {
def dot [t](fun: s => t, name: String) = new IdiomaticApp2[idi, idiom, t](i, i.liftedApply(i.pureMethod(name, fun))(i.pure(tgt)))
} // TODO: `.` --> java.lang.ClassFormatError: Illegal method name "." in class Idioms$Id$
- class IdiomaticFunction[idi[x], idiom <: Idiom[idi], s, t](i: idiom, fun: s => t) {
+ class IdiomaticFunction[idi[x], idiom <: Idiom[idi], s, t](i: idiom, fun: s => t) {
def <| (a: idi[s]) = new IdiomaticApp[idi, idiom, t](i, i.liftedApply(i.pure(fun))(a))
}
class IdiomaticApp[idi[x], idiom <: Idiom[idi], x](i: idiom, a: idi[x]) {
// where x <: s=>t -- TODO can this be expressed without generalised constraints?
def <> [s, t](b: idi[s]) = new IdiomaticApp[idi, idiom, t](i, i.liftedApply(a.asInstanceOf[idi[s=>t]])(b))
-
+
def |> : idi[x] = a
}
-
+
class IdiomaticApp2[idi[x], idiom <: Idiom[idi], x](i: idiom, a: idi[x]) extends IdiomaticApp[idi, idiom, x](i, a) {
def <| [s, t](b: idi[s]) = <>[s,t](b)
}
@@ -86,24 +86,24 @@ trait ParserIdioms extends Parsers with Idioms {
def liftedApply[s, t](fun: Parser[s => t])(arg: Parser[s]): Parser[t] = apply_++(fun, arg)
def pure[a](x: a): Parser[a] = success(x)
}
-
- implicit def parserIdiomFun[s, t](fun: s=>t): IdiomaticFunction[Parser, ParserIdiom.type, s, t] =
+
+ implicit def parserIdiomFun[s, t](fun: s=>t): IdiomaticFunction[Parser, ParserIdiom.type, s, t] =
new IdiomaticFunction[Parser, ParserIdiom.type, s, t](ParserIdiom, fun)
- implicit def parserIdiomTgt[s](tgt: s): IdiomaticTarget[Parser, ParserIdiom.type, s] =
+ implicit def parserIdiomTgt[s](tgt: s): IdiomaticTarget[Parser, ParserIdiom.type, s] =
new IdiomaticTarget[Parser, ParserIdiom.type, s](ParserIdiom, tgt)
-
+
trait Expr
case class Plus(a: Int, b: Int) extends Expr
-
+
def num = or(accept('0', 0), or(accept('1', 1),accept('2', 2)))
-
- // TODO: how can parserIdiom(curry2(_)) be omitted?
+
+ // TODO: how can parserIdiom(curry2(_)) be omitted?
def expr: Parser[Expr] = parserIdiomFun(curry2(Plus)) <| num <> num |>
-
+
implicit def curry2[s,t,u](fun: (s, t)=>u)(a: s)(b: t) = fun(a, b)
- implicit def curry3[r,s,t,u](fun: (r,s, t)=>u)(a: r)(b: s)(c: t) = fun(a, b, c)
+ implicit def curry3[r,s,t,u](fun: (r,s, t)=>u)(a: r)(b: s)(c: t) = fun(a, b, c)
}
-object Test extends ParserIdioms with Application {
+object Test extends ParserIdioms with App {
println(expr("12".toList))
}
diff --git a/test/files/run/transform.scala b/test/files/run/transform.scala
new file mode 100644
index 0000000000..5cc1c49d6f
--- /dev/null
+++ b/test/files/run/transform.scala
@@ -0,0 +1,8 @@
+object Test {
+ val x = 1 to 10 toBuffer
+
+ def main(args: Array[String]): Unit = {
+ x transform (_ * 2)
+ assert(x.sum == (1 to 10).sum * 2)
+ }
+}
diff --git a/test/files/run/transpose.scala b/test/files/run/transpose.scala
new file mode 100644
index 0000000000..3bea74b365
--- /dev/null
+++ b/test/files/run/transpose.scala
@@ -0,0 +1,12 @@
+object Test {
+ def wrap[T >: Null](body: => T) =
+ try body
+ catch { case _: IllegalArgumentException => null }
+
+ def main(args: Array[String]): Unit = {
+ assert(wrap(Nil.transpose) == Nil)
+ assert(wrap(List(List(1, 2), List(1)).transpose) == null)
+ assert(wrap(List(List(1), List(1, 2)).transpose) == null)
+ assert(wrap(List(List(1, 2), List(1, 2)).transpose) == List(List(1, 1), List(2, 2)))
+ }
+}
diff --git a/test/files/run/treePrint.check b/test/files/run/treePrint.check
new file mode 100644
index 0000000000..3360815ac1
--- /dev/null
+++ b/test/files/run/treePrint.check
@@ -0,0 +1,5 @@
+def foo = {
+ var q: Boolean = false;
+ val x = 5;
+ ((x == 5) || (!q)) || (true)
+}
diff --git a/test/files/run/treePrint.scala b/test/files/run/treePrint.scala
new file mode 100644
index 0000000000..745c2150c2
--- /dev/null
+++ b/test/files/run/treePrint.scala
@@ -0,0 +1,42 @@
+/** Testing compact tree printers.
+ */
+object Test {
+ import scala.tools.nsc._
+ import interpreter._
+ import java.io.{ OutputStream, BufferedReader, StringReader, PrintWriter, Writer, OutputStreamWriter}
+
+ val code = """
+ def foo = {
+ var q: Boolean = false
+ val x = if (true) {
+ if (true) {
+ if (true) {
+ 5
+ }
+ else if (true) {
+ 5
+ } else {
+ 10
+ }
+ }
+ else 20
+ }
+ else 30
+
+ (x == 5) || !q || true
+ }
+ """
+
+ class NullOutputStream extends OutputStream { def write(b: Int) { } }
+
+ def main(args: Array[String]) {
+ val settings = new Settings
+ settings.classpath.value = System.getProperty("java.class.path")
+ settings.Ycompacttrees.value = true
+
+ val intp = new IMain(settings, new PrintWriter(new NullOutputStream))
+ val power = Power(intp)
+ intp.interpret("""def initialize = "Have to interpret something or we get errors." """)
+ power trees code foreach println
+ }
+}
diff --git a/test/files/run/triple-quoted-expr.check b/test/files/run/triple-quoted-expr.check
new file mode 100644
index 0000000000..4e59695f36
--- /dev/null
+++ b/test/files/run/triple-quoted-expr.check
@@ -0,0 +1,5 @@
+
+hi
+hi
+
+hi
diff --git a/test/files/run/triple-quoted-expr.scala b/test/files/run/triple-quoted-expr.scala
new file mode 100644
index 0000000000..0b30946de2
--- /dev/null
+++ b/test/files/run/triple-quoted-expr.scala
@@ -0,0 +1,26 @@
+class A {
+ def f1 = {
+ val x = 5
+
+"""
+hi"""
+ }
+ def f2 = {
+ val x = 5
+
+ """hi"""
+ }
+ def f3 = {
+ val x = 5
+
+ "\nhi"
+ }
+}
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ val x = new A
+ import x._
+ List(f1, f2, f3) foreach println
+ }
+}
diff --git a/test/files/run/try-2.scala b/test/files/run/try-2.scala
index 909a68bbd2..677f0b48eb 100644
--- a/test/files/run/try-2.scala
+++ b/test/files/run/try-2.scala
@@ -7,7 +7,7 @@
object Test {
- def tryAllUnit: Unit =
+ def tryAllUnit: Unit =
try {
throw new Error();
}
@@ -15,28 +15,28 @@ object Test {
case _ => Console.println("exception happened\n");
}
- def tryUnitAll: Unit =
+ def tryUnitAll: Unit =
try {
Console.println("Nothin");
} catch {
case _ => error("Bad, bad, lama!");
}
- def tryAllAll: Unit =
+ def tryAllAll: Unit =
try {
throw new Error();
} catch {
case _ => error("Bad, bad, lama!");
}
- def tryUnitUnit: Unit =
+ def tryUnitUnit: Unit =
try {
Console.println("Nothin");
} catch {
case _ => Console.println("Nothin");
}
- def tryIntUnit: Unit =
+ def tryIntUnit: Unit =
try {
10;
} catch {
@@ -55,7 +55,7 @@ object Test {
execute(tryAllUnit);
execute(tryUnitAll);
execute(tryAllAll);
- execute(tryUnitUnit);
+ execute(tryUnitUnit);
execute(tryIntUnit);
}
}
diff --git a/test/files/run/try.scala b/test/files/run/try.scala
index 594c630cc8..ad3d606246 100644
--- a/test/files/run/try.scala
+++ b/test/files/run/try.scala
@@ -1,4 +1,4 @@
-object Test extends AnyRef with Application {
+object Test extends AnyRef with App {
val x = 1;
def try1 = {
@@ -17,8 +17,8 @@ object Test extends AnyRef with Application {
Console.println(
(try { x } catch {
case _: Error => 1;
- })
- +
+ })
+ +
(try { x } catch {
case _: Error => 1;
})
@@ -116,7 +116,7 @@ object Test extends AnyRef with Application {
}
*/
-
+
try1;
try2;
try3;
diff --git a/test/files/run/tuple-match.check b/test/files/run/tuple-match.check
new file mode 100644
index 0000000000..0c1ea0005b
--- /dev/null
+++ b/test/files/run/tuple-match.check
@@ -0,0 +1,8 @@
+4, #3
+4, #2
+4, #4
+3, #2
+2, #2
+1, #1
+FOUR
+THREE
diff --git a/test/files/run/tuple-match.scala b/test/files/run/tuple-match.scala
new file mode 100644
index 0000000000..57ba9cf6e1
--- /dev/null
+++ b/test/files/run/tuple-match.scala
@@ -0,0 +1,27 @@
+object Test {
+ val FOUR = (-1, -2, -3, "bingo donkey vegas")
+ val THREE = (-1, -2, -3)
+
+ def f(x: Any) = x match {
+ case FOUR => "FOUR"
+ case (_, _, 3, _) => "4, #3"
+ case (_, 2, _, _) => "4, #2"
+ case (_, 2, _) => "3, #2"
+ case Tuple1(1) => "1, #1"
+ case (_, _, _, 4) => "4, #4"
+ case THREE => "THREE"
+ case (_, 2) => "2, #2"
+ case _ => "default"
+ }
+
+ def main(args: Array[String]): Unit = {
+ println(f((1, 2, 3, 4)))
+ println(f((1, 2, 30, 4)))
+ println(f((1, 20, 30, 4)))
+ println(f((1, 2, 3)))
+ println(f((1, 2)))
+ println(f(Tuple1(1)))
+ println(f((-1, -2, -3, "bingo donkey vegas")))
+ println(f((-1, -2, -3)))
+ }
+}
diff --git a/test/files/run/tuple-zipped.scala b/test/files/run/tuple-zipped.scala
new file mode 100644
index 0000000000..a9851346bc
--- /dev/null
+++ b/test/files/run/tuple-zipped.scala
@@ -0,0 +1,39 @@
+object Test {
+ val xs1 = List.range(1, 100)
+ val xs2 = xs1.view
+ val xs3 = xs1 take 10
+ val ss1 = Stream from 1
+ val ss2 = ss1.view
+ val ss3 = ss1 take 10
+ val as1 = 1 to 100 toArray
+ val as2 = as1.view
+ val as3 = as1 take 10
+
+ def xss1 = List[Seq[Int]](xs1, xs2, xs3, ss1, ss2, ss3, as1, as2, as3)
+ def xss2 = List[Seq[Int]](xs1, xs2, xs3, ss3, as1, as2, as3) // no infinities
+ def xss3 = List[Seq[Int]](xs2, xs3, ss3, as1) // representative sampling
+
+ def main(args: Array[String]): Unit = {
+ for (cc1 <- xss1 ; cc2 <- xss2) {
+ val sum1 = (cc1, cc2).zip map { case (x, y) => x + y } sum
+ val sum2 = (cc1, cc2).zipped map (_ + _) sum
+
+ assert(sum1 == sum2)
+ }
+
+ for (cc1 <- xss1 ; cc2 <- xss2 ; cc3 <- xss3) {
+ val sum1 = (cc1, cc2, cc3).zip map { case (x, y, z) => x + y + z } sum
+ val sum2 = (cc1, cc2, cc3).zipped map (_ + _ + _) sum
+
+ assert(sum1 == sum2)
+ }
+
+ assert((ss1, ss1).zipped exists ((x, y) => true))
+ assert((ss1, ss1, ss1).zipped exists ((x, y, z) => true))
+
+ assert(!(ss1, ss2, 1 to 3).zipped.exists(_ + _ + _ > 100000))
+ assert((1 to 3, ss1, ss2).zipped.forall(_ + _ + _ > 0))
+ assert((ss1, 1 to 3, ss2).zipped.map(_ + _ + _).size == 3)
+ }
+}
+
diff --git a/test/files/run/tuples.scala b/test/files/run/tuples.scala
index b32c856afe..4854e36c96 100644
--- a/test/files/run/tuples.scala
+++ b/test/files/run/tuples.scala
@@ -1,6 +1,6 @@
import Function._
-object Test extends Application {
+object Test extends App {
var xyz: (Int, String, Boolean) = _
xyz = (1, "abc", true)
Console.println(xyz)
diff --git a/test/files/run/typealias_overriding.scala b/test/files/run/typealias_overriding.scala
index 60e783791d..8a2d1312ab 100644
--- a/test/files/run/typealias_overriding.scala
+++ b/test/files/run/typealias_overriding.scala
@@ -1,21 +1,21 @@
// this bug (http://scala-webapps.epfl.ch/bugtracking/bugs/displayItem.do?id=1065)
-// was caused by Uncurry not normalizing all the types
+// was caused by Uncurry not normalizing all the types
// (more specifically the argument/return types of an anonymous Function)
-object Test extends Application {
+object Test extends App {
trait AddRemove {
type TNode <: NodeImpl;
trait NodeImpl;
-
+
object removing {
type TNode = AddRemove.this.TNode;
def printNode(node: TNode, f: TNode => String) = Console.println(f(node))
}
}
-
+
class Linked extends AddRemove {
type TNode = Node // can also directly write `class Node extends super.NodeImpl' -- doesn't change the bug
class Node extends super.NodeImpl { override def toString = "LinkedNode" }
-
+
removing.printNode(new Node, (x: removing.TNode) => x.toString) // make inference explicit, doesn't affect the bug
}
diff --git a/test/files/run/unapply.scala b/test/files/run/unapply.scala
index 72a4b0ac64..90dd4fae73 100644
--- a/test/files/run/unapply.scala
+++ b/test/files/run/unapply.scala
@@ -1,12 +1,11 @@
-import scala.testing.SUnit._
-
-object Test extends TestConsoleMain {
- def suite = new TestSuite(
- Foo,
- Mas,
- LisSeqArr,
- StreamFoo
- )
+object Test {
+ def main(args: Array[String]) {
+ Foo.run()
+ Mas.run()
+ LisSeqArr.run()
+ StreamFoo.run()
+ Test1256.run()
+ }
}
// this class is used for representation
@@ -23,7 +22,7 @@ object Faa {
def unapply(x: Any): Option[String] = if(x.isInstanceOf[Bar]) Some(x.asInstanceOf[Bar].name) else None
}
object FaaPrecise {
- def unapply(x: Bar): Option[String] = Some(x.name)
+ def unapply(x: Bar): Option[String] = Some(x.name)
}
object FaaPreciseSome {
def unapply(x: Bar) = Some(x.name) // return type Some[String]
@@ -31,9 +30,10 @@ object FaaPreciseSome {
object VarFoo {
def unapply(a : Int)(implicit b : Int) : Option[Int] = Some(a + b)
}
-object Foo extends TestCase("Foo") with Assert {
+
+object Foo {
def unapply(x: Any): Option[Product2[Int, String]] = x match {
- case y: Bar => Some(Tuple(y.size, y.name))
+ case y: Bar => Some(y.size, y.name)
case _ => None
}
def doMatch1(b:Bar) = b match {
@@ -51,25 +51,25 @@ object Foo extends TestCase("Foo") with Assert {
def doMatch5(b:Bar) = (b:Any) match {
case FaaPreciseSome(n:String) => n
}
- override def runTest {
+ def run() {
val b = new Bar
- assertEquals(doMatch1(b),(50,"medium"))
- assertEquals(doMatch2(b),null)
- assertEquals(doMatch3(b),"medium")
- assertEquals(doMatch4(b),"medium")
- assertEquals(doMatch5(b),"medium")
+ assert(doMatch1(b) == (50,"medium"))
+ assert(doMatch2(b) == null)
+ assert(doMatch3(b) == "medium")
+ assert(doMatch4(b) == "medium")
+ assert(doMatch5(b) == "medium")
implicit val bc: Int = 3
- assertEquals(4 match {
+ assert(7 == (4 match {
case VarFoo(x) => x
- }, 7)
+ }))
}
}
// same, but now object is not top-level
-object Mas extends TestCase("Mas") with Assert {
+object Mas {
object Gaz {
def unapply(x: Any): Option[Product2[Int, String]] = x match {
- case y: Baz => Some(Tuple(y.size, y.name))
+ case y: Baz => Some(y.size, y.name)
case _ => None
}
}
@@ -77,57 +77,46 @@ object Mas extends TestCase("Mas") with Assert {
var size: Int = 60
var name: String = "too large"
}
- def runTest {
+ def run() {
val b = new Baz
- assertEquals(b match {
+ assert((60,"too large") == (b match {
case Gaz(s:Int, n:String) => (s,n)
- }, (60,"too large"))
+ }))
}
}
-object LisSeqArr extends TestCase("LisSeqArr") with Assert {
-// def foo[A](x:List[A]) {}
- def runTest {
- assertEquals((List(1,2,3): Any) match { case List(x,y,_*) => (x,y)}, (1,2))
- assertEquals((List(1,2,3): Any) match { case Seq(x,y,_*) => (x,y)}, (1,2))
- //assertEquals((Array(1,2,3): Any) match { case Seq(x,y,_*) => (x,y)}, (1,2))
- //assertEquals((Array(1,2,3): Any) match { case Array(x,y,_*) => {x,y}}, {1,2})
-
- // just compile, feature request #1196
-// (List(1,2,3): Any) match {
-// case a @ List(x,y,_*) => foo(a)
-// }
-
+object LisSeqArr {
+ def run() {
+ assert((1,2) == ((List(1,2,3): Any) match { case List(x,y,_*) => (x,y)}))
+ assert((1,2) == ((List(1,2,3): Any) match { case Seq(x,y,_*) => (x,y)}))
}
}
-
-object StreamFoo extends TestCase("unapply for Streams") with Assert {
- //val x:Stream[Int] = Stream.cons(1,x)
-
+object StreamFoo {
def sum(stream: Stream[Int]): Int =
stream match {
case Stream.Empty => 0
case Stream.cons(hd, tl) => hd + sum(tl)
}
- override def runTest {
- val str: Stream[int] = Stream.fromIterator(List(1,2,3).iterator)
- assertEquals(sum(str), 6)
+ def run() {
+ val str: Stream[Int] = List(1,2,3).toStream
+ assert(6 == sum(str))
}
}
-object Test1256 extends TestCase("1256") {
+object Test1256 {
class Sync {
def unapply(scrut: Any): Boolean = false
}
-
+
class Buffer {
val Get = new Sync
-
val jp: PartialFunction[Any, Any] = {
case Get() =>
}
}
-
- override def runTest { assertFalse((new Buffer).jp.isDefinedAt(42)) }
+
+ def run() {
+ assert(!(new Buffer).jp.isDefinedAt(42))
+ }
}
diff --git a/test/files/run/unapplyArray.scala b/test/files/run/unapplyArray.scala
index bf6582dadf..bf7c9e2300 100644
--- a/test/files/run/unapplyArray.scala
+++ b/test/files/run/unapplyArray.scala
@@ -1,7 +1,7 @@
object Test {
def main(args:Array[String]): Unit = {
val z = Array(1,2,3,4)
- val zs: Seq[int] = z
+ val zs: Seq[Int] = z
val za: Any = z
/*
diff --git a/test/files/run/unboxingBug.scala b/test/files/run/unboxingBug.scala
index 62c2d20202..5f129b64b4 100644
--- a/test/files/run/unboxingBug.scala
+++ b/test/files/run/unboxingBug.scala
@@ -1,4 +1,4 @@
-object Test extends Application {
+object Test extends App {
println(identity('a').toInt)
println('a'.toInt)
println(identity('a').asInstanceOf[Int])
diff --git a/test/files/run/unittest_collection.scala b/test/files/run/unittest_collection.scala
index 5d7ab97425..3639b496b3 100644
--- a/test/files/run/unittest_collection.scala
+++ b/test/files/run/unittest_collection.scala
@@ -1,103 +1,58 @@
-
object Test {
- import scala.testing.SUnit._
import scala.collection.mutable.{ArrayBuffer, Buffer, BufferProxy, ListBuffer}
- trait BufferTest extends Assert {
- def doTest(x:Buffer[String]) = {
- // testing method +=
- x += "one"
- assertEquals("retrieving 'one'", x(0), "one")
- assertEquals("length A ", x.length, 1)
- x += "two"
- assertEquals("retrieving 'two'", x(1), "two")
- assertEquals("length B ", x.length, 2)
-
- // testing method -= (removing last element)
- x -= "two"
-
- assertEquals("length C ", x.length, 1)
-
- try { x(1); fail("no exception for removed element") }
- catch { case i:IndexOutOfBoundsException => }
-
- try { x.remove(1); fail("no exception for removed element") }
- catch { case i:IndexOutOfBoundsException => }
-
- x += "two2"
- assertEquals("length D ", x.length, 2)
-
- // removing first element
- x.remove(0)
- assertEquals("length E ", x.length, 1)
-
- // toList
- assertEquals("toList ", x.toList, List("two2"))
-
- // clear
- x.clear
- assertEquals("length F ", x.length, 0)
-
- // copyToBuffer
- x += "a"
- x += "b"
- val dest = new ArrayBuffer[String]
- x copyToBuffer dest
- assertEquals("dest", List("a", "b"), dest.toList)
- assertEquals("source", List("a", "b"), x.toList)
+ def main(args: Array[String]) {
+ test(collection.mutable.ArrayBuffer[String]())
+ test(collection.mutable.ListBuffer[String]())
+ class BBuf(z:ListBuffer[String]) extends BufferProxy[String] {
+ def self = z
}
+ test(new BBuf(collection.mutable.ListBuffer[String]()))
}
- class TArrayBuffer extends TestCase("collection.mutable.ArrayBuffer") with Assert with BufferTest {
-
- var x: ArrayBuffer[String] = _
+ def test(x: Buffer[String]) {
+ // testing method +=
+ x += "one"
+ assert(x(0) == "one", "retrieving 'one'")
+ assert(x.length == 1, "length A")
+ x += "two"
+ assert(x(1) == "two", "retrieving 'two'")
+ assert(x.length == 2, "length B")
- override def runTest = { setUp; doTest(x); tearDown }
+ // testing method -= (removing last element)
+ x -= "two"
- override def setUp = { x = new scala.collection.mutable.ArrayBuffer }
+ assert(x.length == 1, "length C")
- override def tearDown = { x.clear; x = null }
- }
+ try { x(1); sys.error("no exception for removed element") }
+ catch { case i:IndexOutOfBoundsException => }
- class TListBuffer extends TestCase("collection.mutable.ListBuffer") with Assert with BufferTest {
+ try { x.remove(1); sys.error("no exception for removed element") }
+ catch { case i:IndexOutOfBoundsException => }
- var x: ListBuffer[String] = _
+ x += "two2"
+ assert(x.length == 2, "length D")
- override def runTest = { setUp; doTest(x); tearDown }
+ // removing first element
+ x.remove(0)
+ assert(x.length == 1, "length E")
- override def setUp = { x = new scala.collection.mutable.ListBuffer }
+ // toList
+ assert(x.toList == List("two2"), "toList")
- override def tearDown = { x.clear; x = null }
+ // clear
+ x.clear()
+ assert(x.length == 0, "length 0")
+ assert(x.isEmpty, "isEmpty")
+ // copyToBuffer
+ x += "a"
+ x += "b"
+ val dest = new ArrayBuffer[String]
+ x.copyToBuffer(dest)
+ assert(List("a", "b") == dest.toList, "dest")
+ assert(List("a", "b") == x.toList, "source")
}
- class TBufferProxy extends TestCase("collection.mutable.BufferProxy") with Assert with BufferTest {
-
- class BBuf(z:ListBuffer[String]) extends BufferProxy[String] {
- def self = z
- }
-
- var x: BufferProxy[String] = _
-
- override def runTest = { setUp; doTest(x); tearDown }
-
- override def setUp = { x = new BBuf(new scala.collection.mutable.ListBuffer) }
-
- override def tearDown = { x.clear; x = null }
-
- }
-
- def main(args:Array[String]) = {
- val ts = new TestSuite(
- //new TArrayBuffer,
- new TListBuffer//,
- //new TBufferProxy
- )
- val tr = new TestResult()
- ts.run(tr)
- for(val failure <- tr.failures) {
- Console.println(failure)
- }
- }
}
diff --git a/test/files/run/unittest_io.scala b/test/files/run/unittest_io.scala
index 974dcff5b3..2cadb9b1df 100644
--- a/test/files/run/unittest_io.scala
+++ b/test/files/run/unittest_io.scala
@@ -1,42 +1,40 @@
-import testing.SUnit._
+object Test {
-object Test extends TestConsoleMain {
- def suite = new TestSuite(new UTF8Tests, new SourceTest)
-
- class UTF8Tests extends TestCase("UTF8Codec") {
- import io.UTF8Codec.encode
+ def main(args: Array[String]) {
+ UTF8Tests.run()
+ SourceTest.run()
+ }
- def runTest {
- assertEquals(new String( encode(0x004D), "utf8"), new String(Array(0x004D.asInstanceOf[Char])))
- assertEquals(new String( encode(0x0430), "utf8"), new String(Array(0x0430.asInstanceOf[Char])))
- assertEquals(new String( encode(0x4E8C), "utf8"), new String(Array(0x4E8C.asInstanceOf[Char])))
- assertEquals(new String(encode(0x10302), "utf8"), new String(Array(0xD800.asInstanceOf[Char],
- 0xDF02.asInstanceOf[Char])))
+ object UTF8Tests {
+ def decode(ch: Int) = new String(Array(ch), 0, 1).getBytes("UTF-8")
+ def run() {
+ assert(new String( decode(0x004D), "utf8") == new String(Array(0x004D.asInstanceOf[Char])))
+ assert(new String( decode(0x0430), "utf8") == new String(Array(0x0430.asInstanceOf[Char])))
+ assert(new String( decode(0x4E8C), "utf8") == new String(Array(0x4E8C.asInstanceOf[Char])))
+ assert(new String(decode(0x10302), "utf8") == new String(Array(0xD800.asInstanceOf[Char],
+ 0xDF02.asInstanceOf[Char])))
// a client
val test = "{\"a\":\"\\u0022\"}"
- val Expected = ("a","\"")
- assertTrue(scala.util.parsing.json.JSON.parse(test) match {
- case Some(List(Expected)) => true
- case z => Console.println(z); false
- })
+ val expected = "a" -> "\""
+
+ val parsed = scala.util.parsing.json.JSON.parseFull(test)
+ val result = parsed == Some(Map(expected))
+ if(result)
+ assert(result)
+ else {
+ Console.println(parsed); assert(result)
+ }
}
}
- class SourceTest extends TestCase("Source") {
- def runTest {
- val s = "Here is a test string"
+ object SourceTest {
+ def run() {
+ val s = "Here is a test string"
val f = io.Source.fromBytes(s.getBytes("utf-8"))
val b = new collection.mutable.ArrayBuffer[Char]()
f.copyToBuffer(b)
- assertEquals(s, new String(b.toArray))
-
- /* todo: same factories for BufferedSource and Source
- val g = io.BufferedSource.fromBytes(s.getBytes("utf-8"))
- val c = new collection.mutable.ArrayBuffer[Char]()
- g.copyToBuffer(c)
- assertEquals(s, new String(c.toArray))
- */
+ assert(s == new String(b.toArray))
}
}
}
diff --git a/test/files/run/unittest_iterator.scala b/test/files/run/unittest_iterator.scala
index 93aaa4a834..89ccdb9d58 100644
--- a/test/files/run/unittest_iterator.scala
+++ b/test/files/run/unittest_iterator.scala
@@ -1,6 +1,5 @@
// Some iterator grouped/sliding unit tests
-object Test
-{
+object Test {
def it = (1 to 10).iterator
def assertThat[T](expectedLength: Int, expectedLast: Seq[T])(it: Iterator[Seq[T]]) {
val xs = it.toList
@@ -8,15 +7,15 @@ object Test
assert(xs.size == expectedLength, fail("expected length " + expectedLength))
assert(xs.last == expectedLast, fail("expected last " + expectedLast))
}
-
+
def main(args: Array[String]): Unit = {
val itSum = it.toStream.sum
for (i <- it) {
// sum of the groups == sum of the original
val thisSum = ((it grouped i) map (_.sum)).toStream.sum
- assert(thisSum == itSum, thisSum + " != " + itSum)
+ assert(thisSum == itSum, thisSum + " != " + itSum)
}
-
+
// grouped
assertThat(4, List(10)) { it grouped 3 }
assertThat(3, List(7, 8, 9)) { it grouped 3 withPartial false }
@@ -33,5 +32,22 @@ object Test
assertThat(1, (1 to 8).toList) { it.sliding(8, 8) withPartial false }
assertThat(2, List(9, 10, -1, -1, -1)) { it.sliding(5, 8) withPadding -1 }
assertThat(1, (1 to 5).toList) { it.sliding(5, 8) withPartial false }
+
+ // larger step than window
+ assertThat(5, List(9)) { it.sliding(1, 2) }
+ assertThat(3, List(9, 10)) { it.sliding(2, 4) }
+
+ // make sure it throws past the end
+ val thrown = try {
+ val it = List(1,2,3).sliding(2)
+ it.next
+ it.next
+ it.next
+ false
+ }
+ catch {
+ case _: NoSuchElementException => true
+ }
+ assert(thrown)
}
}
diff --git a/test/files/run/vector1.scala b/test/files/run/vector1.scala
index 320bef220c..b37cfe82e8 100644
--- a/test/files/run/vector1.scala
+++ b/test/files/run/vector1.scala
@@ -9,7 +9,7 @@ import scala.collection.mutable.Builder
object Test {
-
+
def vector(label: String, n: Int): Vector[String] = {
val a = new VectorBuilder[String]
for (i <- 0 until n)
@@ -22,7 +22,7 @@ object Test {
def vectorForward(label: String, n: Int): Vector[String] = {
var a: Vector[String] = Vector.empty
for (i <- 0 until n)
- a = a.appendBack(label + i)
+ a = a :+ (label + i)
assertVector(a, label, 0, n)
}
@@ -30,7 +30,7 @@ object Test {
def vectorBackward(label: String, n: Int): Vector[String] = {
var a: Vector[String] = Vector.empty
for (i <- 0 until n)
- a = a.appendFront(label + (n-1-i))
+ a = (label + (n-1-i)) +: a
assertVector(a, label, 0, n)
}
@@ -67,7 +67,7 @@ object Test {
def test1() = {
println("===== test1 =====")
-
+
val N = 150000
val a = vector("a", N)
val b = vectorForward("b", N)
@@ -81,22 +81,22 @@ object Test {
println("===== test2 =====")
var a: Vector[String] = Vector.empty
-
+
val rand = new java.util.Random
-
+
val N = 150000
var min = N/2//rand.nextInt(N)
var max = min
-
+
val chunkLimit = 11
-
+
def nextChunkSize = 3 //rand.nextInt(chunkLimit)
-
- def seqBack() = for (i <- 0 until Math.min(nextChunkSize, N-max)) { a = a.appendBack("a"+max); max += 1 }
- def seqFront() = for (i <- 0 until Math.min(nextChunkSize, min)) { min -= 1; a = a.appendFront("a"+min) }
-
+
+ def seqBack() = for (i <- 0 until Math.min(nextChunkSize, N-max)) { a = a :+ ("a"+max); max += 1 }
+ def seqFront() = for (i <- 0 until Math.min(nextChunkSize, min)) { min -= 1; a = ("a"+min) +: a }
+
try {
-
+
while (min > 0 || max < N) {
seqFront()
seqBack()
@@ -104,10 +104,10 @@ object Test {
} catch {
case ex =>
//println("----------------")
- a.debug
+ //a.debug
throw ex
}
-
+
assertVector(a, "a", 0, N)
}
@@ -122,14 +122,14 @@ object Test {
val pos = scala.util.Random.shuffle(scala.collection.mutable.WrappedArray.make[Int](Array.tabulate[Int](N)(i => i)))
var b = a
-
+
{
var i = 0
while (i < N) {
b = b.updated(pos(i), "b"+(pos(i)))
i += 1
}
-
+
assertVector(b, "b", 0, N)
}
diff --git a/test/files/run/view-headoption.check b/test/files/run/view-headoption.check
new file mode 100644
index 0000000000..5c98b54b46
--- /dev/null
+++ b/test/files/run/view-headoption.check
@@ -0,0 +1,28 @@
+fail
+success
+f1: Some(5)
+fail
+success
+f2: 5
+fail
+success
+fail
+fail
+success
+fail
+fail
+fail
+success
+f3: Some(5)
+fail
+success
+fail
+success
+fail
+fail
+success
+fail
+fail
+fail
+success
+f4: 5
diff --git a/test/files/run/view-headoption.scala b/test/files/run/view-headoption.scala
new file mode 100644
index 0000000000..629b974c19
--- /dev/null
+++ b/test/files/run/view-headoption.scala
@@ -0,0 +1,18 @@
+object Test {
+ val failer = () => { println("fail") ; None }
+ val succeeder = () => { println("success") ; Some(5) }
+ val fs = List(failer, succeeder, failer, failer, succeeder, failer, failer, failer, succeeder)
+
+ def f0 = fs.view flatMap (f => f())
+ def f1 = f0.headOption
+ def f2 = f0.head
+ def f3 = f0.lastOption
+ def f4 = f0.last
+
+ def main(args: Array[String]): Unit = {
+ println("f1: " + f1)
+ println("f2: " + f2)
+ println("f3: " + f3)
+ println("f4: " + f4)
+ }
+}
diff --git a/test/files/run/view-iterator-stream.check b/test/files/run/view-iterator-stream.check
new file mode 100644
index 0000000000..2da02c865c
--- /dev/null
+++ b/test/files/run/view-iterator-stream.check
@@ -0,0 +1,112 @@
+
+** drop 20 -> take 10 -> slice(1, 5) **
+
+-------------------
+toIndexedSeq -> toIterator -> toStream Stream(22, ?) 22 23 24 25
+toIndexedSeq -> toIterator -> view StreamView(...) 22 23 24 25
+toIndexedSeq -> toStream -> toIterator non-empty iterator 22 23 24 25
+toIndexedSeq -> toStream -> view StreamView(...) 22 23 24 25
+toIndexedSeq -> view -> toIterator non-empty iterator 22 23 24 25
+toIndexedSeq -> view -> toStream Stream(22, ?) 22 23 24 25
+toIterator -> toIndexedSeq -> toStream Stream(22, ?) 22 23 24 25
+toIterator -> toIndexedSeq -> view SeqView(...) 22 23 24 25
+toIterator -> toStream -> toIndexedSeq Vector(22, 23, 24, 25) 22 23 24 25
+toIterator -> toStream -> view StreamView(...) 22 23 24 25
+toIterator -> view -> toIndexedSeq Vector(22, 23, 24, 25) 22 23 24 25
+toIterator -> view -> toStream Stream(22, ?) 22 23 24 25
+toStream -> toIndexedSeq -> toIterator non-empty iterator 22 23 24 25
+toStream -> toIndexedSeq -> view SeqView(...) 22 23 24 25
+toStream -> toIterator -> toIndexedSeq Vector(22, 23, 24, 25) 22 23 24 25
+toStream -> toIterator -> view StreamView(...) 22 23 24 25
+toStream -> view -> toIndexedSeq Vector(22, 23, 24, 25) 22 23 24 25
+toStream -> view -> toIterator non-empty iterator 22 23 24 25
+view -> toIndexedSeq -> toIterator non-empty iterator 22 23 24 25
+view -> toIndexedSeq -> toStream Stream(22, ?) 22 23 24 25
+view -> toIterator -> toIndexedSeq Vector(22, 23, 24, 25) 22 23 24 25
+view -> toIterator -> toStream Stream(22, ?) 22 23 24 25
+view -> toStream -> toIndexedSeq Vector(22, 23, 24, 25) 22 23 24 25
+view -> toStream -> toIterator non-empty iterator 22 23 24 25
+
+** take 20 -> drop 10 -> slice(1, 5) **
+
+-------------------
+toIndexedSeq -> toIterator -> toStream Stream(12, ?) 12 13 14 15
+toIndexedSeq -> toIterator -> view StreamView(...) 12 13 14 15
+toIndexedSeq -> toStream -> toIterator non-empty iterator 12 13 14 15
+toIndexedSeq -> toStream -> view StreamView(...) 12 13 14 15
+toIndexedSeq -> view -> toIterator non-empty iterator 12 13 14 15
+toIndexedSeq -> view -> toStream Stream(12, ?) 12 13 14 15
+toIterator -> toIndexedSeq -> toStream Stream(12, ?) 12 13 14 15
+toIterator -> toIndexedSeq -> view SeqView(...) 12 13 14 15
+toIterator -> toStream -> toIndexedSeq Vector(12, 13, 14, 15) 12 13 14 15
+toIterator -> toStream -> view StreamView(...) 12 13 14 15
+toIterator -> view -> toIndexedSeq Vector(12, 13, 14, 15) 12 13 14 15
+toIterator -> view -> toStream Stream(12, ?) 12 13 14 15
+toStream -> toIndexedSeq -> toIterator non-empty iterator 12 13 14 15
+toStream -> toIndexedSeq -> view SeqView(...) 12 13 14 15
+toStream -> toIterator -> toIndexedSeq Vector(12, 13, 14, 15) 12 13 14 15
+toStream -> toIterator -> view StreamView(...) 12 13 14 15
+toStream -> view -> toIndexedSeq Vector(12, 13, 14, 15) 12 13 14 15
+toStream -> view -> toIterator non-empty iterator 12 13 14 15
+view -> toIndexedSeq -> toIterator non-empty iterator 12 13 14 15
+view -> toIndexedSeq -> toStream Stream(12, ?) 12 13 14 15
+view -> toIterator -> toIndexedSeq Vector(12, 13, 14, 15) 12 13 14 15
+view -> toIterator -> toStream Stream(12, ?) 12 13 14 15
+view -> toStream -> toIndexedSeq Vector(12, 13, 14, 15) 12 13 14 15
+view -> toStream -> toIterator non-empty iterator 12 13 14 15
+
+** slice(20, 40) -> drop 10 -> take 5 **
+
+-------------------
+toIndexedSeq -> toIterator -> toStream Stream(31, ?) 31 32 33 34 35
+toIndexedSeq -> toIterator -> view StreamView(...) 31 32 33 34 35
+toIndexedSeq -> toStream -> toIterator non-empty iterator 31 32 33 34 35
+toIndexedSeq -> toStream -> view StreamView(...) 31 32 33 34 35
+toIndexedSeq -> view -> toIterator non-empty iterator 31 32 33 34 35
+toIndexedSeq -> view -> toStream Stream(31, ?) 31 32 33 34 35
+toIterator -> toIndexedSeq -> toStream Stream(31, ?) 31 32 33 34 35
+toIterator -> toIndexedSeq -> view SeqView(...) 31 32 33 34 35
+toIterator -> toStream -> toIndexedSeq Vector(31, 32, 33, 34, 35) 31 32 33 34 35
+toIterator -> toStream -> view StreamView(...) 31 32 33 34 35
+toIterator -> view -> toIndexedSeq Vector(31, 32, 33, 34, 35) 31 32 33 34 35
+toIterator -> view -> toStream Stream(31, ?) 31 32 33 34 35
+toStream -> toIndexedSeq -> toIterator non-empty iterator 31 32 33 34 35
+toStream -> toIndexedSeq -> view SeqView(...) 31 32 33 34 35
+toStream -> toIterator -> toIndexedSeq Vector(31, 32, 33, 34, 35) 31 32 33 34 35
+toStream -> toIterator -> view StreamView(...) 31 32 33 34 35
+toStream -> view -> toIndexedSeq Vector(31, 32, 33, 34, 35) 31 32 33 34 35
+toStream -> view -> toIterator non-empty iterator 31 32 33 34 35
+view -> toIndexedSeq -> toIterator non-empty iterator 31 32 33 34 35
+view -> toIndexedSeq -> toStream Stream(31, ?) 31 32 33 34 35
+view -> toIterator -> toIndexedSeq Vector(31, 32, 33, 34, 35) 31 32 33 34 35
+view -> toIterator -> toStream Stream(31, ?) 31 32 33 34 35
+view -> toStream -> toIndexedSeq Vector(31, 32, 33, 34, 35) 31 32 33 34 35
+view -> toStream -> toIterator non-empty iterator 31 32 33 34 35
+
+** slice(20, 40) -> take 10 -> drop 5 **
+
+-------------------
+toIndexedSeq -> toIterator -> toStream Stream(26, ?) 26 27 28 29 30
+toIndexedSeq -> toIterator -> view StreamView(...) 26 27 28 29 30
+toIndexedSeq -> toStream -> toIterator non-empty iterator 26 27 28 29 30
+toIndexedSeq -> toStream -> view StreamView(...) 26 27 28 29 30
+toIndexedSeq -> view -> toIterator non-empty iterator 26 27 28 29 30
+toIndexedSeq -> view -> toStream Stream(26, ?) 26 27 28 29 30
+toIterator -> toIndexedSeq -> toStream Stream(26, ?) 26 27 28 29 30
+toIterator -> toIndexedSeq -> view SeqView(...) 26 27 28 29 30
+toIterator -> toStream -> toIndexedSeq Vector(26, 27, 28, 29, 30) 26 27 28 29 30
+toIterator -> toStream -> view StreamView(...) 26 27 28 29 30
+toIterator -> view -> toIndexedSeq Vector(26, 27, 28, 29, 30) 26 27 28 29 30
+toIterator -> view -> toStream Stream(26, ?) 26 27 28 29 30
+toStream -> toIndexedSeq -> toIterator non-empty iterator 26 27 28 29 30
+toStream -> toIndexedSeq -> view SeqView(...) 26 27 28 29 30
+toStream -> toIterator -> toIndexedSeq Vector(26, 27, 28, 29, 30) 26 27 28 29 30
+toStream -> toIterator -> view StreamView(...) 26 27 28 29 30
+toStream -> view -> toIndexedSeq Vector(26, 27, 28, 29, 30) 26 27 28 29 30
+toStream -> view -> toIterator non-empty iterator 26 27 28 29 30
+view -> toIndexedSeq -> toIterator non-empty iterator 26 27 28 29 30
+view -> toIndexedSeq -> toStream Stream(26, ?) 26 27 28 29 30
+view -> toIterator -> toIndexedSeq Vector(26, 27, 28, 29, 30) 26 27 28 29 30
+view -> toIterator -> toStream Stream(26, ?) 26 27 28 29 30
+view -> toStream -> toIndexedSeq Vector(26, 27, 28, 29, 30) 26 27 28 29 30
+view -> toStream -> toIterator non-empty iterator 26 27 28 29 30
diff --git a/test/files/run/view-iterator-stream.scala b/test/files/run/view-iterator-stream.scala
new file mode 100644
index 0000000000..f91407f92c
--- /dev/null
+++ b/test/files/run/view-iterator-stream.scala
@@ -0,0 +1,67 @@
+import scala.collection.{ mutable, immutable, generic }
+import collection.TraversableView
+
+object Test {
+ type PerturberFn[T] = TraversableOnce[T] => TraversableOnce[T]
+ lazy val Id = new Perturber(Nil, identity[TraversableOnce[Int]] _) { }
+ class Perturber(val labels: List[String], val f: PerturberFn[Int]) extends PerturberFn[Int] {
+ def apply(xs: TraversableOnce[Int]): TraversableOnce[Int] = f(xs)
+ def show(xs: TraversableOnce[Int]): String = {
+ val res = f(xs)
+ val resString = "" + res
+ val rest = res.toTraversable
+ val failed = (rest take 100).size == 100
+
+ "%-45s %-30s %s".format(toString, resString,
+ if (failed) "<failed>" else rest.mkString(" ")
+ )
+ }
+ def and(g: Perturber): Perturber =
+ new Perturber(this.labels ++ g.labels, f andThen g.f)
+
+ override def toString = labels mkString " -> "
+ }
+ object Perturber {
+ def apply(label: String, f: PerturberFn[Int]) = new Perturber(List(label), f)
+ }
+
+ def naturals = Stream from 1
+ val toV : Perturber = Perturber("view", _.toTraversable.view)
+ val toI : Perturber = Perturber("toIterator", _.toIterator)
+ val toS : Perturber = Perturber("toStream", _.toStream)
+ val toIS : Perturber = Perturber("toIndexedSeq", _.toIndexedSeq)
+
+ def p(ps: Perturber*): Perturber = if (ps.isEmpty) Id else ps.reduceLeft(_ and _)
+ def drop(n: Int): Perturber = Perturber("drop " + n, _.toIterator drop n)
+ def take(n: Int): Perturber = Perturber("take " + n, _.toIterator take n)
+ def slice(from: Int, until: Int): Perturber =
+ Perturber(
+ "slice(%d, %d)".format(from, until),
+ _.toTraversable.slice(from, until)
+ )
+
+ val fns = List[Perturber](toV, toI, toS, toIS)
+
+ def tds(n: Int): Perturber = p(drop(n), take(n / 2), slice(1, n / 4))
+ def dts(n: Int): Perturber = p(take(n), drop(n / 2), slice(1, n / 4))
+ def sdt(n: Int): Perturber = p(slice(n, n * 2), drop(n / 2), take(n / 4))
+ def std(n: Int): Perturber = p(slice(n, n * 2), take(n / 2), drop(n / 4))
+
+ val transforms = (fns.permutations map (xs => p(xs take 3: _*))).toList.distinct
+ def mkOps(n: Int) = List[Perturber](tds(n), dts(n), sdt(n), std(n))
+ def runOps(n: Int) = {
+ val xs: List[(String, List[String])] = mkOps(n) map { op =>
+ ("" + op, transforms map (_ show op(naturals)) sorted)
+ }
+ for ((k, v) <- xs) {
+ println("\n** " + k + " **\n")
+ println("-------------------")
+ v foreach println
+ }
+ ()
+ }
+
+ def main(args: Array[String]): Unit = {
+ runOps(20)
+ }
+}
diff --git a/test/files/run/viewtest.check b/test/files/run/viewtest.check
index ded3ac0e92..6e0fe81a67 100644
--- a/test/files/run/viewtest.check
+++ b/test/files/run/viewtest.check
@@ -1,17 +1,11 @@
-SeqViewZ((x,0))
+SeqViewZ(...)
ys defined
mapping 1
2
-mapping 1
-mapping 2
-mapping 3
-SeqViewMS(3, 4)
+SeqViewMS(...)
mapping 3
4
-mapping 1
-mapping 2
-mapping 3
-SeqViewM(2, 3, 4)
+SeqViewM(...)
mapping 1
mapping 2
mapping 3
diff --git a/test/files/run/viewtest.scala b/test/files/run/viewtest.scala
index 280ded57cf..bb2c28d68a 100755
--- a/test/files/run/viewtest.scala
+++ b/test/files/run/viewtest.scala
@@ -1,6 +1,5 @@
-import collection._
-object Test extends Application {
-
+object Test extends App {
+ import collection._
val xs: SeqView[(String, Int), Seq[_]] = List("x").view.zip(Stream.from(0))
println(xs)
@@ -13,7 +12,7 @@ object Test extends Application {
println(ys.force)
val zs = Array(1, 2, 3).view
- val as: IndexedSeqView[Int, Array[Int]] = zs map (_ + 1)
+ val as: SeqView[Int, Array[Int]] = zs map (_ + 1)
val bs: Array[Int] = as.force
val cs = zs.reverse
cs(0) += 1
@@ -26,8 +25,8 @@ object Test extends Application {
2.8 regression: CCE when zipping list projection with stream
Reported by: szeiger Owned by: odersky
Priority: normal Component: Standard Library
-Keywords: collections, zip Cc:
-Fixed in version:
+Keywords: collections, zip Cc:
+Fixed in version:
Description
Welcome to Scala version 2.8.0.r18784-b20090925021043 (Java HotSpot(TM) Client VM, Java 1.6.0_11).
diff --git a/test/files/run/virtpatmat_alts.check b/test/files/run/virtpatmat_alts.check
new file mode 100644
index 0000000000..7a4ad0a741
--- /dev/null
+++ b/test/files/run/virtpatmat_alts.check
@@ -0,0 +1 @@
+OK 5
diff --git a/test/files/run/virtpatmat_alts.flags b/test/files/run/virtpatmat_alts.flags
new file mode 100644
index 0000000000..9769db9257
--- /dev/null
+++ b/test/files/run/virtpatmat_alts.flags
@@ -0,0 +1 @@
+ -Yvirtpatmat -Xexperimental
diff --git a/test/files/run/virtpatmat_alts.scala b/test/files/run/virtpatmat_alts.scala
new file mode 100644
index 0000000000..b7717524e2
--- /dev/null
+++ b/test/files/run/virtpatmat_alts.scala
@@ -0,0 +1,12 @@
+object Test extends App {
+ (true, true) match {
+ case (true, true) | (false, false) => 1
+ }
+
+ List(5) match {
+ case 1 :: Nil | 2 :: Nil => println("FAILED")
+ case (x@(4 | 5 | 6)) :: Nil => println("OK "+ x)
+ case 7 :: Nil => println("FAILED")
+ case Nil => println("FAILED")
+ }
+} \ No newline at end of file
diff --git a/test/files/run/virtpatmat_apply.check b/test/files/run/virtpatmat_apply.check
new file mode 100644
index 0000000000..e8e3b295e6
--- /dev/null
+++ b/test/files/run/virtpatmat_apply.check
@@ -0,0 +1 @@
+OK 2
diff --git a/test/files/run/virtpatmat_apply.flags b/test/files/run/virtpatmat_apply.flags
new file mode 100644
index 0000000000..9769db9257
--- /dev/null
+++ b/test/files/run/virtpatmat_apply.flags
@@ -0,0 +1 @@
+ -Yvirtpatmat -Xexperimental
diff --git a/test/files/run/virtpatmat_apply.scala b/test/files/run/virtpatmat_apply.scala
new file mode 100644
index 0000000000..34cb80e449
--- /dev/null
+++ b/test/files/run/virtpatmat_apply.scala
@@ -0,0 +1,7 @@
+object Test extends App {
+ List(1, 2, 3) match {
+ case Nil => println("FAIL")
+ case x :: y :: xs if xs.length == 2 => println("FAIL")
+ case x :: y :: xs if xs.length == 1 => println("OK "+ y)
+ }
+} \ No newline at end of file
diff --git a/test/files/run/virtpatmat_casting.check b/test/files/run/virtpatmat_casting.check
new file mode 100644
index 0000000000..b11425edc8
--- /dev/null
+++ b/test/files/run/virtpatmat_casting.check
@@ -0,0 +1 @@
+List(1)
diff --git a/test/files/run/virtpatmat_casting.flags b/test/files/run/virtpatmat_casting.flags
new file mode 100644
index 0000000000..9769db9257
--- /dev/null
+++ b/test/files/run/virtpatmat_casting.flags
@@ -0,0 +1 @@
+ -Yvirtpatmat -Xexperimental
diff --git a/test/files/run/virtpatmat_casting.scala b/test/files/run/virtpatmat_casting.scala
new file mode 100644
index 0000000000..d970abae90
--- /dev/null
+++ b/test/files/run/virtpatmat_casting.scala
@@ -0,0 +1,8 @@
+object Test extends App {
+ println(List(1,2,3) match {
+ case Nil => List(0)
+// since the :: extractor's argument must be a ::, there has to be a cast before its unapply is invoked
+ case x :: y :: z :: a :: xs => xs ++ List(x)
+ case x :: y :: z :: xs => xs ++ List(x)
+ })
+}
diff --git a/test/files/run/virtpatmat_literal.check b/test/files/run/virtpatmat_literal.check
new file mode 100644
index 0000000000..0eabe36713
--- /dev/null
+++ b/test/files/run/virtpatmat_literal.check
@@ -0,0 +1,3 @@
+OK
+OK
+OK
diff --git a/test/files/run/virtpatmat_literal.flags b/test/files/run/virtpatmat_literal.flags
new file mode 100644
index 0000000000..9769db9257
--- /dev/null
+++ b/test/files/run/virtpatmat_literal.flags
@@ -0,0 +1 @@
+ -Yvirtpatmat -Xexperimental
diff --git a/test/files/run/virtpatmat_literal.scala b/test/files/run/virtpatmat_literal.scala
new file mode 100644
index 0000000000..cb72b1d2a5
--- /dev/null
+++ b/test/files/run/virtpatmat_literal.scala
@@ -0,0 +1,21 @@
+object Test extends App {
+ 1 match {
+ case 2 => println("FAILED")
+ case 1 => println("OK")
+ case 1 => println("FAILED")
+ }
+
+ val one = 1
+ 1 match {
+ case 2 => println("FAILED")
+ case `one` => println("OK")
+ case 1 => println("FAILED")
+ }
+
+ 1 match {
+ case 2 => println("FAILED")
+ case Test.one => println("OK")
+ case 1 => println("FAILED")
+ }
+
+} \ No newline at end of file
diff --git a/test/files/run/virtpatmat_nested_lists.check b/test/files/run/virtpatmat_nested_lists.check
new file mode 100644
index 0000000000..d8263ee986
--- /dev/null
+++ b/test/files/run/virtpatmat_nested_lists.check
@@ -0,0 +1 @@
+2 \ No newline at end of file
diff --git a/test/files/run/virtpatmat_nested_lists.flags b/test/files/run/virtpatmat_nested_lists.flags
new file mode 100644
index 0000000000..9769db9257
--- /dev/null
+++ b/test/files/run/virtpatmat_nested_lists.flags
@@ -0,0 +1 @@
+ -Yvirtpatmat -Xexperimental
diff --git a/test/files/run/virtpatmat_nested_lists.scala b/test/files/run/virtpatmat_nested_lists.scala
new file mode 100644
index 0000000000..fef74cea15
--- /dev/null
+++ b/test/files/run/virtpatmat_nested_lists.scala
@@ -0,0 +1,3 @@
+object Test extends App {
+ List(List(1), List(2)) match { case x :: (y :: Nil) :: Nil => println(y) }
+}
diff --git a/test/files/run/virtpatmat_npe.check b/test/files/run/virtpatmat_npe.check
new file mode 100644
index 0000000000..a0aba9318a
--- /dev/null
+++ b/test/files/run/virtpatmat_npe.check
@@ -0,0 +1 @@
+OK \ No newline at end of file
diff --git a/test/files/run/virtpatmat_npe.flags b/test/files/run/virtpatmat_npe.flags
new file mode 100644
index 0000000000..9769db9257
--- /dev/null
+++ b/test/files/run/virtpatmat_npe.flags
@@ -0,0 +1 @@
+ -Yvirtpatmat -Xexperimental
diff --git a/test/files/run/virtpatmat_npe.scala b/test/files/run/virtpatmat_npe.scala
new file mode 100644
index 0000000000..84a9276454
--- /dev/null
+++ b/test/files/run/virtpatmat_npe.scala
@@ -0,0 +1,10 @@
+class C {
+ class D
+ val values = new Array[AnyRef](10)
+ values(0) match {
+ case name: D => println("NOK: "+ name) // the outer check on D's outer should not cause a NPE
+ case null => println("OK")
+ }
+}
+
+object Test extends C with App \ No newline at end of file
diff --git a/test/files/run/virtpatmat_partial.check b/test/files/run/virtpatmat_partial.check
new file mode 100644
index 0000000000..093020ce05
--- /dev/null
+++ b/test/files/run/virtpatmat_partial.check
@@ -0,0 +1,2 @@
+Map(a -> Some(1), b -> None)
+Map(a -> 1) \ No newline at end of file
diff --git a/test/files/run/virtpatmat_partial.flags b/test/files/run/virtpatmat_partial.flags
new file mode 100644
index 0000000000..9769db9257
--- /dev/null
+++ b/test/files/run/virtpatmat_partial.flags
@@ -0,0 +1 @@
+ -Yvirtpatmat -Xexperimental
diff --git a/test/files/run/virtpatmat_partial.scala b/test/files/run/virtpatmat_partial.scala
new file mode 100644
index 0000000000..c408b31983
--- /dev/null
+++ b/test/files/run/virtpatmat_partial.scala
@@ -0,0 +1,73 @@
+object Test extends App {
+ val a = Map("a" -> Some(1), "b" -> None)
+ println(a)
+
+ val res = a collect {case (p, Some(a)) => (p, a)}
+
+ // should uncurry to:
+ // val res: Map[String,Int] = a.collect[(String, Int), Map[String,Int]](
+ // new PartialFunction[(String, Option[Int]),(String, Int)] {
+ // def apply(x0_1: (String, Option[Int])): (String, Int) = MatchingStrategy.OptionMatchingStrategy.runOrElse[(String, Option[Int]), (String, Int)](x0_1)(
+ // (x1: (String, Option[Int])) => {
+ // val o9: Option[(String, Int)] = ({
+ // val o8: Option[(String, Option[Int])] = Tuple2.unapply[String, Option[Int]](x1);
+ // if (o8.isEmpty)
+ // MatchingStrategy.OptionMatchingStrategy.zero
+ // else
+ // {
+ // val o7: Option[Some[Int]] = if (o8.get._2.isInstanceOf[Some[Int]])
+ // MatchingStrategy.OptionMatchingStrategy.one[Some[Int]](o8.get._2.asInstanceOf[Some[Int]])
+ // else
+ // MatchingStrategy.OptionMatchingStrategy.zero;
+ // if (o7.isEmpty)
+ // MatchingStrategy.OptionMatchingStrategy.zero
+ // else
+ // {
+ // val o6: Option[Int] = Some.unapply[Int](o7.get);
+ // if (o6.isEmpty)
+ // MatchingStrategy.OptionMatchingStrategy.zero
+ // else
+ // MatchingStrategy.OptionMatchingStrategy.one[(String, Int)]((o8.get._1, o6.get).asInstanceOf[(String, Int)])
+ // }
+ // }
+ // }: Option[(String, Int)]);
+ // if (o9.isEmpty)
+ // (MatchingStrategy.OptionMatchingStrategy.zero: Option[(String, Int)])
+ // else
+ // o9
+ // })
+ //
+ // def isDefinedAt(x_1: (String, Option[Int])): Boolean = MatchingStrategy.OptionMatchingStrategy.isSuccess[(String, Option[Int]), (String, Int)](x_1)(
+ // (x1: (String, Option[Int])) => {
+ // val o9: Option[(String, Int)] = ({
+ // val o8: Option[(String, Option[Int])] = scala.Tuple2.unapply[String, Option[Int]](x1);
+ // if (o8.isEmpty)
+ // MatchingStrategy.OptionMatchingStrategy.zero
+ // else
+ // {
+ // val o7: Option[Some[Int]] = if (o8.get._2.isInstanceOf[Some[Int]])
+ // MatchingStrategy.OptionMatchingStrategy.one[Some[Int]](o8.get._2.asInstanceOf[Some[Int]]) // XXX
+ // else
+ // MatchingStrategy.OptionMatchingStrategy.zero;
+ // if (o7.isEmpty)
+ // MatchingStrategy.OptionMatchingStrategy.zero
+ // else
+ // {
+ // val o6: Option[Int] = scala.Some.unapply[Int](o7.get);
+ // if (o6.isEmpty)
+ // MatchingStrategy.OptionMatchingStrategy.zero
+ // else
+ // MatchingStrategy.OptionMatchingStrategy.one[(String, Int)](null.asInstanceOf[(String, Int)])
+ // }
+ // }
+ // }: Option[(String, Int)]);
+ // if (o9.isEmpty)
+ // (MatchingStrategy.OptionMatchingStrategy.zero: Option[(String, Int)])
+ // else
+ // o9
+ // })
+ // }
+ // )
+
+ println(res)
+}
diff --git a/test/files/run/virtpatmat_typed.check b/test/files/run/virtpatmat_typed.check
new file mode 100644
index 0000000000..cec2740d18
--- /dev/null
+++ b/test/files/run/virtpatmat_typed.check
@@ -0,0 +1 @@
+OK foo
diff --git a/test/files/run/virtpatmat_typed.flags b/test/files/run/virtpatmat_typed.flags
new file mode 100644
index 0000000000..9769db9257
--- /dev/null
+++ b/test/files/run/virtpatmat_typed.flags
@@ -0,0 +1 @@
+ -Yvirtpatmat -Xexperimental
diff --git a/test/files/run/virtpatmat_typed.scala b/test/files/run/virtpatmat_typed.scala
new file mode 100644
index 0000000000..a9863cc48a
--- /dev/null
+++ b/test/files/run/virtpatmat_typed.scala
@@ -0,0 +1,7 @@
+object Test extends App {
+ ("foo": Any) match {
+ case x: Int => println("FAILED")
+ case x: String => println("OK "+ x)
+ case x: String => println("FAILED")
+ }
+} \ No newline at end of file
diff --git a/test/files/run/virtpatmat_unapply.check b/test/files/run/virtpatmat_unapply.check
new file mode 100644
index 0000000000..2b89b77d1e
--- /dev/null
+++ b/test/files/run/virtpatmat_unapply.check
@@ -0,0 +1,2 @@
+1
+6
diff --git a/test/files/run/virtpatmat_unapply.flags b/test/files/run/virtpatmat_unapply.flags
new file mode 100644
index 0000000000..9769db9257
--- /dev/null
+++ b/test/files/run/virtpatmat_unapply.flags
@@ -0,0 +1 @@
+ -Yvirtpatmat -Xexperimental
diff --git a/test/files/run/virtpatmat_unapply.scala b/test/files/run/virtpatmat_unapply.scala
new file mode 100644
index 0000000000..6d7b4dbe68
--- /dev/null
+++ b/test/files/run/virtpatmat_unapply.scala
@@ -0,0 +1,32 @@
+class IntList(val hd: Int, val tl: IntList)
+object NilIL extends IntList(0, null)
+object IntList {
+ def unapply(il: IntList): Option[(Int, IntList)] = if(il eq NilIL) None else Some(il.hd, il.tl)
+ def apply(x: Int, xs: IntList) = new IntList(x, xs)
+}
+
+object Test extends App {
+ IntList(1, IntList(2, NilIL)) match {
+ case IntList(a1, IntList(a2, IntList(a3, y))) => println(a1 + a2 + a3)
+ case IntList(x, y) => println(x)
+ }
+
+ IntList(1, IntList(2, IntList(3, NilIL))) match {
+ case IntList(a1, IntList(a2, IntList(a3, y))) => println(a1 + a2 + a3)
+ case IntList(x, y) => println(x)
+ }
+}
+
+// ((x1: IntList) => IntList.unapply(x1).flatMap(((x4: (Int, IntList)) => IntList.unapply(x4._2).flatMap(((x5: (Int, IntList)) => IntList.unapply(x5._2).flatMap(((x6: (Int, IntList)) => implicitly[Predef.MatchingStrategy[Option]].success(Predef.println(x4._1.+(x5._1).+(x6._1))))))))).orElse(IntList.unapply(x1).flatMap(((x7: (Int, IntList)) => implicitly[scala.Predef.MatchingStrategy[Option]].success(Predef.println(x7._1))))).orElse(implicitly[scala.Predef.MatchingStrategy[Option]].fail))(IntList.apply(1, IntList.apply(2, IntList.apply(3, null))))
+
+/*
+ ((x1: IntList) =>
+ IntList.this.unapply(x1).flatMap[Int](((x4: (Int, IntList)) =>
+ IntList.this.unapply(x4._2).flatMap[Int](((x5: (Int, IntList)) =>
+ IntList.this.unapply(x5._2).flatMap[Int](((x6: (Int, IntList)) =>
+ Predef.this.implicitly[scala.Predef.MatchingStrategy[Option]](scala.this.Predef.OptionMatching).success[Int](x6._1))))))).orElse[Int](
+ IntList.this.unapply(x1).flatMap[Int](((x7: (Int, IntList)) =>
+ Predef.this.implicitly[scala.Predef.MatchingStrategy[Option]](scala.this.Predef.OptionMatching).success[Int](x7._1)))).orElse[Int](
+ Predef.this.implicitly[scala.Predef.MatchingStrategy[Option]](scala.this.Predef.OptionMatching).fail)
+ ).apply(IntList.apply(1, null))
+*/ \ No newline at end of file
diff --git a/test/files/run/virtpatmat_unapplyseq.check b/test/files/run/virtpatmat_unapplyseq.check
new file mode 100644
index 0000000000..62f9457511
--- /dev/null
+++ b/test/files/run/virtpatmat_unapplyseq.check
@@ -0,0 +1 @@
+6 \ No newline at end of file
diff --git a/test/files/run/virtpatmat_unapplyseq.flags b/test/files/run/virtpatmat_unapplyseq.flags
new file mode 100644
index 0000000000..9769db9257
--- /dev/null
+++ b/test/files/run/virtpatmat_unapplyseq.flags
@@ -0,0 +1 @@
+ -Yvirtpatmat -Xexperimental
diff --git a/test/files/run/virtpatmat_unapplyseq.scala b/test/files/run/virtpatmat_unapplyseq.scala
new file mode 100644
index 0000000000..270fa9045a
--- /dev/null
+++ b/test/files/run/virtpatmat_unapplyseq.scala
@@ -0,0 +1,5 @@
+object Test extends App {
+ List(1,2,3) match {
+ case Seq(x, y, z) => println(x * y * z)
+ }
+} \ No newline at end of file
diff --git a/test/files/run/weakconform.scala b/test/files/run/weakconform.scala
new file mode 100755
index 0000000000..30a12b9298
--- /dev/null
+++ b/test/files/run/weakconform.scala
@@ -0,0 +1,4 @@
+object Test extends App {
+ val x: Float = 10/3
+ assert(x == 3.0)
+}
diff --git a/test/files/run/withIndex.scala b/test/files/run/withIndex.scala
index 3b9c9e84e5..910b1f1f9e 100644
--- a/test/files/run/withIndex.scala
+++ b/test/files/run/withIndex.scala
@@ -3,7 +3,7 @@ object Test {
val ary: Array[String] = Array("a", "b", "c")
val lst: List[String] = List("a", "b", "c")
val itr: Iterator[String] = lst.iterator
- val str: Stream[String] = Stream.fromIterator(lst.iterator)
+ val str: Stream[String] = lst.iterator.toStream
Console.println(ary.zipWithIndex.toList)
Console.println(lst.zipWithIndex.toList)
diff --git a/test/files/run/xml-loop-bug.scala b/test/files/run/xml-loop-bug.scala
new file mode 100644
index 0000000000..378ae9bc2b
--- /dev/null
+++ b/test/files/run/xml-loop-bug.scala
@@ -0,0 +1,6 @@
+object Test {
+ def main(args: Array[String]): Unit = {
+ scala.tools.nsc.io.NullPrintStream.setOutAndErr()
+ scala.xml.parsing.ConstructingParser.fromSource(scala.io.Source.fromString("<!DOCTYPE xmeml SYSTEM> <xmeml> <sequence> </sequence> </xmeml> "), true).document.docElem
+ }
+}
diff --git a/test/files/scalacheck/CheckEither.scala b/test/files/scalacheck/CheckEither.scala
new file mode 100644
index 0000000000..a7e50877a7
--- /dev/null
+++ b/test/files/scalacheck/CheckEither.scala
@@ -0,0 +1,194 @@
+import org.scalacheck.{ Arbitrary, ConsoleReporter, Prop, Properties }
+import org.scalacheck.Arbitrary.{arbitrary, arbThrowable}
+import org.scalacheck.Gen.oneOf
+import org.scalacheck.util.StdRand
+import org.scalacheck.Prop._
+import org.scalacheck.ConsoleReporter.{testReport, propReport}
+import org.scalacheck.Test.{Params, check}
+import org.scalacheck.ConsoleReporter.testStatsEx
+import Function.tupled
+
+object CheckEither extends Properties("Either") {
+ implicit def arbitraryEither[X, Y](implicit xa: Arbitrary[X], ya: Arbitrary[Y]): Arbitrary[Either[X, Y]] =
+ Arbitrary[Either[X, Y]](oneOf(arbitrary[X].map(Left(_)), arbitrary[Y].map(Right(_))))
+
+ val prop_either1 = forAll((n: Int) => Left(n).fold(x => x, b => error("fail")) == n)
+
+ val prop_either2 = forAll((n: Int) => Right(n).fold(a => error("fail"), x => x) == n)
+
+ val prop_swap = forAll((e: Either[Int, Int]) => e match {
+ case Left(a) => e.swap.right.get == a
+ case Right(b) => e.swap.left.get == b
+ })
+
+ val prop_isLeftRight = forAll((e: Either[Int, Int]) => e.isLeft != e.isRight)
+
+ object CheckLeftProjection {
+ val prop_value = forAll((n: Int) => Left(n).left.get == n)
+
+ val prop_getOrElse = forAll((e: Either[Int, Int], or: Int) => e.left.getOrElse(or) == (e match {
+ case Left(a) => a
+ case Right(_) => or
+ }))
+
+ val prop_forall = forAll((e: Either[Int, Int]) =>
+ e.left.forall(_ % 2 == 0) == (e.isRight || e.left.get % 2 == 0))
+
+ val prop_exists = forAll((e: Either[Int, Int]) =>
+ e.left.exists(_ % 2 == 0) == (e.isLeft && e.left.get % 2 == 0))
+
+ val prop_flatMapLeftIdentity = forAll((e: Either[Int, Int], n: Int, s: String) => {
+ def f(x: Int) = if(x % 2 == 0) Left(s) else Right(s)
+ Left(n).left.flatMap(f(_)) == f(n)})
+
+ val prop_flatMapRightIdentity = forAll((e: Either[Int, Int]) => e.left.flatMap(Left(_)) == e)
+
+ val prop_flatMapComposition = forAll((e: Either[Int, Int]) => {
+ def f(x: Int) = if(x % 2 == 0) Left(x) else Right(x)
+ def g(x: Int) = if(x % 7 == 0) Right(x) else Left(x)
+ e.left.flatMap(f(_)).left.flatMap(g(_)) == e.left.flatMap(f(_).left.flatMap(g(_)))})
+
+ val prop_mapIdentity = forAll((e: Either[Int, Int]) => e.left.map(x => x) == e)
+
+ val prop_mapComposition = forAll((e: Either[String, Int]) => {
+ def f(s: String) = s.toLowerCase
+ def g(s: String) = s.reverse
+ e.left.map(x => f(g(x))) == e.left.map(x => g(x)).left.map(f(_))})
+
+ val prop_filter = forAll((e: Either[Int, Int], x: Int) => e.left.filter(_ % 2 == 0) ==
+ (if(e.isRight || e.left.get % 2 != 0) None else Some(e)))
+
+ val prop_seq = forAll((e: Either[Int, Int]) => e.left.toSeq == (e match {
+ case Left(a) => Seq(a)
+ case Right(_) => Seq.empty
+ }))
+
+ val prop_option = forAll((e: Either[Int, Int]) => e.left.toOption == (e match {
+ case Left(a) => Some(a)
+ case Right(_) => None
+ }))
+ }
+
+ object CheckRightProjection {
+ val prop_value = forAll((n: Int) => Right(n).right.get == n)
+
+ val prop_getOrElse = forAll((e: Either[Int, Int], or: Int) => e.right.getOrElse(or) == (e match {
+ case Left(_) => or
+ case Right(b) => b
+ }))
+
+ val prop_forall = forAll((e: Either[Int, Int]) =>
+ e.right.forall(_ % 2 == 0) == (e.isLeft || e.right.get % 2 == 0))
+
+ val prop_exists = forAll((e: Either[Int, Int]) =>
+ e.right.exists(_ % 2 == 0) == (e.isRight && e.right.get % 2 == 0))
+
+ val prop_flatMapLeftIdentity = forAll((e: Either[Int, Int], n: Int, s: String) => {
+ def f(x: Int) = if(x % 2 == 0) Left(s) else Right(s)
+ Right(n).right.flatMap(f(_)) == f(n)})
+
+ val prop_flatMapRightIdentity = forAll((e: Either[Int, Int]) => e.right.flatMap(Right(_)) == e)
+
+ val prop_flatMapComposition = forAll((e: Either[Int, Int]) => {
+ def f(x: Int) = if(x % 2 == 0) Left(x) else Right(x)
+ def g(x: Int) = if(x % 7 == 0) Right(x) else Left(x)
+ e.right.flatMap(f(_)).right.flatMap(g(_)) == e.right.flatMap(f(_).right.flatMap(g(_)))})
+
+ val prop_mapIdentity = forAll((e: Either[Int, Int]) => e.right.map(x => x) == e)
+
+ val prop_mapComposition = forAll((e: Either[Int, String]) => {
+ def f(s: String) = s.toLowerCase
+ def g(s: String) = s.reverse
+ e.right.map(x => f(g(x))) == e.right.map(x => g(x)).right.map(f(_))})
+
+ val prop_filter = forAll((e: Either[Int, Int], x: Int) => e.right.filter(_ % 2 == 0) ==
+ (if(e.isLeft || e.right.get % 2 != 0) None else Some(e)))
+
+ val prop_seq = forAll((e: Either[Int, Int]) => e.right.toSeq == (e match {
+ case Left(_) => Seq.empty
+ case Right(b) => Seq(b)
+ }))
+
+ val prop_option = forAll((e: Either[Int, Int]) => e.right.toOption == (e match {
+ case Left(_) => None
+ case Right(b) => Some(b)
+ }))
+ }
+
+ val prop_Either_left = forAll((n: Int) => Left(n).left.get == n)
+
+ val prop_Either_right = forAll((n: Int) => Right(n).right.get == n)
+
+ val prop_Either_joinLeft = forAll((e: Either[Either[Int, Int], Int]) => e match {
+ case Left(ee) => e.joinLeft == ee
+ case Right(n) => e.joinLeft == Right(n)
+ })
+
+ val prop_Either_joinRight = forAll((e: Either[Int, Either[Int, Int]]) => e match {
+ case Left(n) => e.joinRight == Left(n)
+ case Right(ee) => e.joinRight == ee
+ })
+
+ val prop_Either_reduce = forAll((e: Either[Int, Int]) =>
+ e.merge == (e match {
+ case Left(a) => a
+ case Right(a) => a
+ }))
+
+ /** Hard to believe I'm "fixing" a test to reflect B before A ... */
+ val prop_Either_cond = forAll((c: Boolean, a: Int, b: Int) =>
+ Either.cond(c, a, b) == (if(c) Right(a) else Left(b)))
+
+ val tests = List(
+ ("prop_either1", prop_either1),
+ ("prop_either2", prop_either2),
+ ("prop_swap", prop_swap),
+ ("prop_isLeftRight", prop_isLeftRight),
+ ("Left.prop_value", CheckLeftProjection.prop_value),
+ ("Left.prop_getOrElse", CheckLeftProjection.prop_getOrElse),
+ ("Left.prop_forall", CheckLeftProjection.prop_forall),
+ ("Left.prop_exists", CheckLeftProjection.prop_exists),
+ ("Left.prop_flatMapLeftIdentity", CheckLeftProjection.prop_flatMapLeftIdentity),
+ ("Left.prop_flatMapRightIdentity", CheckLeftProjection.prop_flatMapRightIdentity),
+ ("Left.prop_flatMapComposition", CheckLeftProjection.prop_flatMapComposition),
+ ("Left.prop_mapIdentity", CheckLeftProjection.prop_mapIdentity),
+ ("Left.prop_mapComposition", CheckLeftProjection.prop_mapComposition),
+ ("Left.prop_filter", CheckLeftProjection.prop_filter),
+ ("Left.prop_seq", CheckLeftProjection.prop_seq),
+ ("Left.prop_option", CheckLeftProjection.prop_option),
+ ("Right.prop_value", CheckRightProjection.prop_value),
+ ("Right.prop_getOrElse", CheckRightProjection.prop_getOrElse),
+ ("Right.prop_forall", CheckRightProjection.prop_forall),
+ ("Right.prop_exists", CheckRightProjection.prop_exists),
+ ("Right.prop_flatMapLeftIdentity", CheckRightProjection.prop_flatMapLeftIdentity),
+ ("Right.prop_flatMapRightIdentity", CheckRightProjection.prop_flatMapRightIdentity),
+ ("Right.prop_flatMapComposition", CheckRightProjection.prop_flatMapComposition),
+ ("Right.prop_mapIdentity", CheckRightProjection.prop_mapIdentity),
+ ("Right.prop_mapComposition", CheckRightProjection.prop_mapComposition),
+ ("Right.prop_filter", CheckRightProjection.prop_filter),
+ ("Right.prop_seq", CheckRightProjection.prop_seq),
+ ("Right.prop_option", CheckRightProjection.prop_option),
+ ("prop_Either_left", prop_Either_left),
+ ("prop_Either_right", prop_Either_right),
+ ("prop_Either_joinLeft", prop_Either_joinLeft),
+ ("prop_Either_joinRight", prop_Either_joinRight),
+ ("prop_Either_reduce", prop_Either_reduce),
+ ("prop_Either_cond", prop_Either_cond)
+ )
+
+ for ((label, prop) <- tests) {
+ property(label) = prop
+ }
+
+ import org.scalacheck.{ Test => STest }
+
+ def runTests() = {
+ STest.checkProperties(STest.Params(testCallback = ConsoleReporter(0)), this)
+ }
+}
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ CheckEither.runTests()
+ }
+}
diff --git a/test/files/scalacheck/HashTrieSplit.scala b/test/files/scalacheck/HashTrieSplit.scala
new file mode 100644
index 0000000000..908c878f54
--- /dev/null
+++ b/test/files/scalacheck/HashTrieSplit.scala
@@ -0,0 +1,47 @@
+
+
+
+
+
+import collection._
+
+
+
+
+// checks whether hash tries split their iterators correctly
+// even after some elements have been traversed
+object Test {
+ def main(args: Array[String]) {
+ doesSplitOk
+ }
+
+ def doesSplitOk = {
+ val sz = 2000
+ var ht = new parallel.immutable.ParHashMap[Int, Int]
+ // println("creating trie")
+ for (i <- 0 until sz) ht += ((i + sz, i))
+ // println("created trie")
+ for (n <- 0 until (sz - 1)) {
+ // println("---------> n = " + n)
+ val pit = ht.splitter
+ val pit2 = ht.splitter
+ var i = 0
+ while (i < n) {
+ pit.next
+ pit2.next
+ i += 1
+ }
+ // println("splitting")
+ val pits = pit.split
+ val fst = pits(0).toSet
+ val snd = pits(1).toSet
+ val orig = pit2.toSet
+ if (orig.size != (fst.size + snd.size) || orig != (fst ++ snd)) {
+ println("Original: " + orig)
+ println("First: " + fst)
+ println("Second: " + snd)
+ assert(false)
+ }
+ }
+ }
+}
diff --git a/test/files/scalacheck/Unrolled.scala b/test/files/scalacheck/Unrolled.scala
new file mode 100644
index 0000000000..8067a44501
--- /dev/null
+++ b/test/files/scalacheck/Unrolled.scala
@@ -0,0 +1,26 @@
+import org.scalacheck._
+import Prop._
+import Gen._
+
+import collection.mutable.UnrolledBuffer
+
+object Test extends Properties("UnrolledBuffer") {
+
+ property("concat size") = forAll { (l1: List[Int], l2: List[Int]) =>
+ val u1 = new UnrolledBuffer[Int]
+ u1 ++= l1
+ val u2 = new UnrolledBuffer[Int]
+ u2 ++= l2
+ val totalsz = u1.size + u2.size
+ u1 concat u2
+ totalsz == u1.size
+ }
+
+ property("adding") = forAll { (l: List[Int]) =>
+ val u = new UnrolledBuffer[Int]
+ u ++= l
+ u == l
+ }
+
+}
+
diff --git a/test/files/scalacheck/array.scala b/test/files/scalacheck/array.scala
index 2febca4447..f262bc6320 100644
--- a/test/files/scalacheck/array.scala
+++ b/test/files/scalacheck/array.scala
@@ -4,36 +4,34 @@ import Gen._
import Arbitrary._
import util._
import Buildable._
+import scala.collection.mutable.ArraySeq
object Test extends Properties("Array") {
- val myGens: Seq[Gen[Array[_]]] = List(
- arbArray[Int],
- arbArray[Array[Int]],
- arbArray[List[String]],
- arbArray[String],
- arbArray[Boolean],
- arbArray[AnyVal](arbAnyVal)
- ) map (_.arbitrary)
-
+ /** At this moment the authentic scalacheck Array Builder/Arb bits are commented out.
+ */
+ implicit def arbArray[T](implicit a: Arbitrary[T], m: Manifest[T]): Arbitrary[Array[T]] =
+ Arbitrary(containerOf[List,T](arbitrary[T]) map (_.toArray))
+
+ val arrGen: Gen[Array[_]] = oneOf(
+ arbitrary[Array[Int]],
+ arbitrary[Array[Array[Int]]],
+ arbitrary[Array[List[String]]],
+ arbitrary[Array[String]],
+ arbitrary[Array[Boolean]],
+ arbitrary[Array[AnyVal]]
+ )
+
// inspired by #1857 and #2352
- property("eq/ne") =
- forAll(oneOf(myGens: _*)) { c1 =>
- forAll(oneOf(myGens: _*)) { c2 =>
- (c1 eq c2) || (c1 ne c2)
- }
- }
+ property("eq/ne") = forAll(arrGen, arrGen) { (c1, c2) =>
+ (c1 eq c2) || (c1 ne c2)
+ }
- def smallInt = choose(1, 10)
// inspired by #2299
- property("ofDim") = forAll(smallInt) { i1 =>
- forAll(smallInt) { i2 =>
- forAll(smallInt) { i3 =>
- val arr = Array.ofDim[String](i1, i2, i3)
- val flattened = arr flatMap (x => x) flatMap (x => x)
-
- flattened.length == i1 * i2 * i3
- }
- }
- }
+ def smallInt = choose(1, 10)
+ property("ofDim") = forAll(smallInt, smallInt, smallInt) { (i1, i2, i3) =>
+ val arr = Array.ofDim[String](i1, i2, i3)
+ val flattened = arr flatMap (x => x) flatMap (x => x)
+ flattened.length == i1 * i2 * i3
+ }
}
diff --git a/test/files/scalacheck/list.scala b/test/files/scalacheck/list.scala
index 87ecd70a48..4e1cf1fc80 100644
--- a/test/files/scalacheck/list.scala
+++ b/test/files/scalacheck/list.scala
@@ -7,14 +7,14 @@ object Test extends Properties("List") {
property("concat size") = forAll { (l1: List[Int], l2: List[Int]) => (l1.size + l2.size) == (l1 ::: l2).size }
property("reverse") = forAll { (l1: List[Int]) => l1.reverse.reverse == l1 }
- property("toSet") = forAll { (l1: List[Int]) => sorted(l1.toSet.toList) sameElements sorted(l1).removeDuplicates }
- property("flatten") = forAll { (xxs: List[List[Int]]) => xxs.flatten.length == (xxs map (_.length) sum) }
+ property("toSet") = forAll { (l1: List[Int]) => sorted(l1.toSet.toList) sameElements sorted(l1).distinct }
+ // property("flatten") = forAll { (xxs: List[List[Int]]) => xxs.flatten.length == (xxs map (_.length) sum) }
property("startsWith/take") = forAll { (xs: List[Int], count: Int) => xs startsWith (xs take count) }
property("endsWith/takeRight") = forAll { (xs: List[Int], count: Int) => xs endsWith (xs takeRight count) }
property("fill") = forAll(choose(1, 100)) { count =>
- forAll { (x: Int) =>
+ forAll { (x: Int) =>
val xs = List.fill(count)(x)
- (xs.length == count) && (xs.removeDuplicates == List(x))
+ (xs.length == count) && (xs.distinct == List(x))
}
}
}
diff --git a/test/files/scalacheck/parallel-collections/IntOperators.scala b/test/files/scalacheck/parallel-collections/IntOperators.scala
new file mode 100644
index 0000000000..5c997962ba
--- /dev/null
+++ b/test/files/scalacheck/parallel-collections/IntOperators.scala
@@ -0,0 +1,129 @@
+package scala.collection.parallel.ops
+
+
+import scala.collection.parallel._
+
+
+trait IntOperators extends Operators[Int] {
+ def reduceOperators = List(_ + _, _ * _, math.min(_, _), math.max(_, _), _ ^ _)
+ def countPredicates = List(
+ x => true,
+ _ >= 0, _ < 0, _ < 50, _ < 500, _ < 5000, _ < 50000, _ % 2 == 0, _ == 99,
+ x => x > 50 && x < 150,
+ x => x > 350 && x < 550,
+ x => (x > 1000 && x < 1500) || (x > 400 && x < 500)
+ )
+ def forallPredicates = List(_ >= 0, _ < 0, _ % 2 == 0, _ != 55, _ != 505, _ != 5005)
+ def existsPredicates = List(_ >= 0, _ < 0, _ % 2 == 0, _ == 55, _ == 505, _ == 5005)
+ def findPredicates = List(_ >= 0, _ % 2 == 0, _ < 0, _ == 50, _ == 500, _ == 5000)
+ def mapFunctions = List(-_, math.abs(_), _ % 2, _ % 3, _ % 4, _ % 150, _ % 500)
+ def partialMapFunctions = List({case x => -x}, { case 0 => -1; case x if x > 0 => x + 1}, {case x if x % 3 == 0 => x / 3})
+ def flatMapFunctions = List(
+ (n: Int) => if (n < 0) List() else if (n % 2 == 0) List(1, 2, 3) else List(4, 5, 6),
+ (n: Int) => List[Int](),
+ (n: Int) => if (n == 0) List(1, 2, 3, 4, 5) else if (n < 0) List(1, 2, 3) else List()
+ )
+ def filterPredicates = List(
+ _ % 2 == 0, _ % 3 == 0,
+ _ % 4 != 0, _ % 17 != 0,
+ n => n > 50 && n < 100,
+ _ >= 0, _ < 0, _ == 99,
+ _ > 500, _ > 5000, _ > 50000,
+ _ < 500, _ < 50, _ < -50, _ < -5e5,
+ x => true, x => false,
+ x => x % 53 == 0 && x % 17 == 0
+ )
+ def filterNotPredicates = filterPredicates
+ def partitionPredicates = filterPredicates
+ def takeWhilePredicates = List(
+ _ != 50, _ != 500, _ != 5000, _ != 50000, _ % 2 == 0, _ % 3 == 1, _ % 47 != 0,
+ _ < 100, _ < 1000, _ < 10000, _ < 0,
+ _ < -100, _ < -1000, _ > -200, _ > -50,
+ n => -90 < n && n < -10,
+ n => 50 < n && n < 550,
+ n => 5000 < n && n < 7500,
+ n => -50 < n && n < 450
+ )
+ def dropWhilePredicates = takeWhilePredicates
+ def spanPredicates = takeWhilePredicates
+ def foldArguments = List(
+ (0, _ + _),
+ (1, _ * _),
+ (Int.MinValue, math.max(_, _)),
+ (Int.MaxValue, math.min(_, _))
+ )
+ def addAllTraversables = List(
+ List[Int](),
+ List(1),
+ List(1, 2),
+ List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
+ Array.fill(1000)(1).toSeq
+ )
+ def newArray(sz: Int) = new Array[Int](sz)
+ def groupByFunctions = List(
+ _ % 2, _ % 3, _ % 5, _ % 10, _ % 154, _% 3217,
+ _ * 2, _ + 1
+ )
+}
+
+
+trait IntSeqOperators extends IntOperators with SeqOperators[Int] {
+ def segmentLengthPredicates = List(
+ _ % 2 == 0, _ > 0, _ >= 0, _ < 0, _ <= 0, _ > -5000, _ > 5000, _ % 541 != 0, _ < -50, _ > 500,
+ n => -90 < n && n < -10, n => 500 < n && n < 1500
+ )
+ def indexWherePredicates = List(
+ _ % 2 == 0, _ % 11 == 0, _ % 123 == 0, _ % 901 == 0,
+ _ > 0, _ >= 0, _ < 0, _ <= 0,
+ _ > 50, _ > 500, _ > 5000,
+ _ < -10, _ < -100, _ < -1000,
+ n => n > 50 && n < 100,
+ n => n * n > 1000000 && n % 111 == 0
+ )
+ def lastIndexWherePredicates = List(
+ _ % 2 == 0, _ % 17 == 0, _ % 314 == 0, _ % 1017 == 0,
+ _ > 0, _ >= 0, _ < 0, _ <= 0,
+ _ > 50, _ > 500, _ > 5000,
+ _ < -20, _ < -200, _ < -2000,
+ _ == 0,
+ n => n > -40 && n < 40,
+ n => n > -80 && n < -10,
+ n => n > 110 && n < 150
+ )
+ def reverseMapFunctions = List(-_, n => n * n, _ + 1)
+ def sameElementsSeqs = List(
+ List[Int](),
+ List(1),
+ List(1, 2, 3, 4, 5, 6, 7, 8, 9),
+ Array.fill(150)(1).toSeq,
+ Array.fill(1000)(1).toSeq
+ )
+ def startEndSeqs = List(
+ Nil,
+ List(1),
+ List(1, 2, 3, 4, 5),
+ List(0, 1, 2, 3, 4, 5),
+ List(4, 5, 6, 7, 8, 9, 10),
+ List(4, 5, 6, 7, 8, 9, 0),
+ List(-4, -3, -2, -1)
+ )
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/files/scalacheck/parallel-collections/IntValues.scala b/test/files/scalacheck/parallel-collections/IntValues.scala
new file mode 100644
index 0000000000..cab60ead76
--- /dev/null
+++ b/test/files/scalacheck/parallel-collections/IntValues.scala
@@ -0,0 +1,29 @@
+package scala.collection.parallel.ops
+
+
+
+
+
+import org.scalacheck._
+import org.scalacheck.Gen
+import org.scalacheck.Gen._
+import org.scalacheck.Prop._
+import org.scalacheck.Properties
+import org.scalacheck.Arbitrary._
+
+
+
+
+trait IntValues {
+ def values = Seq(
+ arbitrary[Int],
+ arbitrary[Int] suchThat (_ >= 0),
+ arbitrary[Int] suchThat (_ < 0),
+ choose(0, 0),
+ choose(0, 10),
+ choose(0, 100),
+ choose(0, 1000) suchThat (_ % 2 == 0),
+ choose(0, 1000) suchThat (_ % 2 != 0),
+ choose(0, 1000) suchThat (n => (n % 2 == 0) || (n % 3 == 0))
+ )
+}
diff --git a/test/files/scalacheck/parallel-collections/Operators.scala b/test/files/scalacheck/parallel-collections/Operators.scala
new file mode 100644
index 0000000000..72133a5009
--- /dev/null
+++ b/test/files/scalacheck/parallel-collections/Operators.scala
@@ -0,0 +1,36 @@
+package scala.collection.parallel
+
+
+
+
+trait Operators[T] {
+ def reduceOperators: List[(T, T) => T]
+ def countPredicates: List[T => Boolean]
+ def forallPredicates: List[T => Boolean]
+ def existsPredicates: List[T => Boolean]
+ def findPredicates: List[T => Boolean]
+ def mapFunctions: List[T => T]
+ def partialMapFunctions: List[PartialFunction[T, T]]
+ def flatMapFunctions: List[T => Traversable[T]]
+ def filterPredicates: List[T => Boolean]
+ def filterNotPredicates: List[T => Boolean]
+ def partitionPredicates: List[T => Boolean]
+ def takeWhilePredicates: List[T => Boolean]
+ def dropWhilePredicates: List[T => Boolean]
+ def spanPredicates: List[T => Boolean]
+ def foldArguments: List[(T, (T, T) => T)]
+ def addAllTraversables: List[Traversable[T]]
+ def newArray(sz: Int): Array[T]
+ def groupByFunctions: List[T => T]
+}
+
+
+
+trait SeqOperators[T] extends Operators[T] {
+ def segmentLengthPredicates: List[T => Boolean]
+ def indexWherePredicates: List[T => Boolean]
+ def lastIndexWherePredicates: List[T => Boolean]
+ def reverseMapFunctions: List[T => T]
+ def sameElementsSeqs: List[Seq[T]]
+ def startEndSeqs: List[Seq[T]]
+}
diff --git a/test/files/scalacheck/parallel-collections/PairOperators.scala b/test/files/scalacheck/parallel-collections/PairOperators.scala
new file mode 100644
index 0000000000..4711e21c34
--- /dev/null
+++ b/test/files/scalacheck/parallel-collections/PairOperators.scala
@@ -0,0 +1,101 @@
+package scala.collection.parallel.ops
+
+
+import scala.collection.parallel._
+
+
+trait PairOperators[K, V] extends Operators[(K, V)] {
+ def koperators: Operators[K]
+ def voperators: Operators[V]
+
+ private def zipPredicates(kps: List[K => Boolean], vps: List[V => Boolean]): List[((K, V)) => Boolean] = for {
+ (kp, vp) <- koperators.countPredicates zip voperators.countPredicates
+ } yield new Function1[(K, V), Boolean] {
+ def apply(kv: (K, V)) = kp(kv._1) && vp(kv._2)
+ }
+
+ /* operators */
+
+ def reduceOperators = for {
+ (kop, vop) <- koperators.reduceOperators zip voperators.reduceOperators
+ } yield new Function2[(K, V), (K, V), (K, V)] {
+ def apply(kv1: (K, V), kv2: (K, V)) = (kop(kv1._1, kv2._1), vop(kv1._2, kv2._2))
+ }
+
+ def countPredicates = zipPredicates(koperators.countPredicates, voperators.countPredicates)
+
+ def forallPredicates = zipPredicates(koperators.forallPredicates, voperators.forallPredicates)
+
+ def existsPredicates = zipPredicates(koperators.existsPredicates, voperators.existsPredicates)
+
+ def findPredicates = zipPredicates(koperators.findPredicates, voperators.findPredicates)
+
+ def mapFunctions = for {
+ (km, vm) <- koperators.mapFunctions zip voperators.mapFunctions
+ } yield new Function1[(K, V), (K, V)] {
+ def apply(kv: (K, V)) = (km(kv._1), vm(kv._2))
+ }
+
+ def partialMapFunctions = for {
+ (kpm, vpm) <- koperators.partialMapFunctions zip voperators.partialMapFunctions
+ } yield new PartialFunction[(K, V), (K, V)] {
+ def isDefinedAt(kv: (K, V)) = kpm.isDefinedAt(kv._1) && vpm.isDefinedAt(kv._2)
+ def apply(kv: (K, V)) = (kpm(kv._1), vpm(kv._2))
+ }
+
+ def flatMapFunctions = for {
+ (kfm, vfm) <- koperators.flatMapFunctions zip voperators.flatMapFunctions
+ } yield new Function1[(K, V), Traversable[(K, V)]] {
+ def apply(kv: (K, V)) = kfm(kv._1).toIterable zip vfm(kv._2).toIterable
+ }
+
+ def filterPredicates = zipPredicates(koperators.filterPredicates, voperators.filterPredicates)
+
+ def filterNotPredicates = filterPredicates
+
+ def partitionPredicates = filterPredicates
+
+ def takeWhilePredicates = zipPredicates(koperators.takeWhilePredicates, voperators.takeWhilePredicates)
+
+ def dropWhilePredicates = takeWhilePredicates
+
+ def spanPredicates = takeWhilePredicates
+
+ def foldArguments = for {
+ ((kinit, kop), (vinit, vop)) <- koperators.foldArguments zip voperators.foldArguments
+ } yield ((kinit, vinit), new Function2[(K, V), (K, V), (K, V)] {
+ def apply(kv1: (K, V), kv2: (K, V)) = (kop(kv1._1, kv2._1), vop(kv1._2, kv2._2))
+ })
+
+ def addAllTraversables = for {
+ (kt, vt) <- koperators.addAllTraversables zip voperators.addAllTraversables
+ } yield kt.toIterable zip vt.toIterable
+
+ def newArray(sz: Int) = new Array[(K, V)](sz)
+
+ def groupByFunctions = (koperators.groupByFunctions zip voperators.groupByFunctions) map {
+ opt => { (p: (K, V)) => (opt._1(p._1), opt._2(p._2)) }
+ }
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/files/scalacheck/parallel-collections/PairValues.scala b/test/files/scalacheck/parallel-collections/PairValues.scala
new file mode 100644
index 0000000000..5007c4598b
--- /dev/null
+++ b/test/files/scalacheck/parallel-collections/PairValues.scala
@@ -0,0 +1,28 @@
+package scala.collection.parallel.ops
+
+
+
+
+
+import org.scalacheck._
+import org.scalacheck.Gen
+import org.scalacheck.Gen._
+import org.scalacheck.Prop._
+import org.scalacheck.Properties
+import org.scalacheck.Arbitrary._
+
+
+
+
+trait PairValues[K, V] {
+ def kvalues: Seq[Gen[K]]
+ def vvalues: Seq[Gen[V]]
+
+ def values = for {
+ kg <- kvalues
+ vg <- vvalues
+ } yield for {
+ k <- kg
+ v <- vg
+ } yield (k, v)
+}
diff --git a/test/files/scalacheck/parallel-collections/ParallelArrayCheck.scala b/test/files/scalacheck/parallel-collections/ParallelArrayCheck.scala
new file mode 100644
index 0000000000..a01c8c7dbe
--- /dev/null
+++ b/test/files/scalacheck/parallel-collections/ParallelArrayCheck.scala
@@ -0,0 +1,69 @@
+package scala.collection.parallel
+package mutable
+
+
+
+import org.scalacheck._
+import org.scalacheck.Gen
+import org.scalacheck.Gen._
+import org.scalacheck.Prop._
+import org.scalacheck.Properties
+import org.scalacheck.Arbitrary._
+
+import scala.collection._
+import scala.collection.parallel.ops._
+
+
+abstract class ParallelArrayCheck[T](tp: String) extends ParallelSeqCheck[T]("ParArray[" + tp + "]") {
+ // ForkJoinTasks.defaultForkJoinPool.setMaximumPoolSize(Runtime.getRuntime.availableProcessors * 2)
+ // ForkJoinTasks.defaultForkJoinPool.setParallelism(Runtime.getRuntime.availableProcessors * 2)
+
+ type CollType = ParArray[T]
+
+ def isCheckingViews = false
+
+ def hasStrictOrder = true
+
+ def ofSize(vals: Seq[Gen[T]], sz: Int) = {
+ val a = new mutable.ArrayBuffer[T](sz)
+ val gen = vals(rnd.nextInt(vals.size))
+ for (i <- 0 until sz) a += sample(gen)
+ a
+ }
+
+ def fromSeq(a: Seq[T]) = {
+ val pa = new ParArray[T](a.size)
+ var i = 0
+ for (elem <- a.toList) {
+ pa(i) = elem
+ i += 1
+ }
+ pa
+ }
+
+ property("array mappings must be equal") = forAll(collectionPairs) { case (t, coll) =>
+ val results = for ((f, ind) <- mapFunctions.zipWithIndex)
+ yield ("op index: " + ind) |: t.map(f) == coll.map(f)
+ results.reduceLeft(_ && _)
+ }
+
+}
+
+
+object IntParallelArrayCheck extends ParallelArrayCheck[Int]("Int") with IntSeqOperators with IntValues {
+ override def instances(vals: Seq[Gen[Int]]) = oneOf(super.instances(vals), sized { sz =>
+ (0 until sz).toArray.toSeq
+ }, sized { sz =>
+ (-sz until 0).toArray.toSeq
+ })
+}
+
+
+
+
+
+
+
+
+
+
diff --git a/test/files/scalacheck/parallel-collections/ParallelArrayTest.scala b/test/files/scalacheck/parallel-collections/ParallelArrayTest.scala
new file mode 100644
index 0000000000..680f6e1d28
--- /dev/null
+++ b/test/files/scalacheck/parallel-collections/ParallelArrayTest.scala
@@ -0,0 +1,112 @@
+// package test.scala.collection.parallel.mutable
+
+// import org.scalatest.FunSuite
+// import collection.parallel.mutable.ParallelArray
+
+// /**
+// * Notes:
+// */
+// class ParallelArrayTest extends FunSuite {
+
+// test("create new parallel array with a bad initial capacity"){
+// intercept[IllegalArgumentException]{
+// new ParallelArray(-5)
+// }
+
+// /**
+// * this currently passes, but do we want it to?
+// * does it have meaning to have an empty parallel array?
+// */
+// new ParallelArray(0)
+// ()
+// }
+
+// test("compare identical ParallelArrays"){
+// assert(new ParallelArray(5) === new ParallelArray(5))
+// assert(ParallelArray(1,2,3,4,5) === ParallelArray(1,2,3,4,5))
+// }
+
+// /**
+// * this test needs attention. how is equality defined on ParallelArrays?
+// * Well, the same way it is for normal collections, I guess. For normal arrays its reference equality.
+// * I do not think it should be that way in the case of ParallelArray-s. I'll check this with Martin.
+// */
+// test("compare non-identical ParallelArrays"){
+// assert(ParallelArray(1,2,3,4,5) != ParallelArray(1,2,3,4),
+// "compared PA's that I expect to not be identical, but they were!")
+// }
+
+// test("creation via PA object [String]"){
+// val paFromApply: ParallelArray[String] = ParallelArray("x", "1", "true", "etrijwejiorwer")
+// val paFromHandoff: ParallelArray[String] = ParallelArray.handoff(Array("x", "1", "true", "etrijwejiorwer"))
+// val paFromCopy: ParallelArray[String] = ParallelArray.createFromCopy(Array("x", "1", "true", "etrijwejiorwer"))
+// assert( paFromApply === paFromCopy )
+// assert( paFromApply === paFromCopy )
+// }
+
+// // // handoffs dont work for primitive types...
+// // test("creation via PA object [Boolean]"){
+// // val paFromApply: ParallelArray[Boolean] = ParallelArray(true, false, true, false)
+// // val paFromCopy: ParallelArray[Boolean] = ParallelArray.createFromCopy(Array(true, false, true, false))
+// // assert( paFromApply === paFromCopy )
+// // }
+// //
+// // // handoffs dont work for primitive types...
+// // test("creation via PA object [Int]"){
+// // val paFromApply: ParallelArray[Int] = ParallelArray(1, 2, 4, 3)
+// // val paFromCopy: ParallelArray[Int] = ParallelArray.createFromCopy(Array(1, 2, 4, 3))
+// // assert( paFromApply === paFromCopy )
+// // }
+
+// /**
+// * This fails because handoff is really doing a copy.
+// * TODO: look at handoff
+// */
+// test("Handoff Is Really A Handoff"){
+// val arrayToHandOff = Array("a", "x", "y", "z")
+// val paFromHandoff: ParallelArray[String] = ParallelArray.handoff(arrayToHandOff)
+// arrayToHandOff(0) = "w"
+// assert(paFromHandoff(0) === "w")
+// }
+
+// test("simple reduce"){
+// assert( ParallelArray(1,2,3,4,5).reduce(_+_) === 15 )
+// }
+
+// test("simple count"){
+// assert( ParallelArray[Int]().count(_ > 7) === 0 )
+// assert( ParallelArray(1,2,3).count(_ > 7) === 0 )
+// assert( ParallelArray(1,2,3).count(_ <= 3) === 3 )
+// assert( ParallelArray(1,2,3,4,5,6,7,8,9,10).count(_ > 7 ) === 3 )
+// }
+
+// test("simple forall"){
+// assert( ParallelArray[Int]().forall(_ > 7) === true )
+// assert( ParallelArray(1,2,3).forall(_ > 3) === false )
+// assert( ParallelArray(1,2,3).forall(_ <= 3) === true )
+// assert( ParallelArray(1,2,3,4,5,6,7,8,9,10).forall(_ > 0) === true )
+// assert( ParallelArray(1,2,3,4,5,6,7,8,9,10).forall(_ < 5) === false )
+// }
+
+// /**
+// */
+// test("simple foreach"){
+// val buf = new java.util.concurrent.ArrayBlockingQueue[Int](10000)
+// ParallelArray((1 to 10000):_*).foreach(buf add _)
+// (1 to 10000).foreach(i => assert( buf contains i, "buf should have contained:" + i ))
+// }
+
+// test("simple exists"){
+// assert( ParallelArray[Int]().exists(_ => true) === false )
+// assert( ParallelArray(1,2,3).forall(_ > 3) === false )
+// assert( ParallelArray(1,2,3,4,5,6,7,8,9,10).exists(_ > 7) === true )
+// }
+
+// test("simple filter"){
+// assert(ParallelArray(1,2,3,4,5).filter( _ < 4 ) === ParallelArray(1,2,3))
+// }
+
+// test("simple map test"){
+// assert(ParallelArray(1,2,3,4,5).map( (_:Int) * 10 ) === ParallelArray(10,20,30,40,50))
+// }
+// }
diff --git a/test/files/scalacheck/parallel-collections/ParallelArrayViewCheck.scala b/test/files/scalacheck/parallel-collections/ParallelArrayViewCheck.scala
new file mode 100644
index 0000000000..d2a8fa7c22
--- /dev/null
+++ b/test/files/scalacheck/parallel-collections/ParallelArrayViewCheck.scala
@@ -0,0 +1,122 @@
+// package scala.collection.parallel
+// package mutable
+
+
+
+
+
+
+// import org.scalacheck._
+// import org.scalacheck.Gen
+// import org.scalacheck.Gen._
+// import org.scalacheck.Prop._
+// import org.scalacheck.Properties
+// import org.scalacheck.Arbitrary._
+
+// import scala.collection.TraversableView
+// import scala.collection.mutable.ArrayBuffer
+// import scala.collection.parallel.ops._
+// import scala.collection.mutable.ArraySeq
+
+
+
+// abstract class ParallelArrayViewCheck[T](tp: String)
+// extends ParallelSeqCheck[T]("ParallelSeqView[" + tp + ", ParallelArray[" + tp + "]]") {
+// // ForkJoinTasks.defaultForkJoinPool.setMaximumPoolSize(Runtime.getRuntime.availableProcessors * 2)
+// // ForkJoinTasks.defaultForkJoinPool.setParallelism(Runtime.getRuntime.availableProcessors * 2)
+
+// type CollType = ParallelSeqView[T, ParallelArray[T], ArraySeq[T]]
+
+// def isCheckingViews = true
+
+// def instances(vals: Seq[Gen[T]]): Gen[Seq[T]] = sized { sz =>
+// val a = new ArrayBuffer[T](sz)
+// val gen = vals(rnd.nextInt(vals.size))
+// for (i <- 0 until sz) a += sample(gen)
+// a
+// }
+
+// def fromSeq(a: Seq[T]) = {
+// val pa = new ParallelArray[T](a.size)
+// var i = 0
+// for (elem <- a) {
+// pa(i) = elem
+// i += 1
+// }
+// pa.view
+// }
+
+// property("forces must be equal") = forAll(collectionPairs) { case (s, coll) =>
+// val smodif = (s ++ s).reverse.take(s.length).reverse.zip(s).drop(s.length / 2)
+// val cmodif = (coll ++ s).reverse.take(s.length).reverse.zip(s).drop(s.length / 2).force
+// smodif == cmodif
+// }
+
+// }
+
+
+// object IntParallelArrayViewCheck extends ParallelArrayViewCheck[Int]("Int") with IntSeqOperators with IntValues {
+// override def instances(vals: Seq[Gen[Int]]) = oneOf(super.instances(vals), sized { sz =>
+// (0 until sz).toArray.toSeq
+// }, sized { sz =>
+// (-sz until 0).toArray.toSeq
+// })
+// }
+
+
+// abstract class ParallelArrayViewComposedCheck[T](tp: String)
+// extends ParallelSeqCheck[T]("ParallelSeqView[" + tp + "], ParallelArray[" + tp + "].++.patch.reverse.take.reverse") {
+// ForkJoinTasks.defaultForkJoinPool.setMaximumPoolSize(Runtime.getRuntime.availableProcessors * 2)
+// ForkJoinTasks.defaultForkJoinPool.setParallelism(Runtime.getRuntime.availableProcessors * 2)
+
+// type CollType = collection.parallel.ParallelSeq[T]
+
+// def isCheckingViews = true
+
+// def instances(vals: Seq[Gen[T]]): Gen[Seq[T]] = sized { sz =>
+// val a = new ArrayBuffer[T](sz)
+// val gen = vals(rnd.nextInt(vals.size))
+// for (i <- 0 until sz) a += sample(gen)
+// a
+// }
+
+// def fromSeq(a: Seq[T]) = {
+// val pa = new ParallelArray[T](a.size)
+// var i = 0
+// for (elem <- a) {
+// pa(i) = elem
+// i += 1
+// }
+// val modified = (pa.view ++ a).patch(0, a, a.length).reverse
+// val original = modified.take(modified.length / 2).reverse
+// original
+// }
+
+// }
+
+
+// object IntParallelArrayViewComposedCheck extends ParallelArrayViewComposedCheck[Int]("Int") with IntSeqOperators with IntValues {
+// override def instances(vals: Seq[Gen[Int]]) = oneOf(super.instances(vals), sized { sz =>
+// (0 until sz).toArray.toSeq
+// }, sized { sz =>
+// (-sz until 0).toArray.toSeq
+// })
+// }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/files/scalacheck/parallel-collections/ParallelHashMapCheck.scala b/test/files/scalacheck/parallel-collections/ParallelHashMapCheck.scala
new file mode 100644
index 0000000000..0152b1b435
--- /dev/null
+++ b/test/files/scalacheck/parallel-collections/ParallelHashMapCheck.scala
@@ -0,0 +1,97 @@
+package scala.collection.parallel
+package mutable
+
+
+
+import org.scalacheck._
+import org.scalacheck.Gen
+import org.scalacheck.Gen._
+import org.scalacheck.Prop._
+import org.scalacheck.Properties
+import org.scalacheck.Arbitrary._
+
+import scala.collection._
+import scala.collection.parallel.ops._
+
+
+abstract class ParallelHashMapCheck[K, V](tp: String) extends ParallelMapCheck[K, V]("mutable.ParHashMap[" + tp + "]") {
+ // ForkJoinTasks.defaultForkJoinPool.setMaximumPoolSize(Runtime.getRuntime.availableProcessors * 2)
+ // ForkJoinTasks.defaultForkJoinPool.setParallelism(Runtime.getRuntime.availableProcessors * 2)
+
+ type CollType = ParHashMap[K, V]
+
+ def isCheckingViews = false
+
+ def hasStrictOrder = false
+
+ def ofSize(vals: Seq[Gen[(K, V)]], sz: Int) = {
+ val hm = new mutable.HashMap[K, V]
+ val gen = vals(rnd.nextInt(vals.size))
+ for (i <- 0 until sz) hm += sample(gen)
+ hm
+ }
+
+ def fromTraversable(t: Traversable[(K, V)]) = {
+ val phm = new ParHashMap[K, V]
+ var i = 0
+ for (kv <- t.toList) {
+ phm += kv
+ i += 1
+ }
+ phm
+ }
+
+}
+
+
+object IntIntParallelHashMapCheck extends ParallelHashMapCheck[Int, Int]("Int, Int")
+with PairOperators[Int, Int]
+with PairValues[Int, Int]
+{
+ def intvalues = new IntValues {}
+ def kvalues = intvalues.values
+ def vvalues = intvalues.values
+
+ val intoperators = new IntOperators {}
+ def voperators = intoperators
+ def koperators = intoperators
+
+ override def printDataStructureDebugInfo(ds: AnyRef) = ds match {
+ case pm: ParHashMap[k, v] =>
+ println("Mutable parallel hash map\n" + pm.hashTableContents.debugInformation)
+ case _ =>
+ println("could not match data structure type: " + ds.getClass)
+ }
+
+ override def checkDataStructureInvariants(orig: Traversable[(Int, Int)], ds: AnyRef) = ds match {
+ // case pm: ParHashMap[k, v] if 1 == 0 => // disabled this to make tests faster
+ // val invs = pm.brokenInvariants
+
+ // val containsall = (for ((k, v) <- orig) yield {
+ // if (pm.asInstanceOf[ParHashMap[Int, Int]].get(k) == Some(v)) true
+ // else {
+ // println("Does not contain original element: " + (k, v))
+ // false
+ // }
+ // }).foldLeft(true)(_ && _)
+
+
+ // if (invs.isEmpty) containsall
+ // else {
+ // println("Invariants broken:\n" + invs.mkString("\n"))
+ // false
+ // }
+ case _ => true
+ }
+
+}
+
+
+
+
+
+
+
+
+
+
diff --git a/test/files/scalacheck/parallel-collections/ParallelHashSetCheck.scala b/test/files/scalacheck/parallel-collections/ParallelHashSetCheck.scala
new file mode 100644
index 0000000000..a0a6d1ae5e
--- /dev/null
+++ b/test/files/scalacheck/parallel-collections/ParallelHashSetCheck.scala
@@ -0,0 +1,94 @@
+package scala.collection.parallel
+package mutable
+
+
+
+import org.scalacheck._
+import org.scalacheck.Gen
+import org.scalacheck.Gen._
+import org.scalacheck.Prop._
+import org.scalacheck.Properties
+import org.scalacheck.Arbitrary._
+
+import scala.collection._
+import scala.collection.parallel.ops._
+
+
+abstract class ParallelHashSetCheck[T](tp: String) extends ParallelSetCheck[T]("mutable.ParHashSet[" + tp + "]") {
+ // ForkJoinTasks.defaultForkJoinPool.setMaximumPoolSize(Runtime.getRuntime.availableProcessors * 2)
+ // ForkJoinTasks.defaultForkJoinPool.setParallelism(Runtime.getRuntime.availableProcessors * 2)
+
+ type CollType = ParHashSet[T]
+
+ def isCheckingViews = false
+
+ def hasStrictOrder = false
+
+ def ofSize(vals: Seq[Gen[T]], sz: Int) = {
+ val hm = new mutable.HashSet[T]
+ val gen = vals(rnd.nextInt(vals.size))
+ for (i <- 0 until sz) hm += sample(gen)
+ hm
+ }
+
+ def fromTraversable(t: Traversable[T]) = {
+ val phm = new ParHashSet[T]
+ var i = 0
+ for (kv <- t.toList) {
+ phm += kv
+ i += 1
+ }
+ phm
+ }
+
+}
+
+
+object IntParallelHashSetCheck extends ParallelHashSetCheck[Int]("Int")
+with IntOperators
+with IntValues
+{
+ override def printDataStructureDebugInfo(ds: AnyRef) = ds match {
+ case pm: ParHashSet[t] =>
+ println("Mutable parallel hash set")
+ case _ =>
+ println("could not match data structure type: " + ds.getClass)
+ }
+
+ override def checkDataStructureInvariants(orig: Traversable[Int], ds: AnyRef) = ds match {
+ // case pm: ParHashSet[t] if 1 == 0 =>
+ // // for an example of how not to write code proceed below
+ // val invs = pm.brokenInvariants
+
+ // val containsall = (for (elem <- orig) yield {
+ // if (pm.asInstanceOf[ParHashSet[Int]](elem) == true) true
+ // else {
+ // println("Does not contain original element: " + elem)
+ // println(pm.hashTableContents.table.find(_ == elem))
+ // println(pm.hashTableContents.table.indexOf(elem))
+ // false
+ // }
+ // }).foldLeft(true)(_ && _)
+
+
+ // if (invs.isEmpty) {
+ // if (!containsall) println(pm.debugInformation)
+ // containsall
+ // } else {
+ // println("Invariants broken:\n" + invs.mkString("\n"))
+ // false
+ // }
+ case _ => true
+ }
+
+}
+
+
+
+
+
+
+
+
+
+
diff --git a/test/files/scalacheck/parallel-collections/ParallelHashTrieCheck.scala b/test/files/scalacheck/parallel-collections/ParallelHashTrieCheck.scala
new file mode 100644
index 0000000000..3a2893f48a
--- /dev/null
+++ b/test/files/scalacheck/parallel-collections/ParallelHashTrieCheck.scala
@@ -0,0 +1,138 @@
+package scala.collection.parallel
+package immutable
+
+
+
+import org.scalacheck._
+import org.scalacheck.Gen
+import org.scalacheck.Gen._
+import org.scalacheck.Prop._
+import org.scalacheck.Properties
+import org.scalacheck.Arbitrary._
+
+import scala.collection._
+import scala.collection.parallel.ops._
+
+
+abstract class ParallelHashMapCheck[K, V](tp: String) extends ParallelMapCheck[K, V]("immutable.ParHashMap[" + tp + "]") {
+ // ForkJoinTasks.defaultForkJoinPool.setMaximumPoolSize(Runtime.getRuntime.availableProcessors * 2)
+ // ForkJoinTasks.defaultForkJoinPool.setParallelism(Runtime.getRuntime.availableProcessors * 2)
+
+ type CollType = ParHashMap[K, V]
+
+ def isCheckingViews = false
+
+ def hasStrictOrder = false
+
+ def ofSize(vals: Seq[Gen[(K, V)]], sz: Int) = {
+ var hm = new immutable.HashMap[K, V]
+ val gen = vals(rnd.nextInt(vals.size))
+ for (i <- 0 until sz) hm += sample(gen)
+ hm
+ }
+
+ def fromTraversable(t: Traversable[(K, V)]) = {
+ var phm = new ParHashMap[K, V]
+ var i = 0
+ for (kv <- t.toList) {
+ phm += kv
+ i += 1
+ }
+ phm
+ }
+
+}
+
+
+object IntIntParallelHashMapCheck extends ParallelHashMapCheck[Int, Int]("Int, Int")
+with PairOperators[Int, Int]
+with PairValues[Int, Int]
+{
+ def intvalues = new IntValues {}
+ def kvalues = intvalues.values
+ def vvalues = intvalues.values
+
+ val intoperators = new IntOperators {}
+ def voperators = intoperators
+ def koperators = intoperators
+
+ override def printDataStructureDebugInfo(ds: AnyRef) = ds match {
+ case pm: ParHashMap[k, v] =>
+ pm.printDebugInfo
+ case _ =>
+ println("could not match data structure type: " + ds.getClass)
+ }
+}
+
+
+
+abstract class ParallelHashSetCheck[T](tp: String) extends ParallelSetCheck[T]("immutable.ParHashSet[" + tp + "]") {
+ // ForkJoinTasks.defaultForkJoinPool.setMaximumPoolSize(Runtime.getRuntime.availableProcessors * 2)
+ // ForkJoinTasks.defaultForkJoinPool.setParallelism(Runtime.getRuntime.availableProcessors * 2)
+
+ type CollType = ParHashSet[T]
+
+ def isCheckingViews = false
+
+ def hasStrictOrder = false
+
+ def ofSize(vals: Seq[Gen[T]], sz: Int) = {
+ var hm = new immutable.HashSet[T]
+ val gen = vals(rnd.nextInt(vals.size))
+ for (i <- 0 until sz) hm += sample(gen)
+ hm
+ }
+
+ def fromTraversable(t: Traversable[T]) = {
+ var phm = new ParHashSet[T]
+ var i = 0
+ for (kv <- t.toList) {
+ phm += kv
+ i += 1
+ }
+ phm
+ }
+
+ override def printDataStructureDebugInfo(ds: AnyRef) = ds match {
+ case pm: ParHashSet[t] =>
+ println("Parallel hash set")
+ case _ =>
+ println("could not match data structure type: " + ds.getClass)
+ }
+
+}
+
+
+object IntParallelHashSetCheck extends ParallelHashSetCheck[Int]("Int")
+with IntOperators
+with IntValues
+{
+ def intvalues = new IntValues {}
+ def kvalues = intvalues.values
+ def vvalues = intvalues.values
+
+ override def printDataStructureDebugInfo(ds: AnyRef) = ds match {
+ case pm: ParHashMap[k, v] =>
+ pm.printDebugInfo
+ case _ =>
+ println("could not match data structure type: " + ds.getClass)
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/files/scalacheck/parallel-collections/ParallelIterableCheck.scala b/test/files/scalacheck/parallel-collections/ParallelIterableCheck.scala
new file mode 100644
index 0000000000..fbacb9f45c
--- /dev/null
+++ b/test/files/scalacheck/parallel-collections/ParallelIterableCheck.scala
@@ -0,0 +1,472 @@
+package scala.collection.parallel
+
+
+
+import org.scalacheck._
+import org.scalacheck.Gen
+import org.scalacheck.Gen._
+import org.scalacheck.Prop._
+import org.scalacheck.Properties
+
+import scala.collection._
+import scala.collection.parallel._
+
+
+
+
+abstract class ParallelIterableCheck[T](collName: String) extends Properties(collName) with Operators[T] {
+ type CollType <: ParIterable[T]
+
+ def values: Seq[Gen[T]]
+ def ofSize(vals: Seq[Gen[T]], sz: Int): Iterable[T]
+ def fromTraversable(t: Traversable[T]): CollType
+ def isCheckingViews: Boolean
+ def hasStrictOrder: Boolean
+
+
+ def instances(vals: Seq[Gen[T]]): Gen[Iterable[T]] = oneOf(
+ sized(
+ sz =>
+ ofSize(vals, sz)
+ ),
+ for (sz <- choose(1000, 2000)) yield ofSize(vals, sz),
+ for (sz <- choose(4000, 4001)) yield ofSize(vals, sz),
+ for (sz <- choose(10000, 10001)) yield ofSize(vals, sz)
+ )
+
+ // used to check if constructed collection is valid
+ def checkDataStructureInvariants(orig: Traversable[T], cf: AnyRef) = {
+ // can be overriden in subclasses
+ true
+ }
+
+ def printDataStructureDebugInfo(cf: AnyRef) {
+ // can be overridden in subclasses
+ }
+
+ val rnd = new scala.util.Random
+
+ def sample(gen: Gen[T]): T = {
+ var s = gen.sample
+ while (s == None) s = gen.sample
+ s.get
+ }
+
+ def sampleValue: T = sample(values(rnd.nextInt(values.length)))
+
+ def collectionPairs = for (inst <- instances(values)) yield (inst, fromTraversable(inst))
+
+ def collectionPairsWithLengths = for (inst <- instances(values); s <- choose(0, inst.size))
+ yield (inst, fromTraversable(inst), s)
+
+ def collectionPairsWith2Indices = for (
+ inst <- instances(values);
+ f <- choose(0, inst.size);
+ s <- choose(0, inst.size))
+ yield (inst, fromTraversable(inst), f, s)
+
+ def collectionTriplets = for (inst <- instances(values);
+ updStart <- choose(0, inst.size); howMany <- choose(0, inst.size)) yield {
+ val modif = inst.toSeq.patch(updStart, inst.toSeq, howMany)
+ (inst, fromTraversable(inst), modif)
+ }
+
+ def areEqual(t1: GenTraversable[T], t2: GenTraversable[T]) = if (hasStrictOrder) {
+ t1 == t2 && t2 == t1
+ } else (t1, t2) match { // it is slightly delicate what `equal` means if the order is not strict
+ case (m1: GenMap[_, _], m2: GenMap[_, _]) => m1 == m2 && m2 == m1
+ case (i1: GenIterable[_], i2: GenIterable[_]) =>
+ val i1s = i1.toSet
+ val i2s = i2.toSet
+ i1s == i2s && i2s == i1s
+ case _ => t1 == t2 && t2 == t1
+ }
+
+ def printDebugInfo(coll: ParIterableLike[_, _, _]) {
+ println("Collection debug info: ")
+ coll.printDebugBuffer
+ println("Task debug info: ")
+ println(tasksupport.debugMessages.mkString("\n"))
+ }
+
+ def printComparison(t: Traversable[_], coll: ParIterable[_], tf: Traversable[_], cf: ParIterable[_], ind: Int) {
+ printDebugInfo(coll)
+ println("Operator: " + ind)
+ println("sz: " + t.size)
+ println(t)
+ println
+ println("sz: " + coll.size)
+ println(coll)
+ println("transformed to:")
+ println
+ println("size: " + tf.size)
+ println(tf)
+ println
+ println("size: " + cf.size)
+ println(cf)
+ println
+ println("tf == cf - " + (tf == cf))
+ println("cf == tf - " + (cf == tf))
+ }
+
+ property("reductions must be equal for assoc. operators") = forAll(collectionPairs) { case (t, coll) =>
+ if (t.size != 0) {
+ val results = for ((op, ind) <- reduceOperators.zipWithIndex) yield {
+ val tr = t.reduceLeft(op)
+ val cr = coll.reduce(op)
+ if (tr != cr) {
+ println("from: " + t)
+ println("and: " + coll)
+ println("reducing with " + ind)
+ println(tr)
+ println(cr)
+ }
+ ("op index: " + ind) |: tr == cr
+ }
+ results.reduceLeft(_ && _)
+ } else "has size 0" |: true
+ }
+
+ property("counts must be equal") = forAll(collectionPairs) { case (t, coll) =>
+ val results = for ((pred, ind) <- countPredicates.zipWithIndex) yield {
+ val tc = t.count(pred)
+ val cc = coll.count(pred)
+ if (tc != cc) {
+ println("from: " + t + " - size: " + t.size)
+ println("and: " + coll + " - size: " + coll.toList.size)
+ println(tc)
+ println(cc)
+ printDebugInfo(coll)
+ }
+ ("op index: " + ind) |: tc == cc
+ }
+ results.reduceLeft(_ && _)
+ }
+
+ property("forall must be equal") = forAll(collectionPairs) { case (t, coll) =>
+ val results = for ((pred, ind) <- forallPredicates.zipWithIndex)
+ yield ("op index: " + ind) |: t.forall(pred) == coll.forall(pred)
+ results.reduceLeft(_ && _)
+ }
+
+ property("exists must be equal") = forAll(collectionPairs) { case (t, coll) =>
+ val results = for ((pred, ind) <- existsPredicates.zipWithIndex)
+ yield ("op index: " + ind) |: t.exists(pred) == coll.exists(pred)
+ results.reduceLeft(_ && _)
+ }
+
+ property("both must find or not find an element") = forAll(collectionPairs) { case (t, coll) =>
+ val results = for ((pred, ind) <- findPredicates.zipWithIndex) yield {
+ val ft = t.find(pred)
+ val fcoll = coll.find(pred)
+ ("op index: " + ind) |: ((ft == None && fcoll == None) || (ft != None && fcoll != None))
+ }
+ results.reduceLeft(_ && _)
+ }
+
+ property("mappings must be equal") = forAll(collectionPairs) { case (t, coll) =>
+ val results = for ((f, ind) <- mapFunctions.zipWithIndex) yield {
+ val ms = t.map(f)
+ val mp = coll.map(f)
+ val invs = checkDataStructureInvariants(ms, mp)
+ if (!areEqual(ms, mp) || !invs) {
+ println(t)
+ println(coll)
+ println("mapped to: ")
+ println(ms)
+ println(mp)
+ println("sizes: ")
+ println(ms.size)
+ println(mp.size)
+ println("valid: " + invs)
+ }
+ ("op index: " + ind) |: (areEqual(ms, mp) && invs)
+ }
+ results.reduceLeft(_ && _)
+ }
+
+ property("collects must be equal") = forAll(collectionPairs) { case (t, coll) =>
+ val results = for ((f, ind) <- partialMapFunctions.zipWithIndex) yield {
+ val ps = t.collect(f)
+ val pp = coll.collect(f)
+ if (!areEqual(ps, pp)) {
+ println(t)
+ println(coll)
+ println("collected to: ")
+ println(ps)
+ println(pp)
+ }
+ ("op index: " + ind) |: areEqual(ps, pp)
+ }
+ results.reduceLeft(_ && _)
+ }
+
+ property("flatMaps must be equal") = forAll(collectionPairs) { case (t, coll) =>
+ (for ((f, ind) <- flatMapFunctions.zipWithIndex)
+ yield ("op index: " + ind) |: areEqual(t.flatMap(f), coll.flatMap(f))).reduceLeft(_ && _)
+ }
+
+ property("filters must be equal") = forAll(collectionPairs) { case (t, coll) =>
+ (for ((p, ind) <- filterPredicates.zipWithIndex) yield {
+ val tf = t.filter(p)
+ val cf = coll.filter(p)
+ val invs = checkDataStructureInvariants(tf, cf)
+ if (tf != cf || cf != tf || !invs) {
+ printDebugInfo(coll)
+ println("Operator: " + ind)
+ println("sz: " + t.size)
+ println(t)
+ println
+ println("sz: " + coll.size)
+ println(coll)
+ println
+ println("filtered to:")
+ println
+ println(cf)
+ println
+ println(tf)
+ println
+ println("tf == cf - " + (tf == cf))
+ println("cf == tf - " + (cf == tf))
+ printDataStructureDebugInfo(cf)
+ println("valid: " + invs)
+ }
+ ("op index: " + ind) |: tf == cf && cf == tf && invs
+ }).reduceLeft(_ && _)
+ }
+
+ property("filterNots must be equal") = forAll(collectionPairs) { case (t, coll) =>
+ (for ((p, ind) <- filterNotPredicates.zipWithIndex) yield {
+ val tf = t.filterNot(p)
+ val cf = coll.filterNot(p)
+ if (tf != cf || cf != tf) printComparison(t, coll, tf, cf, ind)
+ ("op index: " + ind) |: tf == cf && cf == tf
+ }).reduceLeft(_ && _)
+ }
+
+ if (!isCheckingViews) property("partitions must be equal") = forAll(collectionPairs) { case (t, coll) =>
+ (for ((p, ind) <- partitionPredicates.zipWithIndex) yield {
+ val tpart = t.partition(p)
+ val cpart = coll.partition(p)
+ if (tpart != cpart) {
+ println("from: " + t)
+ println("and: " + coll)
+ println(cpart)
+ println(tpart)
+ }
+ ("op index: " + ind) |: tpart == cpart
+ }).reduceLeft(_ && _)
+ }
+
+ if (hasStrictOrder) property("takes must be equal") = forAll(collectionPairsWithLengths) { case (t, coll, n) =>
+ ("take " + n + " elements") |: t.take(n) == coll.take(n)
+ }
+
+ if (hasStrictOrder) property("drops must be equal") = forAll(collectionPairsWithLengths) { case (t, coll, n) =>
+ ("drop " + n + " elements") |: t.drop(n) == coll.drop(n)
+ }
+
+ if (hasStrictOrder) property("slices must be equal") = forAll(collectionPairsWith2Indices)
+ { case (t, coll, fr, slicelength) =>
+ val from = if (fr < 0) 0 else fr
+ val until = if (from + slicelength > t.size) t.size else from + slicelength
+ val tsl = t.slice(from, until)
+ val collsl = coll.slice(from, until)
+ if (tsl != collsl) {
+ println("---------------------- " + from + ", " + until)
+ println("from: " + t)
+ println("and: " + coll)
+ println(tsl)
+ println(collsl)
+ println("as list: " + collsl.toList)
+ println(collsl.iterator.hasNext)
+ println(collsl.iterator.next)
+ println(collsl.iterator.hasNext)
+ println(collsl.iterator.next)
+ println(collsl.iterator.hasNext)
+ println(collsl.iterator.next)
+ println(collsl.iterator.hasNext)
+ }
+ ("slice from " + from + " until " + until) |: tsl == collsl
+ }
+
+ if (hasStrictOrder) property("splits must be equal") = forAll(collectionPairsWithLengths) { case (t, coll, n) =>
+ val tspl = t.splitAt(n)
+ val cspl = coll.splitAt(n)
+ if (tspl != cspl) {
+ println("at: " + n)
+ println("from: " + t)
+ println("and: " + coll)
+ println(tspl)
+ println(cspl)
+ }
+ ("splitAt " + n) |: tspl == cspl
+ }
+
+ if (hasStrictOrder) property("takeWhiles must be equal") = forAll(collectionPairs) { case (t, coll) =>
+ (for ((pred, ind) <- takeWhilePredicates.zipWithIndex) yield {
+ val tt = t.takeWhile(pred)
+ val ct = coll.takeWhile(pred)
+ if (tt != ct) {
+ println("from: " + t)
+ println("and: " + coll)
+ println("taking while...")
+ println(tt)
+ println(ct)
+ }
+ ("operator " + ind) |: tt == ct
+ }).reduceLeft(_ && _)
+ }
+
+ if (hasStrictOrder) property("spans must be equal") = forAll(collectionPairs) { case (t, coll) =>
+ (for ((pred, ind) <- spanPredicates.zipWithIndex) yield {
+ val tsp = t.span(pred)
+ val csp = coll.span(pred)
+ if (tsp != csp) {
+ println("from: " + t)
+ println("and: " + coll)
+ println("span with predicate " + ind)
+ println(tsp)
+ println(csp)
+ println("---------------------------------")
+ println(coll.span(pred))
+ println("---------------------------------")
+ }
+ ("operator " + ind) |: tsp == csp
+ }).reduceLeft(_ && _)
+ }
+
+ if (hasStrictOrder) property("dropWhiles must be equal") = forAll(collectionPairs) { case (t, coll) =>
+ (for ((pred, ind) <- dropWhilePredicates.zipWithIndex) yield {
+ ("operator " + ind) |: t.dropWhile(pred) == coll.dropWhile(pred)
+ }).reduceLeft(_ && _)
+ }
+
+ property("folds must be equal for assoc. operators") = forAll(collectionPairs) { case (t, coll) =>
+ (for (((first, op), ind) <- foldArguments.zipWithIndex) yield {
+ val tres = t.foldLeft(first)(op)
+ val cres = coll.fold(first)(op)
+ if (cres != tres) {
+ println("from: " + t)
+ println("and: " + coll)
+ println("folds are: ")
+ println(tres)
+ println(cres)
+ }
+ ("operator " + ind) |: tres == cres
+ }).reduceLeft(_ && _)
+ }
+
+ property("++s must be equal") = forAll(collectionTriplets) { case (t, coll, colltoadd) =>
+ val toadd = colltoadd
+ val tr = t ++ toadd.iterator
+ val cr = coll ++ toadd.iterator
+ if (!areEqual(tr, cr)) {
+ println("from: " + t)
+ println("and: " + coll.iterator.toList)
+ println("adding: " + toadd)
+ println(tr.toList)
+ println(cr.iterator.toList)
+ }
+ ("adding " |: areEqual(tr, cr)) &&
+ (for ((trav, ind) <- (addAllTraversables).zipWithIndex) yield {
+ val tadded = t ++ trav
+ val cadded = coll ++ collection.parallel.mutable.ParArray(trav.toSeq: _*)
+ if (!areEqual(tadded, cadded)) {
+ println("----------------------")
+ println("from: " + t)
+ println("and: " + coll)
+ println("adding: " + trav)
+ println(tadded)
+ println(cadded)
+ }
+ ("traversable " + ind) |: areEqual(tadded, cadded)
+ }).reduceLeft(_ && _)
+ }
+
+ if (hasStrictOrder) property("copies to array must be equal") = forAll(collectionPairs) { case (t, coll) =>
+ val tarr = newArray(t.size)
+ val collarr = newArray(coll.size)
+ t.copyToArray(tarr, 0, t.size)
+ coll.copyToArray(collarr, 0, coll.size)
+ if (tarr.toSeq != collarr.toSeq) {
+ println("from: " + t)
+ println("and: " + coll)
+ println(tarr.toSeq)
+ println(collarr.toSeq)
+ }
+ tarr.toSeq == collarr.toSeq
+ }
+
+ if (hasStrictOrder) property("scans must be equal") = forAll(collectionPairs) {
+ case (t, coll) =>
+ (for (((first, op), ind) <- foldArguments.zipWithIndex) yield {
+ val tscan = t.scanLeft(first)(op)
+ val cscan = coll.scan(first)(op)
+ if (tscan != cscan || cscan != tscan) {
+ println("from: " + t)
+ println("and: " + coll)
+ println("scans are: ")
+ println(tscan)
+ println(cscan)
+ }
+ ("operator " + ind) |: tscan == cscan && cscan == tscan
+ }).reduceLeft(_ && _)
+ }
+
+ // property("groupBy must be equal") = forAll(collectionPairs) {
+ // case (t, coll) =>
+ // (for ((f, ind) <- groupByFunctions.zipWithIndex) yield {
+ // val tgroup = t.groupBy(f)
+ // val cgroup = coll.groupBy(f)
+ // if (tgroup != cgroup || cgroup != tgroup) {
+ // println("from: " + t)
+ // println("and: " + coll)
+ // println("groups are: ")
+ // println(tgroup)
+ // println(cgroup)
+ // }
+ // ("operator " + ind) |: tgroup == cgroup && cgroup == tgroup
+ // }).reduceLeft(_ && _)
+ // }
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/files/scalacheck/parallel-collections/ParallelMapCheck1.scala b/test/files/scalacheck/parallel-collections/ParallelMapCheck1.scala
new file mode 100644
index 0000000000..05237bace8
--- /dev/null
+++ b/test/files/scalacheck/parallel-collections/ParallelMapCheck1.scala
@@ -0,0 +1,67 @@
+package scala.collection.parallel
+
+
+
+import org.scalacheck._
+import org.scalacheck.Gen
+import org.scalacheck.Gen._
+import org.scalacheck.Prop._
+import org.scalacheck.Properties
+
+import scala.collection._
+import scala.collection.parallel._
+
+
+
+
+abstract class ParallelMapCheck[K, V](collname: String) extends ParallelIterableCheck[(K, V)](collname) {
+ type CollType <: ParMap[K, V]
+
+ property("gets iterated keys") = forAll(collectionPairs) {
+ case (t, coll) =>
+ val containsT = for ((k, v) <- t) yield (coll.get(k) == Some(v))
+ val containsSelf = for ((k, v) <- coll) yield (coll.get(k) == Some(v))
+ ("Par contains elements of seq map" |: containsT.forall(_ == true)) &&
+ ("Par contains elements of itself" |: containsSelf.forall(_ == true))
+ }
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/files/scalacheck/parallel-collections/ParallelRangeCheck.scala b/test/files/scalacheck/parallel-collections/ParallelRangeCheck.scala
new file mode 100644
index 0000000000..3c6a35d8f1
--- /dev/null
+++ b/test/files/scalacheck/parallel-collections/ParallelRangeCheck.scala
@@ -0,0 +1,71 @@
+package scala.collection.parallel
+package immutable
+
+
+
+
+import org.scalacheck._
+import org.scalacheck.Gen
+import org.scalacheck.Gen._
+import org.scalacheck.Prop._
+import org.scalacheck.Properties
+import org.scalacheck.Arbitrary._
+
+import scala.collection._
+import scala.collection.parallel.ops._
+
+
+
+
+object ParallelRangeCheck extends ParallelSeqCheck[Int]("ParallelRange[Int]") with ops.IntSeqOperators {
+ // ForkJoinTasks.defaultForkJoinPool.setMaximumPoolSize(Runtime.getRuntime.availableProcessors * 2)
+ // ForkJoinTasks.defaultForkJoinPool.setParallelism(Runtime.getRuntime.availableProcessors * 2)
+
+ type CollType = collection.parallel.ParSeq[Int]
+
+ def hasStrictOrder = true
+
+ def isCheckingViews = false
+
+ def ofSize(vals: Seq[Gen[Int]], sz: Int) = unsupported
+
+ override def instances(vals: Seq[Gen[Int]]): Gen[Seq[Int]] = sized { start =>
+ sized { end =>
+ sized { step =>
+ new Range(start, end, if (step != 0) step else 1)
+ }
+ }
+ }
+
+ def fromSeq(a: Seq[Int]) = a match {
+ case r: Range => ParRange(r.start, r.end, r.step, false)
+ case _ =>
+ val pa = new parallel.mutable.ParArray[Int](a.length)
+ for (i <- 0 until a.length) pa(i) = a(i)
+ pa
+ }
+
+ override def traversable2Seq(t: Traversable[Int]): Seq[Int] = t match {
+ case r: Range => r
+ case _ => t.toSeq
+ }
+
+ def values = Seq(choose(-100, 100))
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/files/scalacheck/parallel-collections/ParallelSeqCheck.scala b/test/files/scalacheck/parallel-collections/ParallelSeqCheck.scala
new file mode 100644
index 0000000000..dd897412ae
--- /dev/null
+++ b/test/files/scalacheck/parallel-collections/ParallelSeqCheck.scala
@@ -0,0 +1,299 @@
+package scala.collection.parallel
+
+
+
+import org.scalacheck._
+import org.scalacheck.Gen
+import org.scalacheck.Gen._
+import org.scalacheck.Prop._
+import org.scalacheck.Properties
+
+import scala.collection._
+import scala.collection.parallel._
+
+
+
+
+
+abstract class ParallelSeqCheck[T](collName: String) extends ParallelIterableCheck[T](collName) with SeqOperators[T] {
+
+ type CollType <: collection.parallel.ParSeq[T]
+
+
+ def ofSize(vals: Seq[Gen[T]], sz: Int): Seq[T]
+ def fromSeq(s: Seq[T]): CollType
+
+ override def instances(vals: Seq[Gen[T]]): Gen[Seq[T]] = oneOf(
+ sized(
+ sz =>
+ ofSize(vals, sz)
+ ),
+ for (sz <- choose(1000, 2000)) yield ofSize(vals, sz)
+ )
+
+
+ def fromTraversable(t: Traversable[T]) = fromSeq(traversable2Seq(t))
+ def traversable2Seq(t: Traversable[T]): Seq[T] = {
+ if (t.isInstanceOf[Iterable[_]]) t.asInstanceOf[Iterable[T]].iterator.toList else t.toList
+ }
+
+ override def collectionPairs: Gen[(Seq[T], CollType)] = for (inst <- instances(values)) yield (inst, fromSeq(inst))
+
+ override def collectionPairsWithLengths: Gen[(Seq[T], CollType, Int)] =
+ for (inst <- instances(values); s <- choose(0, inst.size)) yield (inst, fromSeq(inst), s);
+
+ def collectionPairsWithModifiedWithLengths: Gen[(Seq[T], CollType, ParSeq[T], Int)] =
+ for (inst <- instances(values); s <- choose(0, inst.size);
+ updateStart <- choose(0, inst.size); howMany <- choose(0, inst.size)) yield {
+ val parcoll = fromSeq(inst)
+ val parcollmodif = fromSeq(modifySlightly(inst, updateStart, howMany))
+ (inst, parcoll, parcollmodif, s)
+ }
+
+ def collectionPairsWithModified: Gen[(Seq[T], CollType, ParSeq[T])] =
+ for (inst <- instances(values); updateStart <- choose(0, inst.size); howMany <- choose(0, inst.size)) yield {
+ val parcoll = fromSeq(inst)
+ val parcollmodif = fromSeq(modifySlightly(inst, updateStart, howMany))
+ (inst, parcoll, parcollmodif)
+ }
+
+ def collectionPairsWithSliced: Gen[(Seq[T], CollType, ParSeq[T])] =
+ for (inst <- instances(values); sliceStart <- choose(0, inst.size); howMany <- choose(0, inst.size)) yield {
+ val parcoll = fromSeq(inst)
+ val parcollsliced = fromSeq(inst.slice(sliceStart, sliceStart + howMany))
+ (inst, parcoll, parcollsliced)
+ }
+
+ def collectionTripletsWith2Indices: Gen[(Seq[T], CollType, Seq[T], Int, Int)] =
+ for (inst <- instances(values); f <- choose(0, inst.size); s <- choose(0, inst.size - f);
+ third <- instances(values); sliceStart <- choose(0, inst.size); howMany <- choose(0, inst.size)) yield {
+ (inst, fromSeq(inst), inst.slice(sliceStart, sliceStart + howMany), f, s)
+ }
+
+ private def modifySlightly(coll: Seq[T], updateStart: Int, howMany: Int) = {
+ coll.patch(updateStart, coll, howMany)
+ }
+
+ property("segmentLengths must be equal") = forAll(collectionPairsWithLengths) { case (s, coll, len) =>
+ (for ((pred, ind) <- segmentLengthPredicates.zipWithIndex) yield {
+ val slen = s.segmentLength(pred, if (len < 0) 0 else len)
+ val clen = coll.segmentLength(pred, len)
+ if (slen != clen) {
+ println("from: " + s)
+ println("and: " + coll)
+ println(slen)
+ println(clen)
+ }
+ ("operator " + ind) |: slen == clen
+ }).reduceLeft(_ && _)
+ }
+
+ property("prefixLengths must be equal") = forAll(collectionPairs) { case (s, coll) =>
+ (for ((pred, ind) <- segmentLengthPredicates.zipWithIndex) yield {
+ ("operator " + ind) |: s.prefixLength(pred) == coll.prefixLength(pred)
+ }).reduceLeft(_ && _)
+ }
+
+ property("indexWheres must be equal") = forAll(collectionPairsWithLengths) { case (s, coll, len) =>
+ (for ((pred, ind) <- indexWherePredicates.zipWithIndex) yield {
+ val sind = s.indexWhere(pred, len)
+ val cind = coll.indexWhere(pred, len)
+ if (sind != cind) {
+ println("from: " + s)
+ println("and: " + coll)
+ println("at: " + len)
+ println(sind)
+ println(cind)
+ }
+ ("operator " + ind) |: sind == cind
+ }).reduceLeft(_ && _)
+ }
+
+ property("lastIndexWheres must be equal") = forAll(collectionPairsWithLengths) { case (s, coll, len) =>
+ (for ((pred, ind) <- lastIndexWherePredicates.zipWithIndex) yield {
+ val end = if (len >= s.size) s.size - 1 else len
+ val sind = s.lastIndexWhere(pred, end)
+ val cind = coll.lastIndexWhere(pred, end)
+ ("operator " + ind) |: sind == cind
+ }).reduceLeft(_ && _)
+ }
+
+ property("reverses must be equal") = forAll(collectionPairs) { case (s, coll) =>
+ (s.length == 0 && s.getClass == classOf[collection.immutable.Range]) ||
+ {
+ val sr = s.reverse
+ val cr = coll.reverse
+ if (sr != cr) {
+ println("from: " + s)
+ println("and: " + coll)
+ println(sr)
+ println(cr)
+ }
+ sr == cr
+ }
+ }
+
+ property("reverseMaps must be equal") = forAll(collectionPairs) { case (s, coll) =>
+ (for ((f, ind) <- reverseMapFunctions.zipWithIndex) yield {
+ ("operator " + ind) |: s.reverseMap(f) == coll.reverseMap(f)
+ }).reduceLeft(_ && _)
+ }
+
+ property("sameElements must be equal") = forAll(collectionPairsWithModifiedWithLengths) {
+ case (s, coll, collmodif, len) =>
+ val pos = if (len < 0) 0 else len
+ val scm = s.sameElements(collmodif)
+ val ccm = coll.sameElements(collmodif)
+ if (scm != ccm) {
+ println("Comparing: " + s)
+ println("and: " + coll)
+ println("with: " + collmodif)
+ println(scm)
+ println(ccm)
+ }
+ ("Nil" |: s.sameElements(Nil) == coll.sameElements(Nil)) &&
+ ("toList" |: s.sameElements(s.toList) == coll.sameElements(coll.toList)) &&
+ ("identity" |: s.sameElements(s.map(e => e)) == coll.sameElements(coll.map(e => e))) &&
+ ("vice-versa" |: s.sameElements(coll) == coll.sameElements(s)) &&
+ ("equal" |: s.sameElements(coll)) &&
+ ("modified" |: scm == ccm) &&
+ (for ((it, ind) <- sameElementsSeqs.zipWithIndex) yield {
+ val sres = s.sameElements(it)
+ val pres = coll.sameElements(it)
+ if (sres != pres) {
+ println("Comparing: " + s)
+ println("and: " + coll)
+ println("with: " + it)
+ println(sres)
+ println(pres)
+ }
+ ("collection " + ind) |: sres == pres
+ }).reduceLeft(_ && _)
+ }
+
+ property("startsWiths must be equal") = forAll(collectionPairsWithModifiedWithLengths) {
+ case (s, coll, collmodif, len) =>
+ val pos = if (len < 0) 0 else len
+ ("start with self" |: s.startsWith(s) == coll.startsWith(coll)) &&
+ ("tails correspond" |: (s.length == 0 || s.startsWith(s.tail, 1) == coll.startsWith(coll.tail, 1))) &&
+ ("with each other" |: coll.startsWith(s)) &&
+ ("modified" |: s.startsWith(collmodif) == coll.startsWith(collmodif)) &&
+ ("modified2" |: s.startsWith(collmodif, pos) == coll.startsWith(collmodif, pos)) &&
+ (for (sq <- startEndSeqs) yield {
+ val ss = s.startsWith(sq, pos)
+ val cs = coll.startsWith(fromSeq(sq), pos)
+ if (ss != cs) {
+ println("from: " + s)
+ println("and: " + coll)
+ println("test seq: " + sq)
+ println("from pos: " + pos)
+ println(ss)
+ println(cs)
+ println(coll.iterator.psplit(pos, coll.length - pos)(1).toList)
+ }
+ ("seq " + sq) |: ss == cs
+ }).reduceLeft(_ && _)
+ }
+
+ property("endsWiths must be equal") = forAll(collectionPairsWithModified) {
+ case (s, coll, collmodif) =>
+ ("ends with self" |: s.endsWith(s) == coll.endsWith(s)) &&
+ ("ends with tail" |: (s.length == 0 || s.endsWith(s.tail) == coll.endsWith(coll.tail))) &&
+ ("with each other" |: coll.endsWith(s)) &&
+ ("modified" |: s.startsWith(collmodif) == coll.endsWith(collmodif)) &&
+ (for (sq <- startEndSeqs) yield {
+ val sew = s.endsWith(sq)
+ val cew = coll.endsWith(fromSeq(sq))
+ if (sew != cew) {
+ println("from: " + s)
+ println("and: " + coll)
+ println(sew)
+ println(cew)
+ }
+ ("seq " + sq) |: sew == cew
+ }).reduceLeft(_ && _)
+ }
+
+ property("unions must be equal") = forAll(collectionPairsWithModified) { case (s, coll, collmodif) =>
+ ("modified" |: s.union(collmodif.seq) == coll.union(collmodif)) &&
+ ("empty" |: s.union(Nil) == coll.union(fromSeq(Nil)))
+ }
+
+ // This is failing with my views patch: array index out of bounds in the array iterator.
+ // Couldn't see why this and only this was impacted, could use a second pair of eyes.
+ //
+ // This was failing because some corner cases weren't added to the patch method in ParSeqLike.
+ // Curiously, this wasn't detected before.
+ //
+ if (!isCheckingViews) property("patches must be equal") = forAll(collectionTripletsWith2Indices) {
+ case (s, coll, pat, from, repl) =>
+ ("with seq" |: s.patch(from, pat, repl) == coll.patch(from, pat, repl)) &&
+ ("with par" |: s.patch(from, pat, repl) == coll.patch(from, fromSeq(pat), repl)) &&
+ ("with empty" |: s.patch(from, Nil, repl) == coll.patch(from, fromSeq(Nil), repl)) &&
+ ("with one" |: (s.length == 0 || s.patch(from, List(s(0)), 1) == coll.patch(from, fromSeq(List(coll(0))), 1)))
+ }
+
+ if (!isCheckingViews) property("updates must be equal") = forAll(collectionPairsWithLengths) { case (s, coll, len) =>
+ val pos = if (len >= s.length) s.length - 1 else len
+ if (s.length > 0) {
+ val supd = s.updated(pos, s(0))
+ val cupd = coll.updated(pos, coll(0))
+ if (supd != cupd) {
+ println("from: " + s)
+ println("and: " + coll)
+ println(supd)
+ println(cupd)
+ }
+ "from first" |: (supd == cupd)
+ } else "trivially" |: true
+ }
+
+ property("prepends must be equal") = forAll(collectionPairs) { case (s, coll) =>
+ s.length == 0 || s(0) +: s == coll(0) +: coll
+ }
+
+ property("appends must be equal") = forAll(collectionPairs) { case (s, coll) =>
+ s.length == 0 || s :+ s(0) == coll :+ coll(0)
+ }
+
+ property("padTos must be equal") = forAll(collectionPairsWithLengths) { case (s, coll, len) =>
+ val someValue = sampleValue
+ val sdoub = s.padTo(len * 2, someValue)
+ val cdoub = coll.padTo(len * 2, someValue)
+ if (sdoub != cdoub) {
+ println("from: " + s)
+ println("and: " + coll)
+ println(sdoub)
+ println(cdoub)
+ }
+ ("smaller" |: s.padTo(len / 2, someValue) == coll.padTo(len / 2, someValue)) &&
+ ("bigger" |: sdoub == cdoub)
+ }
+
+ property("corresponds must be equal") = forAll(collectionPairsWithModified) { case (s, coll, modified) =>
+ val modifcut = modified.toSeq.slice(0, modified.length)
+ ("self" |: s.corresponds(s)(_ == _) == coll.corresponds(coll)(_ == _)) &&
+ ("modified" |: s.corresponds(modified.seq)(_ == _) == coll.corresponds(modified)(_ == _)) &&
+ ("modified2" |: s.corresponds(modifcut)(_ == _) == coll.corresponds(modifcut)(_ == _))
+ }
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/files/scalacheck/parallel-collections/ParallelSetCheck.scala b/test/files/scalacheck/parallel-collections/ParallelSetCheck.scala
new file mode 100644
index 0000000000..4211abbd16
--- /dev/null
+++ b/test/files/scalacheck/parallel-collections/ParallelSetCheck.scala
@@ -0,0 +1,62 @@
+package scala.collection.parallel
+
+
+
+import org.scalacheck._
+import org.scalacheck.Gen
+import org.scalacheck.Gen._
+import org.scalacheck.Prop._
+import org.scalacheck.Properties
+
+import scala.collection._
+import scala.collection.parallel._
+
+
+
+
+abstract class ParallelSetCheck[T](collname: String) extends ParallelIterableCheck[T](collname) {
+ type CollType <: ParSet[T]
+
+ property("gets iterated keys") = forAll(collectionPairs) {
+ case (t, coll) =>
+ val containsT = for (elem <- t) yield (coll.contains(elem))
+ val containsSelf = for (elem <- coll) yield (coll.contains(elem))
+ ("Par contains elements of seq map" |: containsT.forall(_ == true)) &&
+ ("Par contains elements of itself" |: containsSelf.forall(_ == true))
+ }
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/files/scalacheck/parallel-collections/ParallelVectorCheck.scala b/test/files/scalacheck/parallel-collections/ParallelVectorCheck.scala
new file mode 100644
index 0000000000..e4bb588fa7
--- /dev/null
+++ b/test/files/scalacheck/parallel-collections/ParallelVectorCheck.scala
@@ -0,0 +1,61 @@
+package scala.collection
+package parallel.immutable
+
+
+
+import org.scalacheck._
+import org.scalacheck.Gen
+import org.scalacheck.Gen._
+import org.scalacheck.Prop._
+import org.scalacheck.Properties
+import org.scalacheck.Arbitrary._
+
+import scala.collection._
+import scala.collection.parallel.ops._
+
+
+import immutable.Vector
+import immutable.VectorBuilder
+
+
+
+
+abstract class ParallelVectorCheck[T](tp: String) extends collection.parallel.ParallelSeqCheck[T]("ParVector[" + tp + "]") {
+ // ForkJoinTasks.defaultForkJoinPool.setMaximumPoolSize(Runtime.getRuntime.availableProcessors * 2)
+ // ForkJoinTasks.defaultForkJoinPool.setParallelism(Runtime.getRuntime.availableProcessors * 2)
+
+ type CollType = ParVector[T]
+
+ def isCheckingViews = false
+
+ def hasStrictOrder = true
+
+ def ofSize(vals: Seq[Gen[T]], sz: Int) = {
+ val vb = new immutable.VectorBuilder[T]()
+ val gen = vals(rnd.nextInt(vals.size))
+ for (i <- 0 until sz) vb += sample(gen)
+ vb.result
+ }
+
+ def fromSeq(a: Seq[T]) = {
+ val pa = ParVector.newCombiner[T]
+ for (elem <- a.toList) pa += elem
+ pa.result
+ }
+
+}
+
+
+
+object IntParallelVectorCheck extends ParallelVectorCheck[Int]("Int") with IntSeqOperators with IntValues {
+ override def instances(vals: Seq[Gen[Int]]) = oneOf(super.instances(vals), sized { sz =>
+ (0 until sz).toArray.toSeq
+ }, sized { sz =>
+ (-sz until 0).toArray.toSeq
+ })
+}
+
+
+
+
+
diff --git a/test/files/scalacheck/parallel-collections/pc.scala b/test/files/scalacheck/parallel-collections/pc.scala
new file mode 100644
index 0000000000..cc0382303a
--- /dev/null
+++ b/test/files/scalacheck/parallel-collections/pc.scala
@@ -0,0 +1,51 @@
+
+
+
+
+import org.scalacheck._
+
+import scala.collection.parallel._
+
+
+class ParCollProperties extends Properties("Parallel collections") {
+ /* Collections */
+
+ // parallel arrays
+ include(mutable.IntParallelArrayCheck)
+
+ // parallel ranges
+ include(immutable.ParallelRangeCheck)
+
+ // parallel immutable hash maps (tries)
+ include(immutable.IntIntParallelHashMapCheck)
+
+ // parallel immutable hash sets (tries)
+ include(immutable.IntParallelHashSetCheck)
+
+ // parallel mutable hash maps (tables)
+ include(mutable.IntIntParallelHashMapCheck)
+
+ // parallel mutable hash sets (tables)
+ include(mutable.IntParallelHashSetCheck)
+
+ // parallel vectors
+ include(immutable.IntParallelVectorCheck)
+}
+
+
+object Test {
+ def main(args: Array[String]) {
+ val pc = new ParCollProperties
+ org.scalacheck.Test.checkProperties(
+ org.scalacheck.Test.Params(
+ rng = new java.util.Random(5134L),
+ testCallback = new ConsoleReporter(0),
+ workers = 1,
+ minSize = 0,
+ maxSize = 4000,
+ minSuccessfulTests = 5
+ ),
+ pc
+ )
+ }
+}
diff --git a/test/files/scalacheck/primitive-eqeq.scala b/test/files/scalacheck/primitive-eqeq.scala
new file mode 100644
index 0000000000..a783805e46
--- /dev/null
+++ b/test/files/scalacheck/primitive-eqeq.scala
@@ -0,0 +1,37 @@
+import org.scalacheck._
+import Prop._
+import Gen._
+
+object Test extends Properties("==") {
+ def equalObjectsEqualHashcodes(x: Any, y: Any) = (x != y) || (x == y && x.## == y.##)
+
+ // ticket #2087
+ property("short/char") = forAll { (x: Short) => {
+ val ch: Char = x.toChar
+ (x == ch) == (ch == x)
+ }
+ }
+
+ property("symmetry") = forAll { (x: AnyVal, y: AnyVal) => (x == y) == (y == x) }
+ property("transitivity") = forAll { (x: AnyVal, y: AnyVal, z: AnyVal) => x != y || y != z || x == z }
+
+ property("##") = forAll {
+ (x: Short) => {
+ val anyvals = List(x.toByte, x.toChar, x, x.toInt, x.toLong, x.toFloat, x.toDouble, BigInt(x), BigDecimal(x))
+ val shortAndLarger = anyvals drop 2
+
+ val result = (
+ ((anyvals, anyvals).zipped forall equalObjectsEqualHashcodes) &&
+ ((shortAndLarger, shortAndLarger).zipped forall (_ == _)) &&
+ ((shortAndLarger, shortAndLarger).zipped forall ((x, y) => (x: Any) == (y: Any)))
+ )
+ result
+ }
+ }
+ property("## 2") = forAll {
+ (dv: Double) => {
+ val fv = dv.toFloat
+ (fv != dv) || (fv.## == dv.##)
+ }
+ }
+}
diff --git a/test/files/scalacheck/range.scala b/test/files/scalacheck/range.scala
new file mode 100644
index 0000000000..56295f204c
--- /dev/null
+++ b/test/files/scalacheck/range.scala
@@ -0,0 +1,228 @@
+import org.scalacheck._
+import Prop._
+import Gen._
+import Arbitrary._
+
+class Counter(r: Range) {
+ var cnt = 0L
+ var last: Option[Int] = None
+ val str = "Range["+r.start+", "+r.end+", "+r.step+(if (r.isInclusive) "]" else ")")
+ def apply(x: Int) = {
+ cnt += 1L
+ if (cnt % 500000000L == 0L) {
+ println("Working: %s %d %d" format (str, cnt, x))
+ }
+ if (cnt > (Int.MaxValue.toLong + 1) * 2)
+ error("Count exceeds maximum possible for an Int Range")
+ if ((r.step > 0 && last.exists(_ > x)) || (r.step < 0 && last.exists(_ < x)))
+ error("Range wrapped: %d %s" format (x, last.toString))
+ last = Some(x)
+ }
+}
+
+abstract class RangeTest(kind: String) extends Properties("Range "+kind) {
+ def myGen: Gen[Range]
+
+ val genRange = for {
+ start <- arbitrary[Int]
+ end <- arbitrary[Int]
+ step <- Gen.choose(1, (start - end).abs + 1)
+ } yield if (start < end) Range(start, end, step) else Range(start, end, -step)
+
+ val genReasonableSizeRange = for {
+ start <- choose(-Int.MinValue, Int.MaxValue)
+ end <- choose(-Int.MinValue, Int.MaxValue)
+ step <- choose(-Int.MaxValue, Int.MaxValue)
+ } yield Range(start, end, if (step == 0) 100 else step)
+
+ val genSmallRange = for {
+ start <- choose(-100, 100)
+ end <- choose(-100, 100)
+ step <- choose(1, 1)
+ } yield if (start < end) Range(start, end, step) else Range(start, end, -step)
+
+ val genRangeByOne = for {
+ start <- arbitrary[Int]
+ end <- arbitrary[Int]
+ if (end.toLong - start.toLong).abs <= 10000000L
+ } yield if (start < end) Range(start, end) else Range(end, start)
+
+ def str(r: Range) = "Range["+r.start+", "+r.end+", "+r.step+(if (r.isInclusive) "]" else ")")
+
+ def expectedSize(r: Range): Long = if (r.isInclusive) {
+ (r.end.toLong - r.start.toLong < 0, r.step < 0) match {
+ case (true, true) | (false, false) => (r.end.toLong - r.start.toLong).abs / r.step.abs.toLong + 1L
+ case _ => if (r.start == r.end) 1L else 0L
+ }
+ } else {
+ (r.end.toLong - r.start.toLong < 0, r.step < 0) match {
+ case (true, true) | (false, false) => (
+ (r.end.toLong - r.start.toLong).abs / r.step.abs.toLong
+ + (if ((r.end.toLong - r.start.toLong).abs % r.step.abs.toLong > 0L) 1L else 0L)
+ )
+ case _ => 0L
+ }
+ }
+
+ def within(r: Range, x: Int) = if (r.step > 0)
+ r.start <= x && (if (r.isInclusive) x <= r.end else x < r.end)
+ else
+ r.start >= x && (if (r.isInclusive) x >= r.end else x > r.end)
+
+ def multiple(r: Range, x: Int) = (x.toLong - r.start) % r.step == 0
+
+ property("foreach.step") = forAll(myGen) { r =>
+ var allValid = true
+ val cnt = new Counter(r)
+// println("--------------------")
+// println(r)
+ r foreach { x => cnt(x)
+// println(x + ", " + (x - r.start) + ", " + (x.toLong - r.start) + ", " + ((x.toLong - r.start) % r.step))
+ allValid &&= multiple(r, x)
+ }
+ allValid :| str(r)
+ }
+
+ property("foreach.inside.range") = forAll(myGen) { r =>
+ var allValid = true
+ var last: Option[Int] = None
+ val cnt = new Counter(r)
+ r foreach { x => cnt(x)
+ allValid &&= within(r, x)
+ }
+ allValid :| str(r)
+ }
+
+ property("foreach.visited.size") = forAll(myGen) { r =>
+ var visited = 0L
+ val cnt = new Counter(r)
+ r foreach { x => cnt(x)
+ visited += 1L
+ }
+// println("----------")
+// println(str(r))
+// println("size: " + r.size)
+// println("expected: " + expectedSize(r))
+// println("visited: " + visited)
+ (visited == expectedSize(r)) :| str(r)
+ }
+
+ property("length") = forAll(myGen suchThat (r => expectedSize(r).toInt == expectedSize(r))) { r =>
+ (r.length == expectedSize(r)) :| str(r)
+ }
+
+ property("isEmpty") = forAll(myGen suchThat (r => expectedSize(r).toInt == expectedSize(r))) { r =>
+ (r.isEmpty == (expectedSize(r) == 0L)) :| str(r)
+ }
+
+ property("contains") = forAll(myGen, arbInt.arbitrary) { (r, x) =>
+// println("----------------")
+// println(str(r))
+// println(x)
+// println("within: " + within(r, x))
+// println("multiple: " + multiple(r, x))
+// println("contains: " + r.contains(x))
+ ((within(r, x) && multiple(r, x)) == r.contains(x)) :| str(r)+": "+x
+ }
+
+ property("take") = forAll(myGen suchThat (r => expectedSize(r).toInt == expectedSize(r)), arbInt.arbitrary) { (r, x) =>
+ val t = r take x
+ (t.size == (0 max x min r.size) && t.start == r.start && t.step == r.step) :| str(r)+" / "+str(t)+": "+x
+ }
+
+ property("init") = forAll(myGen suchThat (r => expectedSize(r).toInt == expectedSize(r))) { r =>
+ (r.size == 0) || {
+ val t = r.init
+ (t.size + 1 == r.size) && (t.isEmpty || t.head == r.head)
+ }
+ }
+
+ property("takeWhile") = forAll(myGen suchThat (r => expectedSize(r).toInt == expectedSize(r)), arbInt.arbitrary) { (r, x) =>
+ val t = (if (r.step > 0) r takeWhile (_ <= x) else r takeWhile(_ >= x))
+ if (r.size == 0) {
+ (t.size == 0) :| str(r)+" / "+str(t)+": "+x
+ } else {
+ val t2 = (if (r.step > 0) Range(r.start, x min r.last, r.step).inclusive else Range(r.start, x max r.last, r.step).inclusive)
+ (t.start == r.start && t.size == t2.size && t.step == r.step) :| str(r)+" / "+str(t)+" / "+str(t2)+": "+x
+ }
+ }
+
+ property("reverse.toSet.equal") = forAll(myGen) { r =>
+ val reversed = r.reverse
+ val aresame = r.toSet == reversed.toSet
+ if (!aresame) {
+ println(str(r))
+ println(r)
+ println(reversed)
+ println(r.toSet)
+ println(reversed.toSet)
+ }
+ aresame
+ }
+}
+
+object NormalRangeTest extends RangeTest("normal") {
+ override def myGen = genReasonableSizeRange
+ def genOne = for {
+ start <- arbitrary[Int]
+ end <- arbitrary[Int]
+ if (start.toLong - end.toLong).abs < Int.MaxValue.toLong
+ } yield Range(start, end, if (start < end) 1 else - 1)
+ property("by 1.size + 1 == inclusive.size") = forAll(genOne) { r =>
+ (r.size + 1 == r.inclusive.size) :| str(r)
+ }
+}
+
+object InclusiveRangeTest extends RangeTest("inclusive") {
+ override def myGen = for (r <- genReasonableSizeRange) yield r.inclusive
+}
+
+object ByOneRangeTest extends RangeTest("byOne") {
+ override def myGen = genSmallRange
+}
+
+object InclusiveByOneRangeTest extends RangeTest("inclusiveByOne") {
+ override def myGen = for (r <- genSmallRange) yield r.inclusive
+}
+
+object SmallValuesRange extends RangeTest("smallValues") {
+ override def myGen = genSmallRange
+}
+
+object TooLargeRange extends Properties("Too Large Range") {
+ val genTooLargeStart = for {
+ start <- choose(-Int.MinValue, 0)
+ } yield start
+
+ property("Too large range throws exception") = forAll(genTooLargeStart) { start =>
+ try {
+ val r = Range.inclusive(start, Int.MaxValue, 1)
+ println("how here? r = " + r.toString)
+ false
+ }
+ catch { case _: IllegalArgumentException => true }
+ }
+}
+
+object Test extends Properties("Range") {
+ import org.scalacheck.{ Test => STest }
+
+ List(NormalRangeTest, InclusiveRangeTest, ByOneRangeTest, InclusiveByOneRangeTest, TooLargeRange) foreach { ps =>
+ STest.checkProperties(STest.Params(testCallback = ConsoleReporter(0)), ps)
+ }
+}
+
+/* Mini-benchmark
+def testRange(i: Int, j: Int, k: Int) = {
+ var count = 0
+ for {
+ vi <- 0 to i
+ vj <- 0 to j
+ vk <- 0 to k
+ } { count += 1 }
+}
+
+testRange(10, 1000, 10000)
+testRange(10000, 1000, 10)
+*/
+
diff --git a/test/files/scalacheck/redblack.scala b/test/files/scalacheck/redblack.scala
new file mode 100644
index 0000000000..1fcaa46f0e
--- /dev/null
+++ b/test/files/scalacheck/redblack.scala
@@ -0,0 +1,213 @@
+import org.scalacheck._
+import Prop._
+import Gen._
+
+/*
+Properties of a Red & Black Tree:
+
+A node is either red or black.
+The root is black. (This rule is used in some definitions and not others. Since the
+root can always be changed from red to black but not necessarily vice-versa this
+rule has little effect on analysis.)
+All leaves are black.
+Both children of every red node are black.
+Every simple path from a given node to any of its descendant leaves contains the same number of black nodes.
+*/
+
+abstract class RedBlackTest extends Properties("RedBlack") {
+ def minimumSize = 0
+ def maximumSize = 5
+
+ object RedBlackTest extends scala.collection.immutable.RedBlack[String] {
+ def isSmaller(x: String, y: String) = x < y
+ }
+
+ import RedBlackTest._
+
+ def nodeAt[A](tree: Tree[A], n: Int): Option[(String, A)] = if (n < tree.iterator.size && n >= 0)
+ Some(tree.iterator.drop(n).next)
+ else
+ None
+
+ def treeContains[A](tree: Tree[A], key: String) = tree.iterator.map(_._1) contains key
+
+ def mkTree(level: Int, parentIsBlack: Boolean = false, label: String = ""): Gen[Tree[Int]] =
+ if (level == 0) {
+ value(Empty)
+ } else {
+ for {
+ oddOrEven <- choose(0, 2)
+ tryRed = oddOrEven.sample.get % 2 == 0 // work around arbitrary[Boolean] bug
+ isRed = parentIsBlack && tryRed
+ nextLevel = if (isRed) level else level - 1
+ left <- mkTree(nextLevel, !isRed, label + "L")
+ right <- mkTree(nextLevel, !isRed, label + "R")
+ } yield {
+ if (isRed)
+ RedTree(label + "N", 0, left, right)
+ else
+ BlackTree(label + "N", 0, left, right)
+ }
+ }
+
+ def genTree = for {
+ depth <- choose(minimumSize, maximumSize + 1)
+ tree <- mkTree(depth)
+ } yield tree
+
+ type ModifyParm
+ def genParm(tree: Tree[Int]): Gen[ModifyParm]
+ def modify(tree: Tree[Int], parm: ModifyParm): Tree[Int]
+
+ def genInput: Gen[(Tree[Int], ModifyParm, Tree[Int])] = for {
+ tree <- genTree
+ parm <- genParm(tree)
+ } yield (tree, parm, modify(tree, parm))
+}
+
+trait RedBlackInvariants {
+ self: RedBlackTest =>
+
+ import RedBlackTest._
+
+ def rootIsBlack[A](t: Tree[A]) = t.isBlack
+
+ def areAllLeavesBlack[A](t: Tree[A]): Boolean = t match {
+ case Empty => t.isBlack
+ case ne: NonEmpty[_] => List(ne.left, ne.right) forall areAllLeavesBlack
+ }
+
+ def areRedNodeChildrenBlack[A](t: Tree[A]): Boolean = t match {
+ case RedTree(_, _, left, right) => List(left, right) forall (t => t.isBlack && areRedNodeChildrenBlack(t))
+ case BlackTree(_, _, left, right) => List(left, right) forall areRedNodeChildrenBlack
+ case Empty => true
+ }
+
+ def blackNodesToLeaves[A](t: Tree[A]): List[Int] = t match {
+ case Empty => List(1)
+ case BlackTree(_, _, left, right) => List(left, right) flatMap blackNodesToLeaves map (_ + 1)
+ case RedTree(_, _, left, right) => List(left, right) flatMap blackNodesToLeaves
+ }
+
+ def areBlackNodesToLeavesEqual[A](t: Tree[A]): Boolean = t match {
+ case Empty => true
+ case ne: NonEmpty[_] =>
+ (
+ blackNodesToLeaves(ne).distinct.size == 1
+ && areBlackNodesToLeavesEqual(ne.left)
+ && areBlackNodesToLeavesEqual(ne.right)
+ )
+ }
+
+ def orderIsPreserved[A](t: Tree[A]): Boolean =
+ t.iterator zip t.iterator.drop(1) forall { case (x, y) => isSmaller(x._1, y._1) }
+
+ def setup(invariant: Tree[Int] => Boolean) = forAll(genInput) { case (tree, parm, newTree) =>
+ invariant(newTree)
+ }
+
+ property("root is black") = setup(rootIsBlack)
+ property("all leaves are black") = setup(areAllLeavesBlack)
+ property("children of red nodes are black") = setup(areRedNodeChildrenBlack)
+ property("black nodes are balanced") = setup(areBlackNodesToLeavesEqual)
+ property("ordering of keys is preserved") = setup(orderIsPreserved)
+}
+
+object TestInsert extends RedBlackTest with RedBlackInvariants {
+ import RedBlackTest._
+
+ override type ModifyParm = Int
+ override def genParm(tree: Tree[Int]): Gen[ModifyParm] = choose(0, tree.iterator.size + 1)
+ override def modify(tree: Tree[Int], parm: ModifyParm): Tree[Int] = tree update (generateKey(tree, parm), 0)
+
+ def generateKey(tree: Tree[Int], parm: ModifyParm): String = nodeAt(tree, parm) match {
+ case Some((key, _)) => key.init.mkString + "MN"
+ case None => nodeAt(tree, parm - 1) match {
+ case Some((key, _)) => key.init.mkString + "RN"
+ case None => "N"
+ }
+ }
+
+ property("update adds elements") = forAll(genInput) { case (tree, parm, newTree) =>
+ treeContains(newTree, generateKey(tree, parm))
+ }
+}
+
+object TestModify extends RedBlackTest {
+ import RedBlackTest._
+
+ def newValue = 1
+ override def minimumSize = 1
+ override type ModifyParm = Int
+ override def genParm(tree: Tree[Int]): Gen[ModifyParm] = choose(0, tree.iterator.size)
+ override def modify(tree: Tree[Int], parm: ModifyParm): Tree[Int] = nodeAt(tree, parm) map {
+ case (key, _) => tree update (key, newValue)
+ } getOrElse tree
+
+ property("update modifies values") = forAll(genInput) { case (tree, parm, newTree) =>
+ nodeAt(tree,parm) forall { case (key, _) =>
+ newTree.iterator contains (key, newValue)
+ }
+ }
+}
+
+object TestDelete extends RedBlackTest with RedBlackInvariants {
+ import RedBlackTest._
+
+ override def minimumSize = 1
+ override type ModifyParm = Int
+ override def genParm(tree: Tree[Int]): Gen[ModifyParm] = choose(0, tree.iterator.size)
+ override def modify(tree: Tree[Int], parm: ModifyParm): Tree[Int] = nodeAt(tree, parm) map {
+ case (key, _) => tree delete key
+ } getOrElse tree
+
+ property("delete removes elements") = forAll(genInput) { case (tree, parm, newTree) =>
+ nodeAt(tree, parm) forall { case (key, _) =>
+ !treeContains(newTree, key)
+ }
+ }
+}
+
+object TestRange extends RedBlackTest with RedBlackInvariants {
+ import RedBlackTest._
+
+ override type ModifyParm = (Option[Int], Option[Int])
+ override def genParm(tree: Tree[Int]): Gen[ModifyParm] = for {
+ from <- choose(0, tree.iterator.size)
+ to <- choose(0, tree.iterator.size) suchThat (from <=)
+ optionalFrom <- oneOf(Some(from), None, Some(from)) // Double Some(n) to get around a bug
+ optionalTo <- oneOf(Some(to), None, Some(to)) // Double Some(n) to get around a bug
+ } yield (optionalFrom, optionalTo)
+
+ override def modify(tree: Tree[Int], parm: ModifyParm): Tree[Int] = {
+ val from = parm._1 flatMap (nodeAt(tree, _) map (_._1))
+ val to = parm._2 flatMap (nodeAt(tree, _) map (_._1))
+ tree range (from, to)
+ }
+
+ property("range boundaries respected") = forAll(genInput) { case (tree, parm, newTree) =>
+ val from = parm._1 flatMap (nodeAt(tree, _) map (_._1))
+ val to = parm._2 flatMap (nodeAt(tree, _) map (_._1))
+ ("lower boundary" |: (from forall ( key => newTree.iterator.map(_._1) forall (key <=)))) &&
+ ("upper boundary" |: (to forall ( key => newTree.iterator.map(_._1) forall (key >))))
+ }
+
+ property("range returns all elements") = forAll(genInput) { case (tree, parm, newTree) =>
+ val from = parm._1 flatMap (nodeAt(tree, _) map (_._1))
+ val to = parm._2 flatMap (nodeAt(tree, _) map (_._1))
+ val filteredTree = (tree.iterator
+ .map(_._1)
+ .filter(key => from forall (key >=))
+ .filter(key => to forall (key <))
+ .toList)
+ filteredTree == newTree.iterator.map(_._1).toList
+ }
+}
+
+object Test extends Properties("RedBlack") {
+ include(TestInsert)
+ include(TestModify)
+ include(TestDelete)
+ include(TestRange)
+}
+
diff --git a/test/files/scalacheck/scan.scala b/test/files/scalacheck/scan.scala
new file mode 100644
index 0000000000..fc214d739c
--- /dev/null
+++ b/test/files/scalacheck/scan.scala
@@ -0,0 +1,19 @@
+import org.scalacheck._
+import Prop._
+import Gen._
+
+
+
+
+object Test extends Properties("TraversableLike.scanLeft") {
+ property("scanLeft") = forAll { (xs: List[Int], z: Int) => {
+ val sums = xs.scanLeft(z)(_ + _)
+ (xs.size == 0) || sums.zip(sums.tail).map(x => x._2 - x._1) == xs
+ }}
+}
+
+
+
+
+
+
diff --git a/test/files/scalacheck/substringTests.scala b/test/files/scalacheck/substringTests.scala
new file mode 100644
index 0000000000..a48356e1fa
--- /dev/null
+++ b/test/files/scalacheck/substringTests.scala
@@ -0,0 +1,20 @@
+import org.scalacheck._
+
+
+object Test extends Properties("String") {
+ property("startsWith") = Prop.forAll((a: String, b: String) => (a+b).startsWith(a))
+
+ property("endsWith") = Prop.forAll((a: String, b: String) => (a+b).endsWith(b))
+
+ property("concat") = Prop.forAll((a: String, b: String) =>
+ (a+b).length >= a.length && (a+b).length >= b.length
+ )
+
+ property("substring") = Prop.forAll((a: String, b: String) =>
+ (a+b).substring(a.length) == b
+ )
+
+ property("substring") = Prop.forAll((a: String, b: String, c: String) =>
+ (a+b+c).substring(a.length, a.length+b.length) == b
+ )
+}
diff --git a/test/files/scalacheck/test.scala b/test/files/scalacheck/test.scala
new file mode 100644
index 0000000000..f69c7fe211
--- /dev/null
+++ b/test/files/scalacheck/test.scala
@@ -0,0 +1,8 @@
+import org.scalacheck._
+
+
+
+
+
+
+object Test extends Properties("Nothing")
diff --git a/test/files/scalacheck/testdir/dep.scala b/test/files/scalacheck/testdir/dep.scala
new file mode 100644
index 0000000000..ab167cbc8b
--- /dev/null
+++ b/test/files/scalacheck/testdir/dep.scala
@@ -0,0 +1,7 @@
+
+
+
+
+object Dependency {
+ val v = 1
+}
diff --git a/test/files/scalacheck/testdir/test.scala b/test/files/scalacheck/testdir/test.scala
new file mode 100644
index 0000000000..d5a5056137
--- /dev/null
+++ b/test/files/scalacheck/testdir/test.scala
@@ -0,0 +1,10 @@
+import org.scalacheck._
+
+
+
+
+
+
+object Test extends Properties("Nothing") {
+ val d = Dependency.v
+}
diff --git a/test/files/scalap/caseClass/A.scala b/test/files/scalap/caseClass/A.scala
index be86714898..95f9984519 100644
--- a/test/files/scalap/caseClass/A.scala
+++ b/test/files/scalap/caseClass/A.scala
@@ -1,3 +1,3 @@
case class CaseClass[A <: Seq[Int]](i: A, s: String) {
- def foo = 239
+ def foo = 239
}
diff --git a/test/files/scalap/caseClass/result.test b/test/files/scalap/caseClass/result.test
index 9ea19f7e9d..a0dbc497fe 100644
--- a/test/files/scalap/caseClass/result.test
+++ b/test/files/scalap/caseClass/result.test
@@ -1,15 +1,16 @@
-case class CaseClass[A >: scala.Nothing <: scala.Seq[scala.Int]] extends java.lang.Object with scala.ScalaObject with scala.Product {
+case class CaseClass[A <: scala.Seq[scala.Int]](i : A, s : scala.Predef.String) extends java.lang.Object with scala.ScalaObject with scala.Product with scala.Serializable {
val i : A = { /* compiled code */ }
val s : scala.Predef.String = { /* compiled code */ }
def foo : scala.Int = { /* compiled code */ }
- def copy[A >: scala.Nothing <: scala.Seq[scala.Int]]() : CaseClass[A] = { /* compiled code */ }
- def copy$default$1[A >: scala.Nothing <: scala.Seq[scala.Int]] : A = { /* compiled code */ }
- def copy$default$2[A >: scala.Nothing <: scala.Seq[scala.Int]] : scala.Predef.String = { /* compiled code */ }
+ def copy[A <: scala.Seq[scala.Int]](i : A, s : scala.Predef.String) : CaseClass[A] = { /* compiled code */ }
+ override def productPrefix : java.lang.String = { /* compiled code */ }
+ def productArity : scala.Int = { /* compiled code */ }
+ def productElement(x$1 : scala.Int) : scala.Any = { /* compiled code */ }
+ override def productIterator : scala.collection.Iterator[scala.Any] = { /* compiled code */ }
+ def canEqual(x$1 : scala.Any) : scala.Boolean = { /* compiled code */ }
+ def _1 : A = { /* compiled code */ }
+ def _2 : scala.Predef.String = { /* compiled code */ }
override def hashCode() : scala.Int = { /* compiled code */ }
- override def toString() : scala.Predef.String = { /* compiled code */ }
+ override def toString() : java.lang.String = { /* compiled code */ }
override def equals(x$1 : scala.Any) : scala.Boolean = { /* compiled code */ }
- override def productPrefix : java.lang.String = { /* compiled code */ }
- override def productArity : scala.Int = { /* compiled code */ }
- override def productElement(x$1 : scala.Int) : scala.Any = { /* compiled code */ }
- override def canEqual(x$1 : scala.Any) : scala.Boolean = { /* compiled code */ }
}
diff --git a/test/files/scalap/caseObject/A.scala b/test/files/scalap/caseObject/A.scala
index 809341ade9..6a3ff10d75 100644
--- a/test/files/scalap/caseObject/A.scala
+++ b/test/files/scalap/caseObject/A.scala
@@ -1,3 +1,3 @@
case object CaseObject {
- def bar = 239
+ def bar = 239
}
diff --git a/test/files/scalap/caseObject/result.test b/test/files/scalap/caseObject/result.test
index d888191919..55e46eccd7 100644
--- a/test/files/scalap/caseObject/result.test
+++ b/test/files/scalap/caseObject/result.test
@@ -1,9 +1,10 @@
-case object CaseObject extends java.lang.Object with scala.ScalaObject with scala.Product {
+case object CaseObject extends java.lang.Object with scala.ScalaObject with scala.Product with scala.Serializable {
def bar : scala.Int = { /* compiled code */ }
- final override def toString() : java.lang.String = { /* compiled code */ }
override def productPrefix : java.lang.String = { /* compiled code */ }
- override def productArity : scala.Int = { /* compiled code */ }
- override def productElement(x$1 : scala.Int) : scala.Any = { /* compiled code */ }
- override def canEqual(x$1 : scala.Any) : scala.Boolean = { /* compiled code */ }
- protected def readResolve() : java.lang.Object = { /* compiled code */ }
+ def productArity : scala.Int = { /* compiled code */ }
+ def productElement(x$1 : scala.Int) : scala.Any = { /* compiled code */ }
+ override def productIterator : scala.collection.Iterator[scala.Any] = { /* compiled code */ }
+ def canEqual(x$1 : scala.Any) : scala.Boolean = { /* compiled code */ }
+ override def hashCode() : scala.Int = { /* compiled code */ }
+ override def toString() : java.lang.String = { /* compiled code */ }
}
diff --git a/test/files/scalap/cbnParam/A.scala b/test/files/scalap/cbnParam/A.scala
index 978a718032..2f366df64a 100644
--- a/test/files/scalap/cbnParam/A.scala
+++ b/test/files/scalap/cbnParam/A.scala
@@ -1 +1 @@
-class CbnParam(s: => String)
+class CbnParam(s: => String)
diff --git a/test/files/scalap/classPrivate/A.scala b/test/files/scalap/classPrivate/A.scala
new file mode 100644
index 0000000000..9f1bd34a6a
--- /dev/null
+++ b/test/files/scalap/classPrivate/A.scala
@@ -0,0 +1,9 @@
+class ClassPrivate {
+ private def foo = 1
+ private[ClassPrivate] def bar = 2
+ def baz = 3
+ class Outer {
+ private[ClassPrivate] def qux = 4
+ }
+ protected def quux = 5
+} \ No newline at end of file
diff --git a/test/files/scalap/classPrivate/result.test b/test/files/scalap/classPrivate/result.test
new file mode 100644
index 0000000000..0d12b779c3
--- /dev/null
+++ b/test/files/scalap/classPrivate/result.test
@@ -0,0 +1,10 @@
+class ClassPrivate extends java.lang.Object with scala.ScalaObject {
+ def this() = { /* compiled code */ }
+ def baz : scala.Int = { /* compiled code */ }
+ class Outer extends java.lang.Object with scala.ScalaObject {
+ def this() = { /* compiled code */ }
+ private[ClassPrivate] def qux : scala.Int = { /* compiled code */ }
+ }
+ protected def quux : scala.Int = { /* compiled code */ }
+ private[ClassPrivate] def bar : scala.Int = { /* compiled code */ }
+} \ No newline at end of file
diff --git a/test/files/scalap/classWithExistential/result.test b/test/files/scalap/classWithExistential/result.test
index 243f51e2ad..91afddaf0e 100644
--- a/test/files/scalap/classWithExistential/result.test
+++ b/test/files/scalap/classWithExistential/result.test
@@ -1,4 +1,4 @@
class ClassWithExistential extends java.lang.Object with scala.ScalaObject {
def this() = { /* compiled code */ }
- def foo[A >: scala.Nothing <: scala.Any, B >: scala.Nothing <: scala.Any] : scala.Function1[A, B forSome {type A >: scala.Nothing <: scala.Seq[scala.Int]; type B >: scala.Predef.String <: scala.Any}] = { /* compiled code */ }
-}
+ def foo[A, B] : scala.Function1[A, B forSome {type A <: scala.Seq[scala.Int]; type B >: scala.Predef.String}] = { /* compiled code */ }
+} \ No newline at end of file
diff --git a/test/files/scalap/covariantParam/result.test b/test/files/scalap/covariantParam/result.test
index ce480ee0cd..8acd9b497a 100644
--- a/test/files/scalap/covariantParam/result.test
+++ b/test/files/scalap/covariantParam/result.test
@@ -1,4 +1,4 @@
-class CovariantParam[+A >: scala.Nothing <: scala.Any] extends java.lang.Object with scala.ScalaObject {
+class CovariantParam[+A] extends java.lang.Object with scala.ScalaObject {
def this() = { /* compiled code */ }
- def foo[A >: scala.Nothing <: scala.Any](a : A) : scala.Int = { /* compiled code */ }
+ def foo[A](a : A) : scala.Int = { /* compiled code */ }
}
diff --git a/test/files/scalap/defaultParameter/A.scala b/test/files/scalap/defaultParameter/A.scala
new file mode 100644
index 0000000000..d3514952f4
--- /dev/null
+++ b/test/files/scalap/defaultParameter/A.scala
@@ -0,0 +1,3 @@
+trait DefaultParameter {
+ def foo(s: String = "hello"): Unit
+} \ No newline at end of file
diff --git a/test/files/scalap/defaultParameter/result.test b/test/files/scalap/defaultParameter/result.test
new file mode 100644
index 0000000000..38bf6ac4e3
--- /dev/null
+++ b/test/files/scalap/defaultParameter/result.test
@@ -0,0 +1,3 @@
+trait DefaultParameter extends java.lang.Object {
+ def foo(s : scala.Predef.String) : scala.Unit
+} \ No newline at end of file
diff --git a/test/files/scalap/typeAnnotations/A.scala b/test/files/scalap/typeAnnotations/A.scala
new file mode 100644
index 0000000000..ff2445edc9
--- /dev/null
+++ b/test/files/scalap/typeAnnotations/A.scala
@@ -0,0 +1,9 @@
+abstract class TypeAnnotations[@specialized R] {
+ @specialized val x = 10
+ @specialized type T
+
+ def compose[@specialized A](x: A, y: R): A = {
+ val y: A = x
+ x
+ }
+} \ No newline at end of file
diff --git a/test/files/scalap/typeAnnotations/result.test b/test/files/scalap/typeAnnotations/result.test
new file mode 100644
index 0000000000..b565d6185b
--- /dev/null
+++ b/test/files/scalap/typeAnnotations/result.test
@@ -0,0 +1,8 @@
+abstract class TypeAnnotations[@scala.specialized R] extends java.lang.Object with scala.ScalaObject {
+ def this() = { /* compiled code */ }
+ @scala.specialized
+ val x : scala.Int = { /* compiled code */ }
+ @scala.specialized
+ type T
+ def compose[@scala.specialized A](x : A, y : R) : A = { /* compiled code */ }
+} \ No newline at end of file
diff --git a/test/files/script/utf8.scala b/test/files/script/utf8.scala
deleted file mode 100755
index 5366562cee..0000000000
--- a/test/files/script/utf8.scala
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/bin/sh
-# fact - A simple Scala script that prints out the factorial of
-# the argument specified on the command line.
-
-cygwin=false;
-case "`uname`" in
- CYGWIN*) cygwin=true ;;
-esac
-
-SOURCE="$0";
-if $cygwin; then
- if [ "$OS" = "Windows_NT" ] && cygpath -m .>/dev/null 2>/dev/null ;
-then
- format=mixed
- else
- format=windows
- fi
- SOURCE=`cygpath --$format "$SOURCE"`;
-fi
-
-export LC_CTYPE=en_US.UTF-8
-exec scala -nocompdaemon "$SOURCE" "$@"
-!#
-
-/*Comment Комментарий*/
-Console.println("QWERTY");
-Console.println("ЙЦУКЕН");
diff --git a/test/files/specialized/arrays-traits.check b/test/files/specialized/arrays-traits.check
new file mode 100644
index 0000000000..92af4f13e1
--- /dev/null
+++ b/test/files/specialized/arrays-traits.check
@@ -0,0 +1,6 @@
+0
+0
+0
+1
+2
+1 \ No newline at end of file
diff --git a/test/files/specialized/arrays-traits.scala b/test/files/specialized/arrays-traits.scala
new file mode 100644
index 0000000000..de54d22d18
--- /dev/null
+++ b/test/files/specialized/arrays-traits.scala
@@ -0,0 +1,46 @@
+
+
+
+import runtime.ScalaRunTime._
+
+
+
+trait SuperS[@specialized(AnyRef) T] {
+ def arr: Array[T]
+ def foo() = arr(0)
+ def bar(b: Array[T]) = b(0) = arr(0)
+}
+
+
+class BaseS[@specialized(AnyRef) T](val arr: Array[T]) extends SuperS[T] {
+}
+
+
+trait SuperG[T] {
+ def arr: Array[T]
+ def foo() = arr(0)
+ def bar(b: Array[T]) = b(0) = arr(0)
+}
+
+
+class BaseG[T](val arr: Array[T]) extends SuperG[T] {
+}
+
+
+object Test {
+
+ def main(args: Array[String]) {
+ (new BaseS(new Array[String](1)): SuperS[String]).foo
+ println(arrayApplyCount)
+ (new BaseS(new Array[String](1)): SuperS[String]).bar(new Array[String](1))
+ println(arrayApplyCount)
+ println(arrayUpdateCount)
+
+ (new BaseG(new Array[String](1)): SuperG[String]).foo
+ println(arrayApplyCount)
+ (new BaseG(new Array[String](1)): SuperG[String]).bar(new Array[String](1))
+ println(arrayApplyCount)
+ println(arrayUpdateCount)
+ }
+
+}
diff --git a/test/files/specialized/arrays.check b/test/files/specialized/arrays.check
new file mode 100644
index 0000000000..d37dfb720d
--- /dev/null
+++ b/test/files/specialized/arrays.check
@@ -0,0 +1,4 @@
+0
+0
+50
+51 \ No newline at end of file
diff --git a/test/files/specialized/arrays.scala b/test/files/specialized/arrays.scala
new file mode 100644
index 0000000000..c946a8fc55
--- /dev/null
+++ b/test/files/specialized/arrays.scala
@@ -0,0 +1,55 @@
+
+
+
+import runtime.ScalaRunTime._
+
+
+class Generic[T](a: Array[T]) {
+ def apply() = a(0)
+}
+
+
+class Spec[@specialized(AnyRef) T](a: Array[T]) {
+ def apply() = a(0)
+}
+
+
+object Test {
+
+ def main(args: Array[String]) {
+ val len = 50
+
+ testSpec(new Array[String](len))
+ println(arrayApplyCount)
+
+ (new Spec(new Array[String](len)))()
+ println(arrayApplyCount)
+
+ testGeneric(new Array[String](len))
+ println(arrayApplyCount)
+
+ (new Generic(new Array[String](len)))()
+ println(arrayApplyCount)
+ }
+
+ def testGeneric[T](a: Array[T]) = {
+ var i = 0
+ var sum = 0
+ while (i < a.length) {
+ sum += (if (a(i) != null) 1 else 0)
+ i += 1
+ }
+ sum
+ }
+
+ def testSpec[@specialized(AnyRef) T](a: Array[T]) = {
+ var i = 0
+ var sum = 0
+ while (i < a.length) {
+ sum += (if (a(i) != null) 1 else 0)
+ i += 1
+ }
+ sum
+ }
+
+}
diff --git a/test/files/specialized/fft.check b/test/files/specialized/fft.check
new file mode 100644
index 0000000000..74cb9bb3b5
--- /dev/null
+++ b/test/files/specialized/fft.check
@@ -0,0 +1,4 @@
+Processing 65536 items
+Boxed doubles: 0
+Boxed ints: 2
+Boxed longs: 1179811
diff --git a/test/files/specialized/fft.scala b/test/files/specialized/fft.scala
new file mode 100644
index 0000000000..62a6a2abb9
--- /dev/null
+++ b/test/files/specialized/fft.scala
@@ -0,0 +1,149 @@
+
+/*
+ * http://local.wasp.uwa.edu.au/~pbourke/miscellaneous/dft/
+ Modification of Paul Bourkes FFT code by Peter Cusack
+ to utilise the Microsoft complex type.
+
+ This computes an in-place complex-to-complex FFT
+ x and y are the real and imaginary arrays of 2^m points.
+ dir = 1 gives forward transform
+ dir = -1 gives reverse transform
+*/
+
+import Math.{sqrt, pow}
+
+/** Test that specialization handles tuples. Perform FFT transformation
+ * using pairs to represent complex numbers.
+ */
+object Test {
+ type Complex = (Double, Double)
+
+ def swap(x: Array[Complex], i: Int, j: Int) {
+ val tmp = x(i)
+ x(i) = x(j)
+ x(j) = tmp
+ }
+
+ def times(x: Complex, y: Complex): Complex =
+ (x._1 * y._1 - x._2 * y._2, x._1 * y._2 + x._2 * y._1)
+
+ def div(x: Complex, y: Complex): Complex = {
+ val num = pow(y._1, 2) + pow(y._2, 2)
+ ((x._1 * y._1 + x._2 * y._2)/num,
+ (x._2 * y._1 - x._1 * y._2)/num)
+ }
+
+ def div(x: Complex, y: Long) =
+ (x._1 / y, x._2 / y)
+
+ def add(x: Complex, y: Complex) =
+ (x._1 + y._1, x._2 + y._2)
+
+ def minus(x: Complex, y: Complex) =
+ (x._1 - y._1, x._2 - y._2)
+
+ def FFT(dir: Int, m: Long, x: Array[(Double, Double)]) {
+ var i, i1, i2,j, k, l, l1, l2, n = 0l
+// complex <double> tx, t1, u, c;
+ var tx, t1, u, c = (0.0, 0.0)
+
+ /*Calculate the number of points */
+ n = 1
+ for (i <- 0l until m)
+ n <<= 1
+
+ /* Do the bit reversal */
+ i2 = n >> 1
+ j = 0
+
+ for (i <- 0l until (n - 1)) {
+ if (i < j)
+ swap(x, i.toInt, j.toInt);
+
+ k = i2;
+
+ while (k <= j) {
+ j -= k;
+ k >>= 1;
+ }
+
+ j += k;
+ }
+
+ /* Compute the FFT */
+ // c.real(-1.0);
+ // c.imag(0.0);
+ c = (-1.0, 0.0)
+ l2 = 1
+ for (l <- 0l until m) {
+ l1 = l2
+ l2 <<= 1;
+ // u.real(1.0);
+ // u.imag(0.0);
+ u = (1.0, 0.0)
+
+ for (j <- 0l until l1) {
+ for (i <- j.until(n, l2)) {
+ i1 = i + l1;
+ t1 = times(u, x(i1.toInt))
+ x(i1.toInt) = minus(x(i.toInt), t1)
+ x(i.toInt) = add(x(i.toInt), t1)
+ }
+
+ u = times(u, c)
+ }
+
+ // c.imag(sqrt((1.0 - c.real()) / 2.0));
+ c = (c._1, sqrt( (1.0 - c._1) / 2.0 ))
+ // if (dir == 1)
+ // c.imag(-c.imag());
+ if (dir == 1)
+ c = (c._1, -c._2)
+
+ // c.real(sqrt((1.0 + c.real()) / 2.0));
+ c = (sqrt( (1.0 + c._1) / 2.0), c._2)
+ }
+
+ /* Scaling for forward transform */
+ if (dir == 1) {
+ for (i <- 0l until n)
+ x(i.toInt) = div(x(i.toInt), n)
+ }
+ }
+
+ def run() {
+ FFT(1, 16, data)
+ }
+ var data: Array[Complex] = null
+
+ def inputFileName = {
+ val cwd = System.getProperty("partest.cwd")
+ if (cwd ne null) cwd + java.io.File.separator + "input2.txt"
+ else "input2.txt"
+ }
+
+ def setUp {
+// print("Loading from %s.. ".format(inputFileName))
+ val f = io.Source.fromFile(inputFileName)
+ val lines = f.getLines
+ val n = lines.next.toInt
+ data = new Array[Complex](n)
+ var i = 0
+ for (line <- lines if line != "") {
+ val pair = line.trim.split(" ")
+ data(i) = (pair(0).trim.toDouble, pair(1).trim.toDouble)
+ i += 1
+ }
+// println("[loaded]")
+ println("Processing " + n + " items")
+ }
+
+ def main(args: Array[String]) {
+ setUp
+ run()
+
+ println("Boxed doubles: " + runtime.BoxesRunTime.doubleBoxCount)
+ println("Boxed ints: " + runtime.BoxesRunTime.integerBoxCount)
+ println("Boxed longs: " + runtime.BoxesRunTime.longBoxCount)
+ }
+}
diff --git a/test/files/specialized/input2.txt b/test/files/specialized/input2.txt
new file mode 100644
index 0000000000..981dc01b9a
--- /dev/null
+++ b/test/files/specialized/input2.txt
@@ -0,0 +1,65537 @@
+65536
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+1.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
+0.000 0.000
diff --git a/test/files/specialized/spec-absfun.check b/test/files/specialized/spec-absfun.check
new file mode 100644
index 0000000000..ffa577696d
--- /dev/null
+++ b/test/files/specialized/spec-absfun.check
@@ -0,0 +1 @@
+4006000 \ No newline at end of file
diff --git a/test/files/specialized/spec-absfun.scala b/test/files/specialized/spec-absfun.scala
new file mode 100644
index 0000000000..57b54235c9
--- /dev/null
+++ b/test/files/specialized/spec-absfun.scala
@@ -0,0 +1,44 @@
+
+/** Test inheritance. See #3085.
+ * Anonymous functions extend AbstractFunction1[SpecializedPair[Int], Unit]. The
+ * specialized type SpecializedPair$mcI$sp should not leak into the superclass because
+ * the definition of apply would vary covariantly, and erasure won't consider it an
+ * override of the abstract apply, leading to an AbstractMethodError at runtime.
+ */
+
+object Test {
+
+ private val Max = 1000
+
+ def main(args: Array[String]) {
+ notSpecialized()
+ specialized()
+ println(runtime.BoxesRunTime.integerBoxCount)
+ }
+
+ def notSpecialized() {
+ val pairs = for { i <- 1 to Max; j <- 1 to i } yield new Pair(i, j)
+ val time0 = System.nanoTime
+ pairs foreach { p => p.first * p.second }
+ val time1 = System.nanoTime
+// println(time1 - time0)
+ }
+
+ def specialized() {
+ val pairs = for { i <- 1 to Max; j <- 1 to i } yield new SpecializedPair(i, j)
+ val time0 = System.nanoTime
+ pairs foreach { p => p.first * p.second }
+ val time1 = System.nanoTime
+// println(time1 - time0)
+ }
+}
+
+class Pair[A](_first: A, _second: A) {
+ def first = _first
+ def second = _second
+}
+
+class SpecializedPair[@specialized(Int) A](_first: A, _second: A) {
+ def first = _first
+ def second = _second
+}
diff --git a/test/files/specialized/spec-ame.check b/test/files/specialized/spec-ame.check
new file mode 100644
index 0000000000..9c1713cc8a
--- /dev/null
+++ b/test/files/specialized/spec-ame.check
@@ -0,0 +1,3 @@
+abc
+10
+3 \ No newline at end of file
diff --git a/test/files/specialized/spec-ame.scala b/test/files/specialized/spec-ame.scala
new file mode 100644
index 0000000000..79ee4217ed
--- /dev/null
+++ b/test/files/specialized/spec-ame.scala
@@ -0,0 +1,18 @@
+// ticket #3432
+object Test {
+ trait B[@specialized(Int) T] {
+ def value: T
+ }
+
+ class A[@specialized(Int) T](x: T) {
+ def foo: B[T] = new B[T] {
+ def value = x
+ }
+ }
+
+ def main(args: Array[String]) {
+ println((new A("abc")).foo.value)
+ println((new A(10)).foo.value)
+ println(runtime.BoxesRunTime.integerBoxCount)
+ }
+}
diff --git a/test/files/specialized/spec-constr.check b/test/files/specialized/spec-constr.check
new file mode 100644
index 0000000000..2e3a7fdceb
--- /dev/null
+++ b/test/files/specialized/spec-constr.check
@@ -0,0 +1,3 @@
+hello?
+goodbye
+0 \ No newline at end of file
diff --git a/test/files/specialized/spec-constr.scala b/test/files/specialized/spec-constr.scala
new file mode 100644
index 0000000000..38ee597299
--- /dev/null
+++ b/test/files/specialized/spec-constr.scala
@@ -0,0 +1,15 @@
+object Test {
+ class E[@specialized(Int) A](var f: A => Boolean) {
+ def this() = this(null)
+
+ println("hello?")
+ if (f == null) f = { _ => false }
+ }
+
+ def main(args: Array[String]) {
+ new E[Int]
+ println("goodbye")
+ println(runtime.BoxesRunTime.integerBoxCount)
+ }
+}
+
diff --git a/test/files/specialized/spec-early.check b/test/files/specialized/spec-early.check
new file mode 100644
index 0000000000..9c578a1af1
--- /dev/null
+++ b/test/files/specialized/spec-early.check
@@ -0,0 +1,5 @@
+a
+abc
+42
+abc
+2 \ No newline at end of file
diff --git a/test/files/specialized/spec-early.scala b/test/files/specialized/spec-early.scala
new file mode 100644
index 0000000000..65687b8624
--- /dev/null
+++ b/test/files/specialized/spec-early.scala
@@ -0,0 +1,16 @@
+trait Tr
+
+class Foo[@specialized(Int) T](_x: T) extends {
+ val bar = "abc"
+ val baz = "bbc"
+} with Tr {
+ val x = _x
+ println(x)
+ println(bar)
+}
+
+object Test extends App {
+ new Foo("a")
+ new Foo(42)
+ println(runtime.BoxesRunTime.integerBoxCount)
+}
diff --git a/test/files/specialized/spec-init.check b/test/files/specialized/spec-init.check
new file mode 100644
index 0000000000..46c031004a
--- /dev/null
+++ b/test/files/specialized/spec-init.check
@@ -0,0 +1,10 @@
+abc
+abc
+abc
+shouldn't see two initialized values and one uninitialized
+42
+42
+42
+ok
+ok
+5 \ No newline at end of file
diff --git a/test/files/specialized/spec-init.scala b/test/files/specialized/spec-init.scala
new file mode 100644
index 0000000000..5f27062ed2
--- /dev/null
+++ b/test/files/specialized/spec-init.scala
@@ -0,0 +1,42 @@
+class Foo[@specialized(Int) T](_x: T) {
+ val x = _x
+ def bar {}
+
+ val y = x
+ println(x)
+ println(y)
+
+ def baz {}
+ val z = y
+ println(z)
+}
+
+class Bar[@specialized(Int) T] {
+ def foo(x: T) = print(x)
+}
+
+object Global {
+ var msg = "ok"
+}
+
+class TouchGlobal[@specialized(Int) T](_x: T) {
+ println(Global.msg)
+ val x = {
+ Global.msg = "not ok"
+ _x
+ }
+}
+
+object Test {
+ def main(args: Array[String]) {
+ (new Foo("abc"))
+ println("shouldn't see two initialized values and one uninitialized")
+ (new Foo(42))
+
+ (new TouchGlobal(new Object))
+ Global.msg = "ok" // reset the value
+ (new TouchGlobal(42))
+
+ println(runtime.BoxesRunTime.integerBoxCount)
+ }
+}
diff --git a/test/files/specialized/spec-matrix.check b/test/files/specialized/spec-matrix.check
new file mode 100644
index 0000000000..5ec3e84597
--- /dev/null
+++ b/test/files/specialized/spec-matrix.check
@@ -0,0 +1,2 @@
+251437.0
+Boxed doubles: 1
diff --git a/test/files/specialized/spec-matrix.scala b/test/files/specialized/spec-matrix.scala
new file mode 100644
index 0000000000..98735c8c03
--- /dev/null
+++ b/test/files/specialized/spec-matrix.scala
@@ -0,0 +1,80 @@
+/** Test matrix multiplication with specialization.
+ */
+
+class Matrix[@specialized A: ClassManifest](val rows: Int, val cols: Int) {
+ private val arr: Array[Array[A]] = Array.ofDim[A](rows, cols)
+
+ def apply(i: Int, j: Int): A = {
+ if (i < 0 || i >= rows || j < 0 || j >= cols)
+ throw new NoSuchElementException("Indexes out of bounds: " + (i, j))
+
+ arr(i)(j)
+ }
+
+ def update(i: Int, j: Int, e: A) {
+ arr(i)(j) = e
+ }
+
+ def rowsIterator: Iterator[Array[A]] = new Iterator[Array[A]] {
+ var idx = 0;
+ def hasNext = idx < rows
+ def next = {
+ idx += 1
+ arr(idx - 1)
+ }
+ }
+}
+
+object Test {
+ def main(args: Array[String]) {
+ val m = randomMatrix(200, 100)
+ val n = randomMatrix(100, 200)
+
+ val p = mult(m, n)
+ println(p(0, 0))
+ println("Boxed doubles: " + runtime.BoxesRunTime.doubleBoxCount)
+// println("Boxed integers: " + runtime.BoxesRunTime.integerBoxCount)
+ }
+
+ def randomMatrix(n: Int, m: Int) = {
+ val r = new util.Random(10)
+ val x = new Matrix[Double](n, m)
+ for (i <- 0 until n; j <- 0 until m)
+ x(i, j) = (r.nextInt % 1000).toDouble
+ x
+ }
+
+ def printMatrix[Double](m: Matrix[Double]) {
+ for (i <- 0 until m.rows) {
+ for (j <- 0 until m.cols)
+ print("%5.3f ".format(m(i, j)))
+ println
+ }
+ }
+
+ def multManifest[@specialized(Int) T](m: Matrix[T], n: Matrix[T])(implicit cm: ClassManifest[T], num: Numeric[T]) {
+ val p = new Matrix[T](m.rows, n.cols)
+ import num._
+
+ for (i <- 0 until m.rows)
+ for (j <- 0 until n.cols) {
+ var sum = num.zero
+ for (k <- 0 until n.rows)
+ sum += m(i, k) * n(k, j)
+ p(i, j) = sum
+ }
+ }
+
+ def mult(m: Matrix[Double], n: Matrix[Double]) = {
+ val p = new Matrix[Double](m.rows, n.cols)
+
+ for (i <- 0 until m.rows)
+ for (j <- 0 until n.cols) {
+ var sum = 0.0
+ for (k <- 0 until n.rows)
+ sum += m(i, k) * n(k, j)
+ p(i, j) = sum
+ }
+ p
+ }
+}
diff --git a/test/files/specialized/spec-overrides.check b/test/files/specialized/spec-overrides.check
new file mode 100644
index 0000000000..c227083464
--- /dev/null
+++ b/test/files/specialized/spec-overrides.check
@@ -0,0 +1 @@
+0 \ No newline at end of file
diff --git a/test/files/specialized/spec-overrides.scala b/test/files/specialized/spec-overrides.scala
new file mode 100644
index 0000000000..90dd5a4e72
--- /dev/null
+++ b/test/files/specialized/spec-overrides.scala
@@ -0,0 +1,22 @@
+ trait Base[@specialized(Double) B] {
+ def default: B;
+ }
+
+ trait D1 extends Base[Double] {
+ override def default = 0.0;
+ }
+
+ class D2 extends D1 {
+ override def default: Double = 1.0;
+ }
+
+
+object Test extends App {
+ val d2 = new D2
+
+ assert(d2.default == 1.0, d2.default)
+ assert((d2: Base[_]).default == 1.0, (d2: Base[_]).default)
+ assert((d2: D1).default == 1.0, (d2: D1).default)
+
+ println(runtime.BoxesRunTime.integerBoxCount)
+}
diff --git a/test/files/specialized/spec-patmatch.check b/test/files/specialized/spec-patmatch.check
new file mode 100644
index 0000000000..33306ab5d9
--- /dev/null
+++ b/test/files/specialized/spec-patmatch.check
@@ -0,0 +1,20 @@
+bool
+byte
+short
+char
+int
+long
+double
+float
+default
+object instantiations:
+bool
+byte
+short
+char
+int
+long
+double
+float
+default
+2 \ No newline at end of file
diff --git a/test/files/specialized/spec-patmatch.scala b/test/files/specialized/spec-patmatch.scala
new file mode 100644
index 0000000000..979d143fe2
--- /dev/null
+++ b/test/files/specialized/spec-patmatch.scala
@@ -0,0 +1,53 @@
+class Foo[@specialized A] {
+ def test(x: A) = println(x match {
+ case _: Boolean => "bool"
+ case _: Byte => "byte"
+ case _: Short => "short"
+ case _: Char => "char"
+ case i: Int => "int"
+ case l: Long => "long"
+ case d: Double => "double"
+ case e: Float => "float"
+ case _ => "default"
+ })
+}
+
+object Test {
+ def test[@specialized A] (x: A) = println(x match {
+ case _: Boolean => "bool"
+ case _: Byte => "byte"
+ case _: Short => "short"
+ case _: Char => "char"
+ case i: Int => "int"
+ case l: Long => "long"
+ case d: Double => "double"
+ case e: Float => "float"
+ case _ => "default"
+ })
+
+ def main(args: Array[String]) {
+ test(true)
+ test(42.toByte)
+ test(42.toShort)
+ test('b')
+ test(42)
+ test(42l)
+ test(42.0)
+ test(42.0f)
+ test(new Object)
+
+ println("object instantiations:")
+ (new Foo).test(true)
+ (new Foo).test(42.toByte)
+ (new Foo).test(42.toShort)
+ (new Foo).test('b')
+ (new Foo).test(42)
+ (new Foo).test(42l)
+ (new Foo).test(42.0)
+ (new Foo).test(42.0f)
+ (new Foo).test(new Object)
+
+ println(runtime.BoxesRunTime.integerBoxCount)
+ }
+
+}
diff --git a/test/files/specialized/spec-super.check b/test/files/specialized/spec-super.check
new file mode 100644
index 0000000000..4be83ca9e6
--- /dev/null
+++ b/test/files/specialized/spec-super.check
@@ -0,0 +1,3 @@
+s
+1
+2 \ No newline at end of file
diff --git a/test/files/specialized/spec-super.scala b/test/files/specialized/spec-super.scala
new file mode 100644
index 0000000000..a77f65b2cf
--- /dev/null
+++ b/test/files/specialized/spec-super.scala
@@ -0,0 +1,20 @@
+
+// see ticket #3651
+object Test {
+ def main(args: Array[String]) {
+ val s = new Extended("s")
+ println(s.foo) //works
+
+ val i = new Extended(1)
+ println(i.foo) //infinite loop with StackOverflowError
+
+ println(runtime.BoxesRunTime.integerBoxCount)
+ }
+}
+
+class Base[@specialized(Int) T](val t: T) {
+ def foo() :T = t
+}
+class Extended [@specialized(Int) T](t: T) extends Base[T](t) {
+ override def foo() :T = super.foo
+}
diff --git a/test/files/specialized/spec-t3896.check b/test/files/specialized/spec-t3896.check
new file mode 100644
index 0000000000..63b0735a6f
--- /dev/null
+++ b/test/files/specialized/spec-t3896.check
@@ -0,0 +1,3 @@
+true
+true
+0 \ No newline at end of file
diff --git a/test/files/specialized/spec-t3896.scala b/test/files/specialized/spec-t3896.scala
new file mode 100644
index 0000000000..605ed0df9d
--- /dev/null
+++ b/test/files/specialized/spec-t3896.scala
@@ -0,0 +1,20 @@
+// see ticket #3896. Tests interaction between overloading, specialization and default params
+trait Atomic[@specialized(Boolean) T] {
+ def x: T
+
+ // crash depends on the overloading: if second method is "g", no crash.
+ def f(fn: T => T): Boolean = f(fn(x))
+ def f[R](a: T, b: R = true) = b
+}
+class AtomicBoolean(val x: Boolean) extends Atomic[Boolean]
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ val e = new AtomicBoolean(false)
+ val x = e.f( (a : Boolean) => !a ) // ok
+ println( e.f( (a : Boolean) => !a ) toString ) // ok
+ println( e.f( (a : Boolean) => !a) ) // compiler crash
+
+ println(runtime.BoxesRunTime.integerBoxCount)
+ }
+}
diff --git a/test/files/specialized/tb3651.check b/test/files/specialized/tb3651.check
new file mode 100644
index 0000000000..c227083464
--- /dev/null
+++ b/test/files/specialized/tb3651.check
@@ -0,0 +1 @@
+0 \ No newline at end of file
diff --git a/test/files/specialized/tb3651.scala b/test/files/specialized/tb3651.scala
new file mode 100644
index 0000000000..1f64080649
--- /dev/null
+++ b/test/files/specialized/tb3651.scala
@@ -0,0 +1,11 @@
+class Klass[@specialized(Long) A]( val a: A )
+
+class LongKlass( override val a: Long ) extends Klass[Long](a)
+
+object Test {
+ def main(args: Array[String]) {
+ val lk = new LongKlass(10)
+ lk.a
+ println(runtime.BoxesRunTime.longBoxCount)
+ }
+}
diff --git a/test/files/specialized/tc3651.check b/test/files/specialized/tc3651.check
new file mode 100644
index 0000000000..c227083464
--- /dev/null
+++ b/test/files/specialized/tc3651.check
@@ -0,0 +1 @@
+0 \ No newline at end of file
diff --git a/test/files/specialized/tc3651.scala b/test/files/specialized/tc3651.scala
new file mode 100644
index 0000000000..447edee3bf
--- /dev/null
+++ b/test/files/specialized/tc3651.scala
@@ -0,0 +1,15 @@
+
+
+
+
+class Base[@specialized(Int) A](val a: A)
+
+class Derived(override val a: Int) extends Base[Int](a)
+
+object Test {
+ def main(args: Array[String]) {
+ val lk: Base[Int] = new Derived(10)
+ lk.a
+ println(runtime.BoxesRunTime.integerBoxCount)
+ }
+}
diff --git a/test/files/specialized/td3651.check b/test/files/specialized/td3651.check
new file mode 100644
index 0000000000..9aea9e0ce5
--- /dev/null
+++ b/test/files/specialized/td3651.check
@@ -0,0 +1,2 @@
+0
+0 \ No newline at end of file
diff --git a/test/files/specialized/td3651.scala b/test/files/specialized/td3651.scala
new file mode 100644
index 0000000000..19a4ab616c
--- /dev/null
+++ b/test/files/specialized/td3651.scala
@@ -0,0 +1,19 @@
+
+
+
+
+class Base[@specialized(Double) A](val a: A)
+
+class Derived(override val a: Double) extends Base[Double](a)
+
+object Test {
+ def main(args: Array[String]) {
+ val b: Base[Double] = new Derived(10)
+ b.a
+ println(runtime.BoxesRunTime.doubleBoxCount)
+
+ val der = new Derived(10)
+ der.a
+ println(runtime.BoxesRunTime.doubleBoxCount)
+ }
+}
diff --git a/test/files/specialized/test.scala b/test/files/specialized/test.scala
new file mode 100644
index 0000000000..bccc6f0f93
--- /dev/null
+++ b/test/files/specialized/test.scala
@@ -0,0 +1,9 @@
+object Test {
+ // not sure exactly what this is enforcing, but it was failing on
+ // me due to some early boxing happening with the check for a
+ // stack trace suppression system property, so I boosted the count.
+ def main(args: Array[String]) {
+ assert(runtime.BoxesRunTime.booleanBoxCount < 10,
+ "Expected no more than 10 boolean boxings, found " + runtime.BoxesRunTime.booleanBoxCount)
+ }
+}
diff --git a/test/files/speclib/instrumented.jar.desired.sha1 b/test/files/speclib/instrumented.jar.desired.sha1
new file mode 100644
index 0000000000..68114c2393
--- /dev/null
+++ b/test/files/speclib/instrumented.jar.desired.sha1
@@ -0,0 +1 @@
+2546f965f6718b000c4e6ef73559c11084177bd8 ?instrumented.jar
diff --git a/test/instrumented/library/scala/runtime/BoxesRunTime.java b/test/instrumented/library/scala/runtime/BoxesRunTime.java
new file mode 100644
index 0000000000..797e9f89dd
--- /dev/null
+++ b/test/instrumented/library/scala/runtime/BoxesRunTime.java
@@ -0,0 +1,876 @@
+/* __ *\
+** ________ ___ / / ___ Scala API **
+** / __/ __// _ | / / / _ | (c) 2006-2011, LAMP/EPFL **
+** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ **
+** /____/\___/_/ |_/____/_/ | | **
+** |/ **
+\* */
+
+
+/* INSTRUMENTED VERSION */
+
+
+package scala.runtime;
+
+import java.io.*;
+import scala.math.ScalaNumber;
+
+/** An object (static class) that defines methods used for creating,
+ * reverting, and calculating with, boxed values. There are four classes
+ * of methods in this object:
+ * - Convenience boxing methods which call the static valueOf method
+ * on the boxed class, thus utilizing the JVM boxing cache.
+ * - Convenience unboxing methods returning default value on null.
+ * - The generalised comparison method to be used when an object may
+ * be a boxed value.
+ * - Standard value operators for boxed number and quasi-number values.
+ *
+ * @author Gilles Dubochet
+ * @author Martin Odersky
+ * @contributor Stepan Koltsov
+ * @version 2.0 */
+public final class BoxesRunTime
+{
+ private static final int CHAR = 0, BYTE = 1, SHORT = 2, INT = 3, LONG = 4, FLOAT = 5, DOUBLE = 6, OTHER = 7;
+
+ private static int typeCode(Object a) {
+ if (a instanceof java.lang.Integer) return INT;
+ if (a instanceof java.lang.Byte) return BYTE;
+ if (a instanceof java.lang.Character) return CHAR;
+ if (a instanceof java.lang.Long) return LONG;
+ if (a instanceof java.lang.Double) return DOUBLE;
+ if (a instanceof java.lang.Short) return SHORT;
+ if (a instanceof java.lang.Float) return FLOAT;
+ return OTHER;
+ }
+
+ private static String boxDescription(Object a) {
+ return "" + a.getClass().getSimpleName() + "(" + a + ")";
+ }
+
+/* BOXING ... BOXING ... BOXING ... BOXING ... BOXING ... BOXING ... BOXING ... BOXING */
+
+ public static int booleanBoxCount = 0;
+ public static int characterBoxCount = 0;
+ public static int byteBoxCount = 0;
+ public static int shortBoxCount = 0;
+ public static int integerBoxCount = 0;
+ public static int longBoxCount = 0;
+ public static int floatBoxCount = 0;
+ public static int doubleBoxCount = 0;
+
+ public static java.lang.Boolean boxToBoolean(boolean b) {
+ booleanBoxCount++;
+ return java.lang.Boolean.valueOf(b);
+ }
+
+ public static java.lang.Character boxToCharacter(char c) {
+ characterBoxCount++;
+ return java.lang.Character.valueOf(c);
+ }
+
+ public static java.lang.Byte boxToByte(byte b) {
+ byteBoxCount++;
+ return java.lang.Byte.valueOf(b);
+ }
+
+ public static java.lang.Short boxToShort(short s) {
+ shortBoxCount++;
+ return java.lang.Short.valueOf(s);
+ }
+
+ public static java.lang.Integer boxToInteger(int i) {
+ integerBoxCount++;
+ return java.lang.Integer.valueOf(i);
+ }
+
+ public static java.lang.Long boxToLong(long l) {
+ longBoxCount++;
+ return java.lang.Long.valueOf(l);
+ }
+
+ public static java.lang.Float boxToFloat(float f) {
+ floatBoxCount++;
+ return java.lang.Float.valueOf(f);
+ }
+
+ public static java.lang.Double boxToDouble(double d) {
+ doubleBoxCount++;
+ // System.out.println("box " + d);
+ // (new Throwable()).printStackTrace();
+ return java.lang.Double.valueOf(d);
+ }
+
+/* UNBOXING ... UNBOXING ... UNBOXING ... UNBOXING ... UNBOXING ... UNBOXING ... UNBOXING */
+
+ public static boolean unboxToBoolean(Object b) {
+ return b == null ? false : ((java.lang.Boolean)b).booleanValue();
+ }
+
+ public static char unboxToChar(Object c) {
+ return c == null ? 0 : ((java.lang.Character)c).charValue();
+ }
+
+ public static byte unboxToByte(Object b) {
+ return b == null ? 0 : ((java.lang.Byte)b).byteValue();
+ }
+
+ public static short unboxToShort(Object s) {
+ return s == null ? 0 : ((java.lang.Short)s).shortValue();
+ }
+
+ public static int unboxToInt(Object i) {
+ return i == null ? 0 : ((java.lang.Integer)i).intValue();
+ }
+
+ public static long unboxToLong(Object l) {
+ return l == null ? 0 : ((java.lang.Long)l).longValue();
+ }
+
+ public static float unboxToFloat(Object f) {
+ return f == null ? 0.0f : ((java.lang.Float)f).floatValue();
+ }
+
+ public static double unboxToDouble(Object d) {
+ // System.out.println("unbox " + d);
+ return d == null ? 0.0d : ((java.lang.Double)d).doubleValue();
+ }
+
+ /* COMPARISON ... COMPARISON ... COMPARISON ... COMPARISON ... COMPARISON ... COMPARISON */
+
+ private static int eqTypeCode(Number a) {
+ if ((a instanceof java.lang.Integer) || (a instanceof java.lang.Byte)) return INT;
+ if (a instanceof java.lang.Long) return LONG;
+ if (a instanceof java.lang.Double) return DOUBLE;
+ if (a instanceof java.lang.Short) return INT;
+ if (a instanceof java.lang.Float) return FLOAT;
+ return OTHER;
+ }
+
+ public static boolean equals(Object x, Object y) {
+ if (x == y) return true;
+ return equals2(x, y);
+ }
+
+ /** Since all applicable logic has to be present in the equals method of a ScalaNumber
+ * in any case, we dispatch to it as soon as we spot one on either side.
+ */
+ public static boolean equals2(Object x, Object y) {
+ if (x instanceof java.lang.Number)
+ return equalsNumObject((java.lang.Number)x, y);
+ if (x instanceof java.lang.Character)
+ return equalsCharObject((java.lang.Character)x, y);
+ if (x == null)
+ return y == null;
+
+ return x.equals(y);
+ }
+
+ public static boolean equalsNumObject(java.lang.Number xn, Object y) {
+ if (y instanceof java.lang.Number)
+ return equalsNumNum(xn, (java.lang.Number)y);
+ if (y instanceof java.lang.Character)
+ return equalsNumChar(xn, (java.lang.Character)y);
+ if (xn == null)
+ return y == null;
+
+ return xn.equals(y);
+ }
+
+ public static boolean equalsNumNum(java.lang.Number xn, java.lang.Number yn) {
+ int xcode = eqTypeCode(xn);
+ int ycode = eqTypeCode(yn);
+ switch (ycode > xcode ? ycode : xcode) {
+ case INT:
+ return xn.intValue() == yn.intValue();
+ case LONG:
+ return xn.longValue() == yn.longValue();
+ case FLOAT:
+ return xn.floatValue() == yn.floatValue();
+ case DOUBLE:
+ return xn.doubleValue() == yn.doubleValue();
+ default:
+ if ((yn instanceof ScalaNumber) && !(xn instanceof ScalaNumber))
+ return yn.equals(xn);
+ }
+ if (xn == null)
+ return yn == null;
+
+ return xn.equals(yn);
+ }
+
+ public static boolean equalsCharObject(java.lang.Character xc, Object y) {
+ if (y instanceof java.lang.Character)
+ return xc.charValue() == ((java.lang.Character)y).charValue();
+ if (y instanceof java.lang.Number)
+ return equalsNumChar((java.lang.Number)y, xc);
+ if (xc == null)
+ return y == null;
+
+ return xc.equals(y);
+ }
+
+ private static boolean equalsNumChar(java.lang.Number xn, java.lang.Character yc) {
+ char ch = yc.charValue();
+ switch (eqTypeCode(xn)) {
+ case INT:
+ return xn.intValue() == ch;
+ case LONG:
+ return xn.longValue() == ch;
+ case FLOAT:
+ return xn.floatValue() == ch;
+ case DOUBLE:
+ return xn.doubleValue() == ch;
+ default:
+ if (xn == null)
+ return yc == null;
+
+ return xn.equals(yc);
+ }
+ }
+
+ /** Hashcode algorithm is driven by the requirements imposed
+ * by primitive equality semantics, namely that equal objects
+ * have equal hashCodes. The first priority are the integral/char
+ * types, which already have the same hashCodes for the same
+ * values except for Long. So Long's hashCode is altered to
+ * conform to Int's for all values in Int's range.
+ *
+ * Float is problematic because it's far too small to hold
+ * all the Ints, so for instance Int.MaxValue.toFloat claims
+ * to be == to each of the largest 64 Ints. There is no way
+ * to preserve equals/hashCode alignment without compromising
+ * the hashCode distribution, so Floats are only guaranteed
+ * to have the same hashCode for whole Floats in the range
+ * Short.MinValue to Short.MaxValue (2^16 total.)
+ *
+ * Double has its hashCode altered to match the entire Int range,
+ * but is not guaranteed beyond that. (But could/should it be?
+ * The hashCode is only 32 bits so this is a more tractable
+ * issue than Float's, but it might be better simply to exclude it.)
+ *
+ * Note: BigInt and BigDecimal, being arbitrary precision, could
+ * be made consistent with all other types for the Int range, but
+ * as yet have not.
+ *
+ * Note: Among primitives, Float.NaN != Float.NaN, but the boxed
+ * verisons are equal. This still needs reconciliation.
+ */
+ public static int hashFromLong(java.lang.Long n) {
+ int iv = n.intValue();
+ if (iv == n.longValue()) return iv;
+ else return n.hashCode();
+ }
+ public static int hashFromDouble(java.lang.Double n) {
+ int iv = n.intValue();
+ double dv = n.doubleValue();
+ if (iv == dv) return iv;
+
+ long lv = n.longValue();
+ if (lv == dv) return java.lang.Long.valueOf(lv).hashCode();
+ else return n.hashCode();
+ }
+ public static int hashFromFloat(java.lang.Float n) {
+ int iv = n.intValue();
+ float fv = n.floatValue();
+ if (iv == fv) return iv;
+
+ long lv = n.longValue();
+ if (lv == fv) return java.lang.Long.valueOf(lv).hashCode();
+ else return n.hashCode();
+ }
+ public static int hashFromNumber(java.lang.Number n) {
+ if (n instanceof java.lang.Long) return hashFromLong((java.lang.Long)n);
+ else if (n instanceof java.lang.Double) return hashFromDouble((java.lang.Double)n);
+ else if (n instanceof java.lang.Float) return hashFromFloat((java.lang.Float)n);
+ else return n.hashCode();
+ }
+ public static int hashFromObject(Object a) {
+ if (a instanceof Number) return hashFromNumber((Number)a);
+ else return a.hashCode();
+ }
+
+/* OPERATORS ... OPERATORS ... OPERATORS ... OPERATORS ... OPERATORS ... OPERATORS ... OPERATORS ... OPERATORS */
+
+ /** arg1 + arg2 */
+ public static Object add(Object arg1, Object arg2) throws NoSuchMethodException {
+ int code1 = typeCode(arg1);
+ int code2 = typeCode(arg2);
+ int maxcode = (code1 < code2) ? code2 : code1;
+ if (maxcode <= INT) {
+ int val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).intValue();
+ int val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).intValue();
+ return boxToInteger(val1 + val2);
+ }
+ if (maxcode <= LONG) {
+ long val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).longValue();
+ long val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).longValue();
+ return boxToLong(val1 + val2);
+ }
+ if (maxcode <= FLOAT) {
+ float val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).floatValue();
+ float val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).floatValue();
+ return boxToFloat(val1 + val2);
+ }
+ if (maxcode <= DOUBLE) {
+ double val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).doubleValue();
+ double val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).doubleValue();
+ return boxToDouble(val1 + val2);
+ }
+ throw new NoSuchMethodException();
+ }
+
+ /** arg1 - arg2 */
+ public static Object subtract(Object arg1, Object arg2) throws NoSuchMethodException {
+ int code1 = typeCode(arg1);
+ int code2 = typeCode(arg2);
+ int maxcode = (code1 < code2) ? code2 : code1;
+ if (maxcode <= INT) {
+ int val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).intValue();
+ int val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).intValue();
+ return boxToInteger(val1 - val2);
+ }
+ if (maxcode <= LONG) {
+ long val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).longValue();
+ long val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).longValue();
+ return boxToLong(val1 - val2);
+ }
+ if (maxcode <= FLOAT) {
+ float val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).floatValue();
+ float val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).floatValue();
+ return boxToFloat(val1 - val2);
+ }
+ if (maxcode <= DOUBLE) {
+ double val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).doubleValue();
+ double val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).doubleValue();
+ return boxToDouble(val1 - val2);
+ }
+ throw new NoSuchMethodException();
+ }
+
+ /** arg1 * arg2 */
+ public static Object multiply(Object arg1, Object arg2) throws NoSuchMethodException {
+ int code1 = typeCode(arg1);
+ int code2 = typeCode(arg2);
+ int maxcode = (code1 < code2) ? code2 : code1;
+ if (maxcode <= INT) {
+ int val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).intValue();
+ int val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).intValue();
+ return boxToInteger(val1 * val2);
+ }
+ if (maxcode <= LONG) {
+ long val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).longValue();
+ long val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).longValue();
+ return boxToLong(val1 * val2);
+ }
+ if (maxcode <= FLOAT) {
+ float val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).floatValue();
+ float val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).floatValue();
+ return boxToFloat(val1 * val2);
+ }
+ if (maxcode <= DOUBLE) {
+ double val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).doubleValue();
+ double val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).doubleValue();
+ return boxToDouble(val1 * val2);
+ }
+ throw new NoSuchMethodException();
+ }
+
+ /** arg1 / arg2 */
+ public static Object divide(Object arg1, Object arg2) throws NoSuchMethodException {
+ int code1 = typeCode(arg1);
+ int code2 = typeCode(arg2);
+ int maxcode = (code1 < code2) ? code2 : code1;
+ if (maxcode <= INT) {
+ int val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).intValue();
+ int val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).intValue();
+ return boxToInteger(val1 / val2);
+ }
+ if (maxcode <= LONG) {
+ long val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).longValue();
+ long val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).longValue();
+ return boxToLong(val1 / val2);
+ }
+ if (maxcode <= FLOAT) {
+ float val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).floatValue();
+ float val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).floatValue();
+ return boxToFloat(val1 / val2);
+ }
+ if (maxcode <= DOUBLE) {
+ double val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).doubleValue();
+ double val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).doubleValue();
+ return boxToDouble(val1 / val2);
+ }
+ throw new NoSuchMethodException();
+ }
+
+ /** arg1 % arg2 */
+ public static Object takeModulo(Object arg1, Object arg2) throws NoSuchMethodException {
+ int code1 = typeCode(arg1);
+ int code2 = typeCode(arg2);
+ int maxcode = (code1 < code2) ? code2 : code1;
+ if (maxcode <= INT) {
+ int val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).intValue();
+ int val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).intValue();
+ return boxToInteger(val1 % val2);
+ }
+ if (maxcode <= LONG) {
+ long val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).longValue();
+ long val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).longValue();
+ return boxToLong(val1 % val2);
+ }
+ if (maxcode <= FLOAT) {
+ float val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).floatValue();
+ float val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).floatValue();
+ return boxToFloat(val1 % val2);
+ }
+ if (maxcode <= DOUBLE) {
+ double val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).doubleValue();
+ double val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).doubleValue();
+ return boxToDouble(val1 % val2);
+ }
+ throw new NoSuchMethodException();
+ }
+
+ /** arg1 >> arg2 */
+ public static Object shiftSignedRight(Object arg1, Object arg2) throws NoSuchMethodException {
+ int code1 = typeCode(arg1);
+ int code2 = typeCode(arg2);
+ if (code1 <= INT) {
+ int val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).intValue();
+ if (code2 <= INT) {
+ int val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).intValue();
+ return boxToInteger(val1 >> val2);
+ }
+ if (code2 <= LONG) {
+ long val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).longValue();
+ return boxToInteger(val1 >> val2);
+ }
+ }
+ if (code1 <= LONG) {
+ long val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).longValue();
+ if (code2 <= INT) {
+ int val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).intValue();
+ return boxToLong(val1 >> val2);
+ }
+ if (code2 <= LONG) {
+ long val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).longValue();
+ return boxToLong(val1 >> val2);
+ }
+ }
+ throw new NoSuchMethodException();
+ }
+
+ /** arg1 << arg2 */
+ public static Object shiftSignedLeft(Object arg1, Object arg2) throws NoSuchMethodException {
+ int code1 = typeCode(arg1);
+ int code2 = typeCode(arg2);
+ if (code1 <= INT) {
+ int val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).intValue();
+ if (code2 <= INT) {
+ int val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).intValue();
+ return boxToInteger(val1 << val2);
+ }
+ if (code2 <= LONG) {
+ long val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).longValue();
+ return boxToInteger(val1 << val2);
+ }
+ }
+ if (code1 <= LONG) {
+ long val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).longValue();
+ if (code2 <= INT) {
+ int val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).intValue();
+ return boxToLong(val1 << val2);
+ }
+ if (code2 <= LONG) {
+ long val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).longValue();
+ return boxToLong(val1 << val2);
+ }
+ }
+ throw new NoSuchMethodException();
+ }
+
+ /** arg1 >>> arg2 */
+ public static Object shiftLogicalRight(Object arg1, Object arg2) throws NoSuchMethodException {
+ int code1 = typeCode(arg1);
+ int code2 = typeCode(arg2);
+ if (code1 <= INT) {
+ int val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).intValue();
+ if (code2 <= INT) {
+ int val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).intValue();
+ return boxToInteger(val1 >>> val2);
+ }
+ if (code2 <= LONG) {
+ long val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).longValue();
+ return boxToInteger(val1 >>> val2);
+ }
+ }
+ if (code1 <= LONG) {
+ long val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).longValue();
+ if (code2 <= INT) {
+ int val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).intValue();
+ return boxToLong(val1 >>> val2);
+ }
+ if (code2 <= LONG) {
+ long val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).longValue();
+ return boxToLong(val1 >>> val2);
+ }
+ }
+ throw new NoSuchMethodException();
+ }
+
+ /** -arg */
+ public static Object negate(Object arg) throws NoSuchMethodException {
+ int code = typeCode(arg);
+ if (code <= INT) {
+ int val = (code == CHAR) ? ((java.lang.Character) arg).charValue() : ((java.lang.Number) arg).intValue();
+ return boxToInteger(-val);
+ }
+ if (code <= LONG) {
+ long val = (code == CHAR) ? ((java.lang.Character) arg).charValue() : ((java.lang.Number) arg).longValue();
+ return boxToLong(-val);
+ }
+ if (code <= FLOAT) {
+ float val = (code == CHAR) ? ((java.lang.Character) arg).charValue() : ((java.lang.Number) arg).floatValue();
+ return boxToFloat(-val);
+ }
+ if (code <= DOUBLE) {
+ double val = (code == CHAR) ? ((java.lang.Character) arg).charValue() : ((java.lang.Number) arg).doubleValue();
+ return boxToDouble(-val);
+ }
+ throw new NoSuchMethodException();
+ }
+
+ /** +arg */
+ public static Object positive(Object arg) throws NoSuchMethodException {
+ int code = typeCode(arg);
+ if (code <= INT) {
+ int val = (code == CHAR) ? ((java.lang.Character) arg).charValue() : ((java.lang.Number) arg).intValue();
+ return boxToInteger(+val);
+ }
+ if (code <= LONG) {
+ long val = (code == CHAR) ? ((java.lang.Character) arg).charValue() : ((java.lang.Number) arg).longValue();
+ return boxToLong(+val);
+ }
+ if (code <= FLOAT) {
+ float val = (code == CHAR) ? ((java.lang.Character) arg).charValue() : ((java.lang.Number) arg).floatValue();
+ return boxToFloat(+val);
+ }
+ if (code <= DOUBLE) {
+ double val = (code == CHAR) ? ((java.lang.Character) arg).charValue() : ((java.lang.Number) arg).doubleValue();
+ return boxToDouble(+val);
+ }
+ throw new NoSuchMethodException();
+ }
+
+ /** arg1 & arg2 */
+ public static Object takeAnd(Object arg1, Object arg2) throws NoSuchMethodException {
+ if ((arg1 instanceof Boolean) || (arg2 instanceof Boolean)) {
+ if (!((arg1 instanceof Boolean) && (arg2 instanceof Boolean))) {
+ throw new NoSuchMethodException();
+ }
+ return boxToBoolean(((java.lang.Boolean) arg1).booleanValue() & ((java.lang.Boolean) arg2).booleanValue());
+ }
+ int code1 = typeCode(arg1);
+ int code2 = typeCode(arg2);
+ int maxcode = (code1 < code2) ? code2 : code1;
+ if (maxcode <= INT) {
+ int val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).intValue();
+ int val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).intValue();
+ return boxToInteger(val1 & val2);
+ }
+ if (maxcode <= LONG) {
+ long val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).longValue();
+ long val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).longValue();
+ return boxToLong(val1 & val2);
+ }
+ throw new NoSuchMethodException();
+ }
+
+ /** arg1 | arg2 */
+ public static Object takeOr(Object arg1, Object arg2) throws NoSuchMethodException {
+ if ((arg1 instanceof Boolean) || (arg2 instanceof Boolean)) {
+ if (!((arg1 instanceof Boolean) && (arg2 instanceof Boolean))) {
+ throw new NoSuchMethodException();
+ }
+ return boxToBoolean(((java.lang.Boolean) arg1).booleanValue() | ((java.lang.Boolean) arg2).booleanValue());
+ }
+ int code1 = typeCode(arg1);
+ int code2 = typeCode(arg2);
+ int maxcode = (code1 < code2) ? code2 : code1;
+ if (maxcode <= INT) {
+ int val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).intValue();
+ int val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).intValue();
+ return boxToInteger(val1 | val2);
+ }
+ if (maxcode <= LONG) {
+ long val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).longValue();
+ long val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).longValue();
+ return boxToLong(val1 | val2);
+ }
+ throw new NoSuchMethodException();
+ }
+
+ /** arg1 ^ arg2 */
+ public static Object takeXor(Object arg1, Object arg2) throws NoSuchMethodException {
+ if ((arg1 instanceof Boolean) || (arg2 instanceof Boolean)) {
+ if (!((arg1 instanceof Boolean) && (arg2 instanceof Boolean))) {
+ throw new NoSuchMethodException();
+ }
+ return boxToBoolean(((java.lang.Boolean) arg1).booleanValue() ^ ((java.lang.Boolean) arg2).booleanValue());
+ }
+ int code1 = typeCode(arg1);
+ int code2 = typeCode(arg2);
+ int maxcode = (code1 < code2) ? code2 : code1;
+ if (maxcode <= INT) {
+ int val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).intValue();
+ int val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).intValue();
+ return boxToInteger(val1 ^ val2);
+ }
+ if (maxcode <= LONG) {
+ long val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).longValue();
+ long val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).longValue();
+ return boxToLong(val1 ^ val2);
+ }
+ throw new NoSuchMethodException();
+ }
+
+ /** arg1 && arg2 */
+ public static Object takeConditionalAnd(Object arg1, Object arg2) throws NoSuchMethodException {
+ if ((arg1 instanceof Boolean) && (arg2 instanceof Boolean)) {
+ return boxToBoolean(((java.lang.Boolean) arg1).booleanValue() && ((java.lang.Boolean) arg2).booleanValue());
+ }
+ throw new NoSuchMethodException();
+ }
+
+ /** arg1 || arg2 */
+ public static Object takeConditionalOr(Object arg1, Object arg2) throws NoSuchMethodException {
+ if ((arg1 instanceof Boolean) && (arg2 instanceof Boolean)) {
+ return boxToBoolean(((java.lang.Boolean) arg1).booleanValue() || ((java.lang.Boolean) arg2).booleanValue());
+ }
+ throw new NoSuchMethodException();
+ }
+
+ /** ~arg */
+ public static Object complement(Object arg) throws NoSuchMethodException {
+ int code = typeCode(arg);
+ if (code <= INT) {
+ int val = (code == CHAR) ? ((java.lang.Character) arg).charValue() : ((java.lang.Number) arg).intValue();
+ return boxToInteger(~val);
+ }
+ if (code <= LONG) {
+ long val = (code == CHAR) ? ((java.lang.Character) arg).charValue() : ((java.lang.Number) arg).longValue();
+ return boxToLong(~val);
+ }
+ throw new NoSuchMethodException();
+ }
+
+ /** !arg */
+ public static Object takeNot(Object arg) throws NoSuchMethodException {
+ if (arg instanceof Boolean) {
+ return boxToBoolean(!((java.lang.Boolean) arg).booleanValue());
+ }
+ throw new NoSuchMethodException();
+ }
+
+ public static Object testEqual(Object arg1, Object arg2) throws NoSuchMethodException {
+ return boxToBoolean(arg1 == arg2);
+ }
+
+ public static Object testNotEqual(Object arg1, Object arg2) throws NoSuchMethodException {
+ return boxToBoolean(arg1 != arg2);
+ }
+
+ public static Object testLessThan(Object arg1, Object arg2) throws NoSuchMethodException {
+ int code1 = typeCode(arg1);
+ int code2 = typeCode(arg2);
+ int maxcode = (code1 < code2) ? code2 : code1;
+ if (maxcode <= INT) {
+ int val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).intValue();
+ int val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).intValue();
+ return boxToBoolean(val1 < val2);
+ }
+ if (maxcode <= LONG) {
+ long val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).longValue();
+ long val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).longValue();
+ return boxToBoolean(val1 < val2);
+ }
+ if (maxcode <= FLOAT) {
+ float val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).floatValue();
+ float val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).floatValue();
+ return boxToBoolean(val1 < val2);
+ }
+ if (maxcode <= DOUBLE) {
+ double val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).doubleValue();
+ double val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).doubleValue();
+ return boxToBoolean(val1 < val2);
+ }
+ throw new NoSuchMethodException();
+ }
+
+ public static Object testLessOrEqualThan(Object arg1, Object arg2) throws NoSuchMethodException {
+ int code1 = typeCode(arg1);
+ int code2 = typeCode(arg2);
+ int maxcode = (code1 < code2) ? code2 : code1;
+ if (maxcode <= INT) {
+ int val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).intValue();
+ int val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).intValue();
+ return boxToBoolean(val1 <= val2);
+ }
+ if (maxcode <= LONG) {
+ long val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).longValue();
+ long val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).longValue();
+ return boxToBoolean(val1 <= val2);
+ }
+ if (maxcode <= FLOAT) {
+ float val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).floatValue();
+ float val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).floatValue();
+ return boxToBoolean(val1 <= val2);
+ }
+ if (maxcode <= DOUBLE) {
+ double val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).doubleValue();
+ double val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).doubleValue();
+ return boxToBoolean(val1 <= val2);
+ }
+ throw new NoSuchMethodException();
+ }
+
+ public static Object testGreaterOrEqualThan(Object arg1, Object arg2) throws NoSuchMethodException {
+ int code1 = typeCode(arg1);
+ int code2 = typeCode(arg2);
+ int maxcode = (code1 < code2) ? code2 : code1;
+ if (maxcode <= INT) {
+ int val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).intValue();
+ int val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).intValue();
+ return boxToBoolean(val1 >= val2);
+ }
+ if (maxcode <= LONG) {
+ long val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).longValue();
+ long val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).longValue();
+ return boxToBoolean(val1 >= val2);
+ }
+ if (maxcode <= FLOAT) {
+ float val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).floatValue();
+ float val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).floatValue();
+ return boxToBoolean(val1 >= val2);
+ }
+ if (maxcode <= DOUBLE) {
+ double val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).doubleValue();
+ double val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).doubleValue();
+ return boxToBoolean(val1 >= val2);
+ }
+ throw new NoSuchMethodException();
+ }
+
+ public static Object testGreaterThan(Object arg1, Object arg2) throws NoSuchMethodException {
+ int code1 = typeCode(arg1);
+ int code2 = typeCode(arg2);
+ int maxcode = (code1 < code2) ? code2 : code1;
+ if (maxcode <= INT) {
+ int val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).intValue();
+ int val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).intValue();
+ return boxToBoolean(val1 > val2);
+ }
+ if (maxcode <= LONG) {
+ long val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).longValue();
+ long val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).longValue();
+ return boxToBoolean(val1 > val2);
+ }
+ if (maxcode <= FLOAT) {
+ float val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).floatValue();
+ float val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).floatValue();
+ return boxToBoolean(val1 > val2);
+ }
+ if (maxcode <= DOUBLE) {
+ double val1 = (code1 == CHAR) ? ((java.lang.Character) arg1).charValue() : ((java.lang.Number) arg1).doubleValue();
+ double val2 = (code2 == CHAR) ? ((java.lang.Character) arg2).charValue() : ((java.lang.Number) arg2).doubleValue();
+ return boxToBoolean(val1 > val2);
+ }
+ throw new NoSuchMethodException();
+ }
+
+ /** arg.toChar */
+ public static java.lang.Character toCharacter(Object arg) throws NoSuchMethodException {
+ if (arg instanceof java.lang.Integer) return boxToCharacter((char)unboxToInt(arg));
+ if (arg instanceof java.lang.Short) return boxToCharacter((char)unboxToShort(arg));
+ if (arg instanceof java.lang.Character) return (java.lang.Character)arg;
+ if (arg instanceof java.lang.Long) return boxToCharacter((char)unboxToLong(arg));
+ if (arg instanceof java.lang.Byte) return boxToCharacter((char)unboxToByte(arg));
+ if (arg instanceof java.lang.Float) return boxToCharacter((char)unboxToFloat(arg));
+ if (arg instanceof java.lang.Double) return boxToCharacter((char)unboxToDouble(arg));
+ throw new NoSuchMethodException();
+ }
+
+ /** arg.toByte */
+ public static java.lang.Byte toByte(Object arg) throws NoSuchMethodException {
+ if (arg instanceof java.lang.Integer) return boxToByte((byte)unboxToInt(arg));
+ if (arg instanceof java.lang.Character) return boxToByte((byte)unboxToChar(arg));
+ if (arg instanceof java.lang.Byte) return (java.lang.Byte)arg;
+ if (arg instanceof java.lang.Long) return boxToByte((byte)unboxToLong(arg));
+ if (arg instanceof java.lang.Short) return boxToByte((byte)unboxToShort(arg));
+ if (arg instanceof java.lang.Float) return boxToByte((byte)unboxToFloat(arg));
+ if (arg instanceof java.lang.Double) return boxToByte((byte)unboxToDouble(arg));
+ throw new NoSuchMethodException();
+ }
+
+ /** arg.toShort */
+ public static java.lang.Short toShort(Object arg) throws NoSuchMethodException {
+ if (arg instanceof java.lang.Integer) return boxToShort((short)unboxToInt(arg));
+ if (arg instanceof java.lang.Long) return boxToShort((short)unboxToLong(arg));
+ if (arg instanceof java.lang.Character) return boxToShort((short)unboxToChar(arg));
+ if (arg instanceof java.lang.Byte) return boxToShort((short)unboxToByte(arg));
+ if (arg instanceof java.lang.Short) return (java.lang.Short)arg;
+ if (arg instanceof java.lang.Float) return boxToShort((short)unboxToFloat(arg));
+ if (arg instanceof java.lang.Double) return boxToShort((short)unboxToDouble(arg));
+ throw new NoSuchMethodException();
+ }
+
+ /** arg.toInt */
+ public static java.lang.Integer toInteger(Object arg) throws NoSuchMethodException {
+ if (arg instanceof java.lang.Integer) return (java.lang.Integer)arg;
+ if (arg instanceof java.lang.Long) return boxToInteger((int)unboxToLong(arg));
+ if (arg instanceof java.lang.Double) return boxToInteger((int)unboxToDouble(arg));
+ if (arg instanceof java.lang.Float) return boxToInteger((int)unboxToFloat(arg));
+ if (arg instanceof java.lang.Character) return boxToInteger((int)unboxToChar(arg));
+ if (arg instanceof java.lang.Byte) return boxToInteger((int)unboxToByte(arg));
+ if (arg instanceof java.lang.Short) return boxToInteger((int)unboxToShort(arg));
+ throw new NoSuchMethodException();
+ }
+
+ /** arg.toLong */
+ public static java.lang.Long toLong(Object arg) throws NoSuchMethodException {
+ if (arg instanceof java.lang.Integer) return boxToLong((long)unboxToInt(arg));
+ if (arg instanceof java.lang.Double) return boxToLong((long)unboxToDouble(arg));
+ if (arg instanceof java.lang.Float) return boxToLong((long)unboxToFloat(arg));
+ if (arg instanceof java.lang.Long) return (java.lang.Long)arg;
+ if (arg instanceof java.lang.Character) return boxToLong((long)unboxToChar(arg));
+ if (arg instanceof java.lang.Byte) return boxToLong((long)unboxToByte(arg));
+ if (arg instanceof java.lang.Short) return boxToLong((long)unboxToShort(arg));
+ throw new NoSuchMethodException();
+ }
+
+ /** arg.toFloat */
+ public static java.lang.Float toFloat(Object arg) throws NoSuchMethodException {
+ if (arg instanceof java.lang.Integer) return boxToFloat((float)unboxToInt(arg));
+ if (arg instanceof java.lang.Long) return boxToFloat((float)unboxToLong(arg));
+ if (arg instanceof java.lang.Float) return (java.lang.Float)arg;
+ if (arg instanceof java.lang.Double) return boxToFloat((float)unboxToDouble(arg));
+ if (arg instanceof java.lang.Character) return boxToFloat((float)unboxToChar(arg));
+ if (arg instanceof java.lang.Byte) return boxToFloat((float)unboxToByte(arg));
+ if (arg instanceof java.lang.Short) return boxToFloat((float)unboxToShort(arg));
+ throw new NoSuchMethodException();
+ }
+
+ /** arg.toDouble */
+ public static java.lang.Double toDouble(Object arg) throws NoSuchMethodException {
+ if (arg instanceof java.lang.Integer) return boxToDouble((double)unboxToInt(arg));
+ if (arg instanceof java.lang.Float) return boxToDouble((double)unboxToFloat(arg));
+ if (arg instanceof java.lang.Double) return (java.lang.Double)arg;
+ if (arg instanceof java.lang.Long) return boxToDouble((double)unboxToLong(arg));
+ if (arg instanceof java.lang.Character) return boxToDouble((double)unboxToChar(arg));
+ if (arg instanceof java.lang.Byte) return boxToDouble((double)unboxToByte(arg));
+ if (arg instanceof java.lang.Short) return boxToDouble((double)unboxToShort(arg));
+ throw new NoSuchMethodException();
+ }
+
+}
diff --git a/test/instrumented/library/scala/runtime/ScalaRunTime.scala b/test/instrumented/library/scala/runtime/ScalaRunTime.scala
new file mode 100644
index 0000000000..a8a74dd8ab
--- /dev/null
+++ b/test/instrumented/library/scala/runtime/ScalaRunTime.scala
@@ -0,0 +1,327 @@
+/* __ *\
+** ________ ___ / / ___ Scala API **
+** / __/ __// _ | / / / _ | (c) 2002-2011, LAMP/EPFL **
+** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ **
+** /____/\___/_/ |_/____/_/ | | **
+** |/ **
+\* */
+
+
+/* INSTRUMENTED VERSION */
+
+
+package scala.runtime
+
+import scala.reflect.ClassManifest
+import scala.collection.{ Seq, IndexedSeq, TraversableView }
+import scala.collection.mutable.WrappedArray
+import scala.collection.immutable.{ NumericRange, List, Stream, Nil, :: }
+import scala.collection.generic.{ Sorted }
+import scala.xml.{ Node, MetaData }
+import scala.util.control.ControlThrowable
+import java.lang.reflect.{ Modifier, Method => JMethod }
+
+/* The object <code>ScalaRunTime</code> provides ...
+ */
+object ScalaRunTime {
+ def isArray(x: AnyRef): Boolean = isArray(x, 1)
+ def isArray(x: Any, atLevel: Int): Boolean =
+ x != null && isArrayClass(x.asInstanceOf[AnyRef].getClass, atLevel)
+
+ private def isArrayClass(clazz: Class[_], atLevel: Int): Boolean =
+ clazz.isArray && (atLevel == 1 || isArrayClass(clazz.getComponentType, atLevel - 1))
+
+ def isValueClass(clazz: Class[_]) = clazz.isPrimitive()
+
+ var arrayApplyCount = 0
+ var arrayUpdateCount = 0
+
+ /** Retrieve generic array element */
+ def array_apply(xs: AnyRef, idx: Int): Any = {
+ arrayApplyCount += 1
+ xs match {
+ case x: Array[AnyRef] => x(idx).asInstanceOf[Any]
+ 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
+ }
+ }
+
+ /** update generic array element */
+ def array_update(xs: AnyRef, idx: Int, value: Any): Unit = {
+ arrayUpdateCount += 1
+ xs match {
+ case x: Array[AnyRef] => x(idx) = value.asInstanceOf[AnyRef]
+ case x: Array[Int] => x(idx) = value.asInstanceOf[Int]
+ case x: Array[Double] => x(idx) = value.asInstanceOf[Double]
+ case x: Array[Long] => x(idx) = value.asInstanceOf[Long]
+ case x: Array[Float] => x(idx) = value.asInstanceOf[Float]
+ case x: Array[Char] => x(idx) = value.asInstanceOf[Char]
+ case x: Array[Byte] => x(idx) = value.asInstanceOf[Byte]
+ case x: Array[Short] => x(idx) = value.asInstanceOf[Short]
+ case x: Array[Boolean] => x(idx) = value.asInstanceOf[Boolean]
+ case x: Array[Unit] => x(idx) = value.asInstanceOf[Unit]
+ case null => throw new NullPointerException
+ }
+ }
+
+ /** Get generic array length */
+ def array_length(xs: AnyRef): Int = xs match {
+ case x: Array[AnyRef] => x.length
+ case x: Array[Int] => x.length
+ case x: Array[Double] => x.length
+ case x: Array[Long] => x.length
+ case x: Array[Float] => x.length
+ case x: Array[Char] => x.length
+ case x: Array[Byte] => x.length
+ case x: Array[Short] => x.length
+ case x: Array[Boolean] => x.length
+ case x: Array[Unit] => x.length
+ case null => throw new NullPointerException
+ }
+
+ def array_clone(xs: AnyRef): AnyRef = xs match {
+ case x: Array[AnyRef] => ArrayRuntime.cloneArray(x)
+ case x: Array[Int] => ArrayRuntime.cloneArray(x)
+ case x: Array[Double] => ArrayRuntime.cloneArray(x)
+ case x: Array[Long] => ArrayRuntime.cloneArray(x)
+ case x: Array[Float] => ArrayRuntime.cloneArray(x)
+ case x: Array[Char] => ArrayRuntime.cloneArray(x)
+ case x: Array[Byte] => ArrayRuntime.cloneArray(x)
+ case x: Array[Short] => ArrayRuntime.cloneArray(x)
+ case x: Array[Boolean] => ArrayRuntime.cloneArray(x)
+ case x: Array[Unit] => x
+ case null => throw new NullPointerException
+ }
+
+ /** Convert a numeric value array to an object array.
+ * Needed to deal with vararg arguments of primitive types that are passed
+ * to a generic Java vararg parameter T ...
+ */
+ def toObjectArray(src: AnyRef): Array[Object] = {
+ val length = array_length(src)
+ val dest = new Array[Object](length)
+ for (i <- 0 until length)
+ array_update(dest, i, array_apply(src, i))
+ dest
+ }
+
+ def toArray[T](xs: collection.Seq[T]) = {
+ val arr = new Array[AnyRef](xs.length)
+ var i = 0
+ for (x <- xs) {
+ arr(i) = x.asInstanceOf[AnyRef]
+ i += 1
+ }
+ arr
+ }
+
+ // Java bug: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4071957
+ // More background at ticket #2318.
+ def ensureAccessible(m: JMethod): JMethod = {
+ if (!m.isAccessible) {
+ try m setAccessible true
+ catch { case _: SecurityException => () }
+ }
+ m
+ }
+
+ def checkInitialized[T <: AnyRef](x: T): T =
+ if (x == null) throw new UninitializedError else x
+
+ abstract class Try[+A] {
+ def Catch[B >: A](handler: PartialFunction[Throwable, B]): B
+ def Finally(fin: => Unit): A
+ }
+
+ def Try[A](block: => A): Try[A] = new Try[A] with Runnable {
+ private var result: A = _
+ private var exception: Throwable =
+ try { run() ; null }
+ catch {
+ case e: ControlThrowable => throw e // don't catch non-local returns etc
+ case e: Throwable => e
+ }
+
+ def run() { result = block }
+
+ def Catch[B >: A](handler: PartialFunction[Throwable, B]): B =
+ if (exception == null) result
+ else if (handler isDefinedAt exception) handler(exception)
+ else throw exception
+
+ def Finally(fin: => Unit): A = {
+ fin
+
+ if (exception == null) result
+ else throw exception
+ }
+ }
+
+ def _toString(x: Product): String =
+ x.productIterator.mkString(x.productPrefix + "(", ",", ")")
+
+ def _hashCode(x: Product): Int = {
+ import scala.util.MurmurHash._
+ val arr = x.productArity
+ var h = startHash(arr)
+ var c = startMagicA
+ var k = startMagicB
+ var i = 0
+ while (i < arr) {
+ val elem = x.productElement(i)
+ h = extendHash(h, if (elem == null) 0 else elem.##, c, k)
+ c = nextMagicA(c)
+ k = nextMagicB(k)
+ i += 1
+ }
+ finalizeHash(h)
+ }
+
+ /** Fast path equality method for inlining; used when -optimise is set.
+ */
+ @inline def inlinedEquals(x: Object, y: Object): Boolean =
+ if (x eq y) true
+ else if (x eq null) false
+ else if (x.isInstanceOf[java.lang.Number]) BoxesRunTime.equalsNumObject(x.asInstanceOf[java.lang.Number], y)
+ else if (x.isInstanceOf[java.lang.Character]) BoxesRunTime.equalsCharObject(x.asInstanceOf[java.lang.Character], y)
+ else x.equals(y)
+
+ def _equals(x: Product, y: Any): Boolean = y match {
+ case y: Product if x.productArity == y.productArity => x.productIterator sameElements y.productIterator
+ case _ => false
+ }
+
+ // hashcode -----------------------------------------------------------
+ //
+ // Note that these are the implementations called by ##, so they
+ // must not call ## themselves.
+
+ @inline def hash(x: Any): Int =
+ if (x.isInstanceOf[java.lang.Number]) BoxesRunTime.hashFromNumber(x.asInstanceOf[java.lang.Number])
+ else x.hashCode
+
+ @inline def hash(dv: Double): Int = {
+ val iv = dv.toInt
+ if (iv == dv) return iv
+
+ val lv = dv.toLong
+ if (lv == dv) return lv.hashCode
+
+ val fv = dv.toFloat
+ if (fv == dv) fv.hashCode else dv.hashCode
+ }
+ @inline def hash(fv: Float): Int = {
+ val iv = fv.toInt
+ if (iv == fv) return iv
+
+ val lv = fv.toLong
+ if (lv == fv) return lv.hashCode
+ else fv.hashCode
+ }
+ @inline def hash(lv: Long): Int = {
+ val iv = lv.toInt
+ if (iv == lv) iv else lv.hashCode
+ }
+ @inline def hash(x: Int): Int = x
+ @inline def hash(x: Short): Int = x.toInt
+ @inline def hash(x: Byte): Int = x.toInt
+ @inline def hash(x: Char): Int = x.toInt
+ @inline def hash(x: Boolean): Int = x.hashCode
+ @inline def hash(x: Unit): Int = 0
+
+ @inline def hash(x: Number): Int = runtime.BoxesRunTime.hashFromNumber(x)
+
+ /** XXX Why is there one boxed implementation in here? It would seem
+ * we should have all the numbers or none of them.
+ */
+ @inline def hash(x: java.lang.Long): Int = {
+ val iv = x.intValue
+ if (iv == x.longValue) iv else x.hashCode
+ }
+
+ /** A helper method for constructing case class equality methods,
+ * because existential types get in the way of a clean outcome and
+ * it's performing a series of Any/Any equals comparisons anyway.
+ * See ticket #2867 for specifics.
+ */
+ def sameElements(xs1: collection.Seq[Any], xs2: collection.Seq[Any]) = xs1 sameElements xs2
+
+ /** Given any Scala value, convert it to a String.
+ *
+ * The primary motivation for this method is to provide a means for
+ * correctly obtaining a String representation of a value, while
+ * avoiding the pitfalls of naïvely calling toString on said value.
+ * In particular, it addresses the fact that (a) toString cannot be
+ * called on null and (b) depending on the apparent type of an
+ * array, toString may or may not print it in a human-readable form.
+ *
+ * @param arg the value to stringify
+ * @return a string representation of <code>arg</code>
+ *
+ */
+ def stringOf(arg: Any): String = stringOf(arg, scala.Int.MaxValue)
+ def stringOf(arg: Any, maxElements: Int): String = {
+ def isScalaClass(x: AnyRef) =
+ Option(x.getClass.getPackage) exists (_.getName startsWith "scala.")
+
+ def isTuple(x: AnyRef) =
+ x.getClass.getName matches """^scala\.Tuple(\d+).*"""
+
+ // When doing our own iteration is dangerous
+ def useOwnToString(x: Any) = x match {
+ // Node extends NodeSeq extends Seq[Node] and MetaData extends Iterable[MetaData]
+ case _: Node | _: MetaData => true
+ // Range/NumericRange have a custom toString to avoid walking a gazillion elements
+ case _: Range | _: NumericRange[_] => true
+ // Sorted collections to the wrong thing (for us) on iteration - ticket #3493
+ case _: Sorted[_, _] => true
+ // StringBuilder(a, b, c) is not so attractive
+ case _: StringBuilder => true
+ // Don't want to evaluate any elements in a view
+ case _: TraversableView[_, _] => true
+ // Don't want to a) traverse infinity or b) be overly helpful with peoples' custom
+ // collections which may have useful toString methods - ticket #3710
+ case x: Traversable[_] => !x.hasDefiniteSize || !isScalaClass(x)
+ // Otherwise, nothing could possibly go wrong
+ case _ => false
+ }
+
+ // A variation on inner for maps so they print -> instead of bare tuples
+ def mapInner(arg: Any): String = arg match {
+ case (k, v) => inner(k) + " -> " + inner(v)
+ case _ => inner(arg)
+ }
+ // The recursively applied attempt to prettify Array printing
+ def inner(arg: Any): String = arg match {
+ case null => "null"
+ case "" => "\"\""
+ case x: String => if (x.head.isWhitespace || x.last.isWhitespace) "\"" + x + "\"" else x
+ case x if useOwnToString(x) => x.toString
+ case x: AnyRef if isArray(x) => WrappedArray make x take maxElements map inner mkString ("Array(", ", ", ")")
+ case x: collection.Map[_, _] => x take maxElements map mapInner mkString (x.stringPrefix + "(", ", ", ")")
+ case x: Traversable[_] => x take maxElements map inner mkString (x.stringPrefix + "(", ", ", ")")
+ case x: Product1[_] if isTuple(x) => "(" + inner(x._1) + ",)" // that special trailing comma
+ case x: Product if isTuple(x) => x.productIterator map inner mkString ("(", ",", ")")
+ case x => x toString
+ }
+
+ // The try/catch is defense against iterables which aren't actually designed
+ // to be iterated, such as some scala.tools.nsc.io.AbstractFile derived classes.
+ val s =
+ try inner(arg)
+ catch {
+ case _: StackOverflowError | _: UnsupportedOperationException => arg.toString
+ }
+
+ val nl = if (s contains "\n") "\n" else ""
+ nl + s + "\n"
+ }
+}
diff --git a/test/instrumented/mkinstrumented b/test/instrumented/mkinstrumented
new file mode 100755
index 0000000000..a87e8cb94f
--- /dev/null
+++ b/test/instrumented/mkinstrumented
@@ -0,0 +1,46 @@
+#
+#
+# Used to compile a jar with instrumented versions of certain classes.
+#
+
+
+
+
+if [ $# -ne 1 ]
+then
+ echo "Must provide build dir ('target' or 'build')."
+ exit 1
+fi
+
+
+BUILDDIR=$1
+TOPDIR=../..
+SCALAC=$TOPDIR/$BUILDDIR/pack/bin/scalac
+SRC_DIR=library/
+SCALALIB=$TOPDIR/$BUILDDIR/pack/lib/scala-library.jar
+CLASSDIR=classes/
+ARTIFACT=instrumented.jar
+
+
+# compile it
+rm -rf $CLASSDIR
+mkdir $CLASSDIR
+JSOURCES=`find $SRC_DIR -name "*.java" -print`
+SOURCES=`find $SRC_DIR \( -name "*.scala" -o -name "*.java" \) -print`
+echo $SOURCES
+$SCALAC -d $CLASSDIR $SOURCES
+javac -cp $SCALALIB -d $CLASSDIR $JSOURCES
+
+
+# jar it up
+rm $ARTIFACT
+cd $CLASSDIR
+jar cf $ARTIFACT .
+mv $ARTIFACT ../
+cd ..
+
+
+
+
+
+
diff --git a/test/partest b/test/partest
index e1d6356580..ebf6891fdc 100755
--- a/test/partest
+++ b/test/partest
@@ -3,7 +3,7 @@
##############################################################################
# Scala test runner 2.8.0
##############################################################################
-# (c) 2002-2009 LAMP/EPFL
+# (c) 2002-2011 LAMP/EPFL
#
# This is free software; see the distribution for copying conditions.
# There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
@@ -74,8 +74,22 @@ if $cygwin; then
EXT_CLASSPATH=`cygpath --path --$format "$EXT_CLASSPATH"`
fi
-# Reminder: substitution ${JAVA_OPTS:=-Xmx256M -Xms16M} DO NOT work on Solaris
-[ -n "$JAVA_OPTS" ] || JAVA_OPTS="-Xmx512M -Xms16M"
+# last arg wins, so if JAVA_OPTS already contains -Xmx or -Xms the
+# supplied argument will be used.
+JAVA_OPTS="-Xmx1024M -Xms64M $JAVA_OPTS"
[ -n "$SCALAC_OPTS" ] || SCALAC_OPTS="-deprecation"
-${JAVACMD:=java} $JAVA_OPTS -cp "$EXT_CLASSPATH" -Dpartest.debug="${PARTEST_DEBUG}" -Dscala.home="${SCALA_HOME}" -Dscalatest.javacmd="${JAVACMD}" -Dscalatest.java_opts="${JAVA_OPTS}" -Dscalatest.scalac_opts="${SCALAC_OPTS}" -Dscalatest.javac_cmd="${JAVA_HOME}/bin/javac" scala.tools.partest.nest.NestRunner "$@"
+partestDebugStr=""
+if [ ! -z "${PARTEST_DEBUG}" ] ; then
+ partestDebugStr="-Dpartest.debug=${PARTEST_DEBUG}"
+fi
+
+${JAVACMD:=java} \
+ $JAVA_OPTS -cp "$EXT_CLASSPATH" \
+ ${partestDebugStr} \
+ -Dscala.home="${SCALA_HOME}" \
+ -Dpartest.javacmd="${JAVACMD}" \
+ -Dpartest.java_opts="${JAVA_OPTS}" \
+ -Dpartest.scalac_opts="${SCALAC_OPTS}" \
+ -Dpartest.javac_cmd="${JAVA_HOME}/bin/javac" \
+ scala.tools.partest.nest.NestRunner "$@"
diff --git a/test/partest.bat b/test/partest.bat
index aea95fca3e..0b3f5fbf33 100755
--- a/test/partest.bat
+++ b/test/partest.bat
@@ -1,9 +1,9 @@
@echo off
rem ##########################################################################
-rem # Scala code runner 2.7.0-final
+rem # Scala code runner 2.9.1.final
rem ##########################################################################
-rem # (c) 2002-2009 LAMP/EPFL
+rem # (c) 2002-2011 LAMP/EPFL
rem #
rem # This is free software; see the distribution for copying conditions.
rem # There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
@@ -19,7 +19,7 @@ if "%OS%"=="Windows_NT" (
call :set_home
set _ARGS=%*
) else (
- set _SCALA_HOME=%SCALA_HOME%
+ set _SCALA_HOME="%SCALA_HOME%"
rem The following line tests SCALA_HOME instead of _SCALA_HOME, because
rem the above change to _SCALA_HOME is not visible within this block.
if "%SCALA_HOME%"=="" goto error1
@@ -30,9 +30,13 @@ rem We use the value of the JAVACMD environment variable if defined
set _JAVACMD=%JAVACMD%
if "%_JAVACMD%"=="" set _JAVACMD=java
+rem We use the value of the JAVACCMD environment variable if defined
+set _JAVACCMD=%JAVACCMD%
+if "%_JAVACCMD%"=="" set _JAVACCMD=javac
+
rem We use the value of the JAVA_OPTS environment variable if defined
set _JAVA_OPTS=%JAVA_OPTS%
-if "%_JAVA_OPTS%"=="" set _JAVA_OPTS=-Xmx256M -Xms16M
+if "%_JAVA_OPTS%"=="" set _JAVA_OPTS=-Xmx1024M -Xms64M
rem We use the value of the SCALAC_OPTS environment variable if defined
set _SCALAC_OPTS=%SCALAC_OPTS%
@@ -53,7 +57,7 @@ if "%_EXTENSION_CLASSPATH%"=="" (
)
)
-set _PROPS=-Dscala.home="%_SCALA_HOME%" -Dscalatest.javacmd="%_JAVACMD%" -Dscalatest.java_options="%_JAVA_OPTS%" -Dscalatest.scalac_options="%_SCALAC_OPTS%" -Dscalatest.javac_cmd="%JAVA_HOME%\bin\javac"
+set _PROPS=-Dscala.home="%_SCALA_HOME%" -Dpartest.javacmd="%_JAVACMD%" -Dpartest.java_options="%_JAVA_OPTS%" -Dpartest.scalac_options="%_SCALAC_OPTS%" -Dpartest.javac_cmd="%_JAVACCMD%"
rem echo %_JAVACMD% %_JAVA_OPTS% %_PROPS% -cp "%_EXTENSION_CLASSPATH%" scala.tools.partest.nest.NestRunner %_ARGS%
%_JAVACMD% %_JAVA_OPTS% %_PROPS% -cp "%_EXTENSION_CLASSPATH%" scala.tools.partest.nest.NestRunner %_ARGS%
diff --git a/test/pending/buildmanager/t2443/BitSet.scala b/test/pending/buildmanager/t2443/BitSet.scala
new file mode 100644
index 0000000000..8d7c8dcd23
--- /dev/null
+++ b/test/pending/buildmanager/t2443/BitSet.scala
@@ -0,0 +1,2 @@
+import scala.collection.BitSet
+//class BitSet
diff --git a/test/pending/buildmanager/t2443/t2443.changes/BitSet2.scala b/test/pending/buildmanager/t2443/t2443.changes/BitSet2.scala
new file mode 100644
index 0000000000..27a5d4de9f
--- /dev/null
+++ b/test/pending/buildmanager/t2443/t2443.changes/BitSet2.scala
@@ -0,0 +1 @@
+import scala.collection.BitSet
diff --git a/test/pending/buildmanager/t2443/t2443.check b/test/pending/buildmanager/t2443/t2443.check
new file mode 100644
index 0000000000..dd88e1ceb9
--- /dev/null
+++ b/test/pending/buildmanager/t2443/t2443.check
@@ -0,0 +1,6 @@
+builder > BitSet.scala
+compiling Set(BitSet.scala)
+builder > BitSet.scala
+Changes: Map(class BitSet -> List(Removed(Class(BitSet))))
+
+
diff --git a/test/pending/buildmanager/t2443/t2443.test b/test/pending/buildmanager/t2443/t2443.test
new file mode 100644
index 0000000000..a1d61ff5a3
--- /dev/null
+++ b/test/pending/buildmanager/t2443/t2443.test
@@ -0,0 +1,3 @@
+>>compile BitSet.scala
+>>update BitSet.scala=>BitSet2.scala
+>>compile BitSet.scala
diff --git a/test/pending/continuations-pos/t3620.scala b/test/pending/continuations-pos/t3620.scala
new file mode 100644
index 0000000000..8496ae2858
--- /dev/null
+++ b/test/pending/continuations-pos/t3620.scala
@@ -0,0 +1,73 @@
+import scala.collection.mutable.HashMap
+import scala.util.continuations._
+
+object Test extends Application {
+
+ class Store[K,V] {
+
+ trait Waiting {
+ def key: K
+ def inform(value: V): Unit
+ }
+
+ private val map = new HashMap[K, V]
+ private var waiting: List[Waiting] = Nil
+
+ def waitFor(k: K, f: (V => Unit)) {
+ map.get(k) match {
+ case Some(v) => f(v)
+ case None => {
+ val w = new Waiting {
+ def key = k
+ def inform(v: V) = f(v)
+ }
+ waiting = w :: waiting
+ }
+ }
+ }
+
+
+ def add(key: K, value: V) {
+ map(key) = value
+ val p = waiting.partition(_.key == key)
+ waiting = p._2
+ p._1.foreach(_.inform(value))
+ }
+
+ def required(key: K) = {
+ shift {
+ c: (V => Unit) => {
+ waitFor(key, c)
+ }
+ }
+ }
+
+ def option(key: Option[K]) = {
+ shift {
+ c: (Option[V] => Unit) => {
+ key match {
+ case Some(key) => waitFor(key, (v: V) => c(Some(v)))
+ case None => c(None)
+ }
+
+ }
+ }
+ }
+
+ }
+
+ val store = new Store[String, Int]
+
+ def test(p: Option[String]): Unit = {
+ reset {
+ // uncommenting the following two lines makes the compiler happy!
+// val o = store.option(p)
+// println(o)
+ val i = store.option(p).getOrElse(1)
+ println(i)
+ }
+ }
+
+ test(Some("a"))
+
+}
diff --git a/test/pending/continuations-run/example0.scala b/test/pending/continuations-run/example0.scala
new file mode 100644
index 0000000000..de5ea54e9d
--- /dev/null
+++ b/test/pending/continuations-run/example0.scala
@@ -0,0 +1,9 @@
+// $Id$
+
+object Test {
+
+ def main(args: Array[String]): Any = {
+ examples.continuations.Test0.main(args)
+ }
+
+} \ No newline at end of file
diff --git a/test/pending/continuations-run/example1.scala b/test/pending/continuations-run/example1.scala
new file mode 100644
index 0000000000..e31d6af88c
--- /dev/null
+++ b/test/pending/continuations-run/example1.scala
@@ -0,0 +1,9 @@
+// $Id$
+
+object Test {
+
+ def main(args: Array[String]): Any = {
+ examples.continuations.Test1.main(args)
+ }
+
+} \ No newline at end of file
diff --git a/test/pending/continuations-run/example16.scala b/test/pending/continuations-run/example16.scala
new file mode 100644
index 0000000000..561f0ab0eb
--- /dev/null
+++ b/test/pending/continuations-run/example16.scala
@@ -0,0 +1,9 @@
+// $Id$
+
+object Test {
+
+ def main(args: Array[String]): Any = {
+ examples.continuations.Test16Printf.main(args)
+ }
+
+} \ No newline at end of file
diff --git a/test/pending/continuations-run/example2.scala b/test/pending/continuations-run/example2.scala
new file mode 100644
index 0000000000..730f7cc63e
--- /dev/null
+++ b/test/pending/continuations-run/example2.scala
@@ -0,0 +1,9 @@
+// $Id$
+
+object Test {
+
+ def main(args: Array[String]): Any = {
+ examples.continuations.Test2.main(args)
+ }
+
+} \ No newline at end of file
diff --git a/test/pending/continuations-run/example3.scala b/test/pending/continuations-run/example3.scala
new file mode 100644
index 0000000000..41cf1cce0c
--- /dev/null
+++ b/test/pending/continuations-run/example3.scala
@@ -0,0 +1,9 @@
+// $Id$
+
+object Test {
+
+ def main(args: Array[String]): Any = {
+ examples.continuations.Test3.main(args)
+ }
+
+} \ No newline at end of file
diff --git a/test/pending/continuations-run/example4.scala b/test/pending/continuations-run/example4.scala
new file mode 100644
index 0000000000..adcc7aa90e
--- /dev/null
+++ b/test/pending/continuations-run/example4.scala
@@ -0,0 +1,9 @@
+// $Id$
+
+object Test {
+
+ def main(args: Array[String]): Any = {
+ examples.continuations.Test4.main(args)
+ }
+
+} \ No newline at end of file
diff --git a/test/pending/continuations-run/example5.scala b/test/pending/continuations-run/example5.scala
new file mode 100644
index 0000000000..241e8cd069
--- /dev/null
+++ b/test/pending/continuations-run/example5.scala
@@ -0,0 +1,9 @@
+// $Id$
+
+object Test {
+
+ def main(args: Array[String]): Any = {
+ examples.continuations.Test5.main(args)
+ }
+
+} \ No newline at end of file
diff --git a/test/pending/continuations-run/example6.scala b/test/pending/continuations-run/example6.scala
new file mode 100644
index 0000000000..00f84fcd6c
--- /dev/null
+++ b/test/pending/continuations-run/example6.scala
@@ -0,0 +1,9 @@
+// $Id$
+
+object Test {
+
+ def main(args: Array[String]): Any = {
+ examples.continuations.Test6.main(args)
+ }
+
+} \ No newline at end of file
diff --git a/test/pending/continuations-run/example7.scala b/test/pending/continuations-run/example7.scala
new file mode 100644
index 0000000000..64abc6d9a6
--- /dev/null
+++ b/test/pending/continuations-run/example7.scala
@@ -0,0 +1,9 @@
+// $Id$
+
+object Test {
+
+ def main(args: Array[String]): Any = {
+ examples.continuations.Test7.main(args)
+ }
+
+} \ No newline at end of file
diff --git a/test/pending/continuations-run/example8.scala b/test/pending/continuations-run/example8.scala
new file mode 100644
index 0000000000..a5f953d3fc
--- /dev/null
+++ b/test/pending/continuations-run/example8.scala
@@ -0,0 +1,9 @@
+// $Id$
+
+object Test {
+
+ def main(args: Array[String]): Any = {
+ examples.continuations.Test8.main(args)
+ }
+
+} \ No newline at end of file
diff --git a/test/pending/continuations-run/example9.scala b/test/pending/continuations-run/example9.scala
new file mode 100644
index 0000000000..09d792c427
--- /dev/null
+++ b/test/pending/continuations-run/example9.scala
@@ -0,0 +1,9 @@
+// $Id$
+
+object Test {
+
+ def main(args: Array[String]): Any = {
+ examples.continuations.Test9Monads.main(args)
+ }
+
+} \ No newline at end of file
diff --git a/test/pending/continuations-run/foreach.check b/test/pending/continuations-run/foreach.check
new file mode 100644
index 0000000000..9bab7a2eed
--- /dev/null
+++ b/test/pending/continuations-run/foreach.check
@@ -0,0 +1,4 @@
+1
+2
+3
+enough is enough \ No newline at end of file
diff --git a/test/pending/continuations-run/foreach.scala b/test/pending/continuations-run/foreach.scala
new file mode 100644
index 0000000000..76823e7604
--- /dev/null
+++ b/test/pending/continuations-run/foreach.scala
@@ -0,0 +1,33 @@
+// $Id$
+
+import scala.util.continuations._
+
+import scala.util.continuations.Loops._
+
+object Test {
+
+ def main(args: Array[String]): Any = {
+
+
+ reset {
+
+ val list = List(1,2,3,4,5)
+
+ for (x <- list.suspendable) {
+
+ shift { k: (Unit => Unit) =>
+ println(x)
+ if (x < 3)
+ k()
+ else
+ println("enough is enough")
+ }
+
+ }
+
+ }
+
+
+ }
+
+} \ No newline at end of file
diff --git a/test/pending/jvm/actor-executor4.check b/test/pending/jvm/actor-executor4.check
new file mode 100644
index 0000000000..da78f45836
--- /dev/null
+++ b/test/pending/jvm/actor-executor4.check
@@ -0,0 +1,21 @@
+Two: OK
+One: OK
+Two: OK
+One: OK
+Two: OK
+One: OK
+Two: OK
+One: OK
+Two: OK
+One: OK
+Two: OK
+One: OK
+Two: OK
+One: OK
+Two: OK
+One: OK
+Two: OK
+One: OK
+Two: OK
+One: OK
+One exited
diff --git a/test/pending/jvm/actor-executor4.scala b/test/pending/jvm/actor-executor4.scala
new file mode 100644
index 0000000000..a912d76094
--- /dev/null
+++ b/test/pending/jvm/actor-executor4.scala
@@ -0,0 +1,64 @@
+import scala.actors.{Actor, Exit}
+import scala.actors.scheduler.ExecutorScheduler
+import java.util.concurrent.Executors
+
+object One extends AdaptedActor {
+ def act() {
+ Two.start()
+ var i = 0
+ loopWhile (i < Test.NUM_MSG) {
+ i += 1
+ Two ! 'MsgForTwo
+ react {
+ case 'MsgForOne =>
+ if (i % (Test.NUM_MSG/10) == 0)
+ println("One: OK")
+ }
+ }
+ }
+}
+
+object Two extends AdaptedActor {
+ def act() {
+ var i = 0
+ loopWhile (i < Test.NUM_MSG) {
+ i += 1
+ react {
+ case 'MsgForTwo =>
+ if (i % (Test.NUM_MSG/10) == 0)
+ println("Two: OK")
+ One ! 'MsgForOne
+ }
+ }
+ }
+}
+
+trait AdaptedActor extends Actor {
+ override def scheduler =
+ Test.scheduler
+}
+
+object Test {
+ val NUM_MSG = 100000
+
+ val scheduler =
+ ExecutorScheduler(
+ Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()),
+ false)
+
+ def main(args: Array[String]) {
+ (new AdaptedActor {
+ def act() {
+ trapExit = true
+ link(One)
+ One.start()
+
+ receive {
+ case Exit(from, reason) =>
+ println("One exited")
+ Test.scheduler.shutdown()
+ }
+ }
+ }).start()
+ }
+}
diff --git a/test/pending/jvm/actorgc_leak.scala b/test/pending/jvm/actorgc_leak.scala
index 5e2b9d51e1..de3e04f1e8 100644
--- a/test/pending/jvm/actorgc_leak.scala
+++ b/test/pending/jvm/actorgc_leak.scala
@@ -14,7 +14,7 @@ object Test {
}
}
}
-
+
class FatActor extends Actor {
def act() {
fat = new Array[Int](fatness)
diff --git a/test/pending/jvm/annotations.scala b/test/pending/jvm/annotations.scala
deleted file mode 100644
index 98b82edad4..0000000000
--- a/test/pending/jvm/annotations.scala
+++ /dev/null
@@ -1,159 +0,0 @@
-object Test1 {
- class Foo {
- @remote
- def foo: Unit = ()
- }
- def run {
- val method = classOf[Foo].getMethod("foo", Array())
- method.getExceptionTypes foreach println
- }
-}
-
-object Test2 {
- import java.io.{BufferedReader,FileReader, IOException}
- class Reader(fname: String) {
- private val in = new BufferedReader(new FileReader(fname))
-
- @throws(classOf[IOException])
- def read() = in.read()
- }
- def run {
- val method = classOf[Reader].getMethod("read", Array())
- method.getExceptionTypes foreach println
- }
-}
-
-/* Java:
-public class Main {
- @Deprecated
- public void foo() {}
- public static void main(String[] args) throws Exception {
- Method method = Class.forName("test.Main").getMethod("foo", new Class[]{});
- Annotation annotation = method.getAnnotation(Deprecated.class);
- System.out.println(annotation); // @java.lang.Deprecated()
- }
-}
-*/
-object Test3 {
- import java.lang.Deprecated
- class Foo {
- @Deprecated
- def foo: Unit = ()
- }
- def run {
- val method = classOf[Foo].getMethod("foo", Array())
- val annotation = method.getAnnotation(classOf[Deprecated])
- println(annotation)
- }
-}
-
-/* Java:
-@Retention(value=RetentionPolicy.RUNTIME)
-@interface Source {
- public String url();
- public String mail();
-}
-@Source(url="http://scala.epfl.ch", mail="scala@lists.epfl.ch")
-class Foo {}
-public class Main {
- public static void main(String[] args) throws Exception {
- Class clazz = Class.forName("test.Foo");
- Annotation[] annotations = clazz.getAnnotations();
- for (int i = 0; i < annotations.length; i++)
- System.out.println(annotations[i]);
- // @test.Main$Source(url=http://scala-lang.org, mail=scala@lists.epfl.ch)
- }
-}
-*/
-object Test4 {
- import test.SourceAnnotation // defined in SourceAnnotation.java
- @SourceAnnotation{val value = "http://scala-lang.org",
- val mails = Array("scala@lists.epfl.ch", "scala-lounge@lists.epfl.ch")}
- class Foo1
- @SourceAnnotation("http://bloodsuckers.com") { val mails = Array("you@bloodsuckers.com") }
- class Foo2
- @SourceAnnotation("http://bloodsuckers.com")
- class Foo3
- class Foo4 {
- @SourceAnnotation("file:///dev/null")
- val x = 1
- }
- class Foo5 {
- @SourceAnnotation("file:///dev/zero")
- def bar: Int = 0
- }
- class Foo6 @SourceAnnotation("primary constructor")(s: String) {
- // to guarantee that primary constructor annotations
- // are not applied to secondary constructors
- def this() = this("")
- }
- class Foo7(s: String) {
- @SourceAnnotation("secondary constructor")
- def this() = this("")
- }
- class Foo8(@SourceAnnotation("constructor val") val n: Int) {}
- def run {
- import java.lang.annotation.Annotation
- import java.lang.reflect.AnnotatedElement
- def printSourceAnnotations(target: AnnotatedElement) {
- //print SourceAnnotation in a predefined way to insure
- // against difference in the JVMs (e.g. Sun's vs IBM's)
- def printSourceAnnotation(a: Annotation) {
- val ann = a.asInstanceOf[SourceAnnotation]
- println("@test.SourceAnnotation(mails=" + ann.mails.deepMkString("{", ",", "}") +
- ", value=" + ann.value + ")")
- }
- val anns = target.getAnnotations()
- anns foreach printSourceAnnotation
- if (anns.length > 0) {
- println(target)
- println
- }
- }
- printSourceAnnotations(classOf[Foo1])
- printSourceAnnotations(classOf[Foo2])
- printSourceAnnotations(classOf[Foo3])
- classOf[Foo4].getDeclaredFields foreach printSourceAnnotations
- classOf[Foo4].getDeclaredMethods foreach printSourceAnnotations
- classOf[Foo5].getDeclaredMethods foreach printSourceAnnotations
- classOf[Foo6].getDeclaredConstructors foreach printSourceAnnotations
- classOf[Foo7].getDeclaredConstructors foreach printSourceAnnotations
- classOf[Foo8].getDeclaredFields foreach printSourceAnnotations
- classOf[Foo8].getDeclaredMethods foreach printSourceAnnotations
- }
-}
-
-object Test5 {
- import scala.reflect.BeanProperty
- import java.lang.Integer
-
- class Count {
- // we use "Integer" instead of "Int" because of Java reflection
- @BeanProperty
- private var count: Integer = 0
-
- private val getter =
- getClass().getMethod("getCount", Array[java.lang.Class[T] forSome { type T }]())
- private val setter =
- getClass().getMethod("setCount", Array(classOf[Integer]))
-
- def get = getter.invoke(this, Array()).asInstanceOf[Integer].intValue
- def set(n: Int) = setter.invoke(this, Array(new Integer(n)))
- }
- def run {
- val count = new Count
- println(count.get)
- count.set(99)
- println(count.get)
- }
-}
-
-object Test {
- def main(args: Array[String]) {
- Test1.run
- Test2.run
- Test3.run // requires the use of -target:jvm-1.5
- Test4.run
- Test5.run
- }
-}
diff --git a/test/pending/jvm/backendBugUnapply.scala b/test/pending/jvm/backendBugUnapply.scala
deleted file mode 100644
index f8abfeb713..0000000000
--- a/test/pending/jvm/backendBugUnapply.scala
+++ /dev/null
@@ -1,9 +0,0 @@
-object Test { import scala.xml.{Node,HasKeyValue}
- def domatch(x:Node): Node = {
- val hasBar = new HasKeyValue("bar")
- x match {
- case Node("foo", hasBar(z), _*) => z
- case _ => null
- }
- }
-}
diff --git a/test/pending/jvm/cf-attributes.check b/test/pending/jvm/cf-attributes.check
new file mode 100644
index 0000000000..018febb81b
--- /dev/null
+++ b/test/pending/jvm/cf-attributes.check
@@ -0,0 +1,50 @@
+
+{{ anonymousFunctions$ }}
+
+{{ anonymousFunctions$bar$ }}
+ public final class anonymousFunctions$bar$$anonfun$4 of class anonymousFunctions$bar$
+anonymousClasses$$anon$1
+
+{{ anonymousClasses$ }}
+
+[[ anonymousFunctions$ ]]
+ InnerClass:
+ public final #66 of #90; //class anonymousFunctions$$anonfun$1 of class anonymousFunctions
+ public final #77; //class anonymousFunctions$$anonfun$2
+ public final #24; //class anonymousFunctions$$anonfun$3
+ public final #49; //class anonymousFunctions$$anonfun$foo$1
+
+
+[[ anonymousFunctions$bar$ ]]
+ InnerClass:
+ public final #28 of #9; //class anonymousFunctions$bar$$anonfun$4 of class anonymousFunctions$bar$
+ public final #52; //class anonymousFunctions$bar$$anonfun$5
+
+
+[[ anonymousClasses$ ]]
+ InnerClass:
+ public abstract #33= #30 of #32; //Foo=class anonymousClasses$Foo of class anonymousClasses
+ public final #25 of #32; //class anonymousClasses$$anon$1 of class anonymousClasses
+ public abstract #36= #35 of #32; //Foo$class=class anonymousClasses$Foo$class of class anonymousClasses
+
+
+[[ anonymousFunctions$$anonfun$3 ]]
+ InnerClass:
+ public final #8; //class anonymousFunctions$$anonfun$3
+
+
+[[ anonymousFunctions$$anonfun$foo$1 ]]
+ InnerClass:
+ public final #8; //class anonymousFunctions$$anonfun$foo$1
+
+
+[[ anonymousFunctions$bar$$anonfun$4 ]]
+ InnerClass:
+ public final #8 of #41; //class anonymousFunctions$bar$$anonfun$4 of class anonymousFunctions$bar$
+
+
+[[ anonymousClasses$$anon$1 ]]
+ InnerClass:
+ public abstract #46= #43 of #45; //Foo=class anonymousClasses$Foo of class anonymousClasses
+ public final #48 of #45; //class anonymousClasses$$anon$1 of class anonymousClasses
+
diff --git a/test/pending/jvm/cf-attributes.scala b/test/pending/jvm/cf-attributes.scala
new file mode 100644
index 0000000000..9e0e9d95de
--- /dev/null
+++ b/test/pending/jvm/cf-attributes.scala
@@ -0,0 +1,146 @@
+object Test extends Application {
+ InnerClassTest1
+ InnerClassTest2
+}
+
+object InnerClassTest1 extends Test1 {
+ printClass(anonymousFunctions.getClass)
+ printClass(anonymousFunctions.bar.getClass)
+ println(anonymousClasses.x) // see run/t1167.scala
+ printClass(anonymousClasses.getClass)
+}
+
+object InnerClassTest2 extends Test2 {
+ printClass(anonymousFunctions.getClass)
+ printClass(anonymousFunctions.bar.getClass)
+ printClass(anonymousClasses.getClass)
+ // not accessible via the Java reflection API
+ printClass("anonymousFunctions$$anonfun$3")
+ printClass("anonymousFunctions$$anonfun$foo$1")
+ printClass("anonymousFunctions$bar$$anonfun$4")
+ printClass("anonymousClasses$$anon$1")
+}
+
+object anonymousFunctions {
+ //InnerClass:
+ // public final #_ of #_; //class anonymousFunctions$$anonfun$1 of class InnerClass$
+ val twice = (x: Int) => 2*x
+
+ //InnerClass:
+ // public final #_ of #_; //class anonymousFunctions$$anonfun$2
+ List(0).map(x => x+1)
+
+ def foo {
+ //InnerClass:
+ // public final #_ of #_; class anonymousFunctions$$anonfun$3
+ val square = (x: Int) => x*x
+
+ //InnerClass:
+ // public final #_ of #_; class anonymousFunctions$$anonfun$foo$1
+ Array(1).filter(_ % 2 == 0)
+ }
+
+ object bar {
+ //InnerClass:
+ // public final #_ of #_; class anonymousFunctions$bar$$anonfun$4 of class anonymousFunctions$bar$
+ val cube = (x: Int) => x*x*x
+
+ //InnerClass:
+ // public final #_ of #_; class anonymousFunctions$bar$$anonfun$5
+ Set(1, 2, 3).exists(_ == 2)
+ }
+}
+
+object anonymousClasses {
+ //InnerClass:
+ // public abstract #_= #_ of #_; //Foo=class anonymousClasses$Foo of class anonymousClasses$
+ // public abstract #_= #_ of #_; //Foo$class=class anonymousClasses$Foo$class of class anonymousClasses$
+ trait Foo {
+ def foo() { println("foo"); }
+ override def toString = getClass.getName
+ }
+ //InnerClass:
+ // public final #_; //class anonymousClasses$$anon$1 of class anonymousClasses$
+ val x = new Foo() {
+ override def foo() { println("foo (overriden)"); }
+ def dummy = 0
+ }
+}
+
+// Auxiliary functions
+
+trait Test1 {
+ private var kind: String = _
+ private var mods: String = _
+ def printInnerClasses(cls: Class[_]) {
+ for (c <- cls.getDeclaredClasses) {
+ mods = AccessFlags.asString(c.getModifiers)
+ kind = if (c.isInterface) "interface" else "class"
+ println(" "+mods+kind+" "+c.getName+
+ " of class "+c.getEnclosingClass.getName)
+ }
+ }
+ def printClass(cls: Class[_]) {
+ println("\n{{ "+cls.getName+" }}")
+ printInnerClasses(cls)
+ }
+}
+
+trait Test2 {
+ @throws(classOf[Exception])
+ def printInnerClasses(cls: Class[_]) {
+ import java.io._, ch.epfl.lamp.fjbg._
+ val fjbgContext = new FJBGContext(49, 0)
+ val outDir = System.getProperty("partest.output", "cf-attributes.obj")
+ val fileName = outDir+File.separator+cls.getName+".class"
+ val in = new DataInputStream(new FileInputStream(fileName))
+ val jclass = fjbgContext.JClass(in)
+ println(jclass.getInnerClasses)
+ in.close()
+ }
+ def printClass(name: String) {
+ try { printClass(Class.forName(name)) }
+ catch { case e: Exception => println(e) }
+ }
+ def printClass(cls: Class[_]) {
+ println("\n[[ "+cls.getName+" ]]");
+ try { printInnerClasses(cls) }
+ catch { case e: Exception => println(e) }
+ }
+}
+
+object AccessFlags {
+ val ACC_PUBLIC = 0x0001
+ val ACC_PRIVATE = 0x0002
+ val ACC_PROTECTED = 0x0004
+ val ACC_STATIC = 0x0008
+ val ACC_FINAL = 0x0010
+ val ACC_ABSTRACT = 0x0400
+
+ def asString(accessFlags: Int): String = {
+ val buf = new StringBuilder()
+ if ((accessFlags & ACC_PUBLIC) != 0) buf.append("public ")
+ else if ((accessFlags & ACC_PROTECTED) != 0) buf.append("protected ")
+ else if ((accessFlags & ACC_PRIVATE) != 0) buf.append("private ")
+ if ((accessFlags & ACC_ABSTRACT) != 0) buf.append("abstract ")
+ else if ((accessFlags & ACC_FINAL) != 0) buf.append("final ")
+ buf.toString
+ }
+}
+
+/*
+ implicit def stringToLines(s: String) = new {
+ def lines(n: Int): String = {
+ val buf = new StringBuilder();
+ var i = 0
+ var from = 0
+ while (i < n && 0 <= from && from < s.length) {
+ val pos = s.indexOf('\n', from)
+ if (pos >= 0) { i += 1; buf.append(s.substring(from, pos + 1)); }
+ from = pos + 1
+ }
+ buf.toString()
+ }
+ }
+*/
+
diff --git a/test/pending/jvm/javasigs.check b/test/pending/jvm/javasigs.check
new file mode 100644
index 0000000000..299bec5e08
--- /dev/null
+++ b/test/pending/jvm/javasigs.check
@@ -0,0 +1,321 @@
+
+@scala.reflect.ScalaSignature(bytes="\006\001i2A!\001\002\001\013\t\t\021IC\001\004\003\035aT-\0349usz\032\001!\006\002\0079M\031\001aB\b\021\005!iQ\"A\005\013\005)Y\021\001\0027b]\036T\021\001D\001\005U\0064\030-\003\002\017\023\t1qJ\0316fGR\004\"\001E\n\016\003EQ\021AE\001\006g\016\fG.Y\005\003)E\0211bU2bY\006|%M[3di\")a\003\001C\001/\0051A(\0338jiz\"\022\001\007\t\0043\001QR\"\001\002\021\005maB\002\001\003\006;\001\021\rA\b\002\002+F\021qD\t\t\003!\001J!!I\t\003\0179{G\017[5oOB\021\001cI\005\003IE\0211!\0218z\021\0251\003\001\"\001(\003\r\021\027M]\013\003Q)\"\"!\013\027\021\005mQC!B\026&\005\004q\"!\001\"\t\r5*C\0211\001/\003\005A\bc\001\t0S%\021\001\'\005\002\ty\tLh.Y7f}!)!\007\001C\001g\005\031am\\8\026\005Q2DCA\0339!\tYb\007B\0038c\t\007aDA\001D\021\025I\024\0071\0016\003\005\031\007")
+public class A<U> implements scala.ScalaObject {
+
+ public <B> B bar(scala.Function0<B> x);
+
+ public <C> C foo(C c$1);
+
+ public A();
+}
+
+@scala.reflect.ScalaSignature(bytes="\006\001\005;Q!\001\002\t\006\025\t\021A\021\006\002\007\0059A(Z7qift4\001\001\t\003\r\035i\021A\001\004\006\021\tA)!\003\002\002\005N\031qA\003\n\021\005-\001R\"\001\007\013\0055q\021\001\0027b]\036T\021aD\001\005U\0064\030-\003\002\022\031\t1qJ\0316fGR\004\"a\005\f\016\003QQ\021!F\001\006g\016\fG.Y\005\003/Q\0211bU2bY\006|%M[3di\")\021d\002C\0015\0051A(\0338jiz\"\022!\002\005\0069\035!\t!H\001\004E\006\024XC\001\020\")\ty\022\006\005\002!C1\001A!\002\005\034\005\004\021\023CA\022\'!\t\031B%\003\002&)\t9aj\034;iS:<\007CA\n(\023\tACCA\002B]fDaAK\016\005\002\004Y\023!\001=\021\007Mas$\003\002.)\tAAHY=oC6,g\bC\0030\017\021\005\001\'A\002g_>,\"!M\032\025\005I*\004C\001\0214\t\025!dF1\001#\005\005\031\005\"\002\034/\001\004\021\024!A2\007\t!\021\001\001O\n\004o)\021\002\"B\r8\t\003QD#A\036\021\005\0319\004\"B\0308\t\003iT#\001 \021\005My\024B\001!\025\005\021)f.\033;")
+public class B implements scala.ScalaObject {
+
+ public static final <B> B bar(scala.Function0<B> arg0);
+
+ public void foo();
+
+ public B();
+}
+
+public final class $anonfun$foo$1 extends scala.runtime.AbstractFunction0 implements java.io.Serializable {
+ public static final long serialVersionUID;
+ private final java.lang.Object c$1;
+
+ public final C apply();
+
+ public $anonfun$foo$1(A<U> $outer);
+}
+package scala.actors;
+
+@scala.reflect.ScalaSignature(bytes="\006\001\021Eu!B\001\003\021\0139\021!B!di>\024(BA\002\005\003\031\t7\r^8sg*\tQ!A\003tG\006d\027m\001\001\021\005!IQ\"\001\002\007\013)\021\001RA\006\003\013\005\033Go\034:\024\t%aAc\006\t\003\033Ii\021A\004\006\003\037A\tA\001\\1oO*\t\021#\001\003kCZ\f\027BA\n\017\005\031y%M[3diB\021\001\"F\005\003-\t\0211bQ8nE&t\027\r^8sgB\021\001$G\007\002\t%\021!\004\002\002\f\'\016\fG.Y(cU\026\034G\017C\003\035\023\021\005Q$\001\004=S:LGO\020\013\002\017\035)q$\003E\003A\005)1\013^1uKB\021\021EI\007\002\023\031)1%\003E\003I\t)1\013^1uKN\031!%J\f\021\005a1\023BA\024\005\005-)e.^7fe\006$\030n\0348\t\013q\021C\021A\025\025\003\001Bqa\013\022C\002\023\005A&A\002OK^,\022!\f\t\003]=j\021AI\005\003a\031\022QAV1mk\026DaA\r\022!\002\023i\023\001\002(fo\002Bq\001\016\022C\002\023\005A&\001\005Sk:t\027M\0317f\021\0311$\005)A\005[\005I!+\0368oC\ndW\r\t\005\bq\t\022\r\021\"\001-\003%\031Vo\0359f]\022,G\r\003\004;E\001\006I!L\001\013\'V\034\b/\0328eK\022\004\003b\002\037#\005\004%\t\001L\001\017)&lW\rZ*vgB,g\016Z3e\021\031q$\005)A\005[\005yA+[7fIN+8\017]3oI\026$\007\005C\004AE\t\007I\021\001\027\002\017\tcwnY6fI\"1!I\tQ\001\n5\n\001B\0217pG.,G\r\t\005\b\t\n\022\r\021\"\001-\0031!\026.\\3e\0052|7m[3e\021\0311%\005)A\005[\005iA+[7fI\ncwnY6fI\002Bq\001\023\022C\002\023\005A&\001\006UKJl\027N\\1uK\022DaA\023\022!\002\023i\023a\003+fe6Lg.\031;fI\002B\001\002T\005C\002\023\005!!T\001\003i2,\022A\024\t\004\033=\013\026B\001)\017\005-!\006N]3bI2{7-\0317\021\005!\021\026BA*\003\0051\021V\r\0357z%\026\f7\r^8s\021\031)\026\002)A\005\035\006\031A\017\034\021\t\021]K!\031!C\001\005a\013Q\001^5nKJ,\022!\027\t\0035vk\021a\027\006\0039B\tA!\036;jY&\021al\027\002\006)&lWM\035\005\007A&\001\013\021B-\002\rQLW.\032:!\021!\021\027B1A\005\002\t\031\027\001E:vgB,g\016Z#yG\026\004H/[8o+\005!\007C\001\005f\023\t1\'AA\nTkN\004XM\0343BGR|\'oQ8oiJ|G\016\003\004i\023\001\006I\001Z\001\022gV\034\b/\0328e\013b\034W\r\035;j_:\004\003\"\0026\n\t\003Y\027\001B:fY\032,\022\001\034\t\003\02154qA\003\002\021\002\007\005anE\004n\031=\f&/^\f\021\005!\001\030BA9\003\0055\t%m\035;sC\016$\030i\031;peB\021\001b]\005\003i\n\021Q\"Q2u_J\034\025M\034*fa2L\bc\001\005wq&\021qO\001\002\r\023:\004X\017^\"iC:tW\r\034\t\0031eL!A\037\003\003\007\005s\027\020C\003}[\022\005Q0\001\004%S:LG\017\n\013\002}B\021\001d`\005\004\003\003!!\001B+oSRD\021\"!\002n\001\004%I!a\002\002\027%\0348+^:qK:$W\rZ\013\003\003\023\0012\001GA\006\023\r\ti\001\002\002\b\005>|G.Z1o\021%\t\t\"\034a\001\n\023\t\031\"A\bjgN+8\017]3oI\026$w\fJ3r)\rq\030Q\003\005\013\003/\ty!!AA\002\005%\021a\001=%c!A\0211D7!B\023\tI!\001\007jgN+8\017]3oI\026$\007\005\013\003\002\032\005}\001c\001\r\002\"%\031\0211\005\003\003\021Y|G.\031;jY\026D\021\"a\nn\001\004%I!!\013\002\021I,7-Z5wK\022,\"!a\013\021\ta\ti\003_\005\004\003_!!AB(qi&|g\016C\005\00245\004\r\021\"\003\0026\005a!/Z2fSZ,Gm\030\023fcR\031a0a\016\t\025\005]\021\021GA\001\002\004\tY\003\003\005\002<5\004\013\025BA\026\003%\021XmY3jm\026$\007\005\013\003\002:\005}\001\002CA![\022E#!a\021\002\023M\034\007.\0323vY\026\024XCAA#!\rA\021qI\005\004\003\023\022!AC%TG\",G-\0367fe\"A\021QJ7\005B\t\ty%A\006ti\006\024HoU3be\016DG\003CA)\003/\nY&!\032\021\ta\t\031F`\005\004\003+\"!!\003$v]\016$\030n\03481\021\035\tI&a\023A\002a\f1!\\:h\021!\ti&a\023A\002\005}\023a\002:fa2LHk\034\t\005\021\005\005\0040C\002\002d\t\021QbT;uaV$8\t[1o]\026d\007\002CA4\003\027\002\r!!\033\002\017!\fg\016\0327feB)\001$a\033yq&\031\021Q\016\003\003\037A\013\'\017^5bY\032+hn\031;j_:D\001\"!\035n\t\003\022\0211O\001\016g\026\f\'o\0315NC&d\'m\034=\025\017y\f)(a \002\002\"A\021qOA8\001\004\tI(A\005ti\006\024H/\0242pqB!\001\"a\037y\023\r\tiH\001\002\007\033F+X-^3\t\021\005\035\024q\016a\001\003SB\001\"a!\002p\001\007\021\021B\001\023e\026\034X/\\3P]N\013W.\032+ie\026\fG\r\003\005\002\b6$\tEAAE\0031i\027m[3SK\006\034G/[8o)!\tY)!%\002\026\006]\005cA\007\002\016&\031\021q\022\b\003\021I+hN\\1cY\026D\001\"a%\002\006\002\007\021\021K\001\004MVt\007\002CA4\003\013\003\r!!\033\t\017\005e\023Q\021a\001q\"9\0211T7\005\002\005u\025a\002:fG\026Lg/Z\013\005\003?\013)\013\006\003\002\"\006E\006\003BAR\003Kc\001\001\002\005\002(\006e%\031AAU\005\005\021\026cAAVqB\031\001$!,\n\007\005=FAA\004O_RD\027N\\4\t\021\005M\026\021\024a\001\003k\013\021A\032\t\0071\005-\0040!)\t\017\005eV\016\"\001\002<\006i!/Z2fSZ,w+\033;iS:,B!!0\002DR!\021qXAe)\021\t\t-!2\021\t\005\r\0261\031\003\t\003O\0139L1\001\002*\"A\0211WA\\\001\004\t9\r\005\004\031\003WB\030\021\031\005\t\003\027\f9\f1\001\002N\006!Qn]3d!\rA\022qZ\005\004\003#$!\001\002\'p]\036Dq!!6n\t\003\n9.A\003sK\006\034G\017\006\003\002,\006e\007\002CA4\003\'\004\r!a7\021\013a\tY\007\037@\t\017\005}W\016\"\021\002b\006Y!/Z1di^KG\017[5o)\021\t\031/a:\025\t\005-\026Q\035\005\t\003O\ni\0161\001\002\\\"A\0211ZAo\001\004\ti\rC\004\002l6$\t!!<\002\r\021\nX.\031:l+\005A\b\002CAy[\022\005#!a=\002\033M\034\007.\0323vY\026\f5\r^8s)\025q\030Q_A|\021!\t\031,a<A\002\005%\004bBA-\003_\004\r\001_\004\b\003wl\007RBA\177\003\035\021Gn\\2lKJ\004B!a@\003\0025\tQNB\004\003\0045DiA!\002\003\017\tdwnY6feN1!\021\001\007\003\b]\001BA!\003\003\0205\021!1\002\006\004\005\033!\021AC2p]\016,(O]3oi&!!\021\003B\006\0059i\025M\\1hK\022\024En\\2lKJDq\001\bB\001\t\003\021)\002\006\002\002~\"A!\021\004B\001\t\003\021Y\"A\003cY>\0347\016\006\002\002\n!A!q\004B\001\t\003\t9!\001\007jgJ+G.Z1tC\ndW\r\003\004\003$5$I!`\001\rgV\034\b/\0328e\003\016$xN\035\005\007\005OiG\021B?\002\027I,7/^7f\003\016$xN\035\005\t\005WiG\021\t\002\002\b\0059Q\r_5uS:<\007b\002B\030[\022\005#!`\001\bI>\034H/\031:u\021\035\021\031$\034C!\005k\tQa\035;beR$\022\001\034\005\b\005siG\021\tB\036\003!9W\r^*uCR,WC\001B\037!\r\021yd\f\b\004\005\003rbB\001\005\001\021)\021)%\034a\001\n\003\021!qI\001\006Y&t7n]\013\003\005\023\002RAa\023\003\\=tAA!\024\003X9!!q\nB+\033\t\021\tFC\002\003T\031\ta\001\020:p_Rt\024\"A\003\n\007\teC!A\004qC\016\\\027mZ3\n\t\tu#q\f\002\005\031&\034HOC\002\003Z\021A!Ba\031n\001\004%\tA\001B3\003%a\027N\\6t?\022*\027\017F\002\177\005OB!\"a\006\003b\005\005\t\031\001B%\021!\021Y\'\034Q!\n\t%\023A\0027j].\034\b\005C\004\003p5$\tA!\035\002\t1Lgn\033\013\004_\nM\004b\002B;\005[\002\ra\\\001\003i>DqAa\034n\t\003\021I\bF\002m\005wB\021B! \003x\021\005\rAa \002\t\t|G-\037\t\0051\t\005e0C\002\003\004\022\021\001\002\0202z]\006lWM\020\005\t\005\017kG\021\001\002\003\n\0061A.\0338l)>$2A BF\021\035\021)H!\"A\002=DqAa$n\t\003\021\t*\001\004v]2Lgn\033\013\004}\nM\005b\002BK\005\033\003\ra\\\001\005MJ|W\016\003\005\003\0326$\tA\001BN\003))h\016\\5oW\032\023x.\034\013\004}\nu\005b\002BK\005/\003\ra\034\005\n\005Ck\007\031!C\001\003\017\t\001\002\036:ba\026C\030\016\036\005\n\005Kk\007\031!C\001\005O\013A\002\036:ba\026C\030\016^0%KF$2A BU\021)\t9Ba)\002\002\003\007\021\021\002\005\t\005[k\007\025)\003\002\n\005IAO]1q\013bLG\017\t\025\005\005W\013y\002C\005\00346\004\r\021\"\003\0036\006QQ\r_5u%\026\f7o\0348\026\005\t]\006c\001\r\003:&\031!1\030\003\003\r\005s\027PU3g\021%\021y,\034a\001\n\023\021\t-\001\bfq&$(+Z1t_:|F%Z9\025\007y\024\031\r\003\006\002\030\tu\026\021!a\001\005oC\001Ba2nA\003&!qW\001\fKbLGOU3bg>t\007\005\003\006\003L6\004\r\021\"\001\003\003\017\t!b\0355pk2$W\t_5u\021)\021y-\034a\001\n\003\021!\021[\001\017g\"|W\017\0343Fq&$x\fJ3r)\rq(1\033\005\013\003/\021i-!AA\002\005%\001\002\003Bl[\002\006K!!\003\002\027MDw.\0367e\013bLG\017\t\005\t\0057lG\021\003\002\003^\006!Q\r_5u)\021\tYKa8\t\021\t\005(\021\034a\001\005o\013aA]3bg>t\007\002\003Bn[\022E#A!:\025\005\005-\006\002\003Bu[\022\005!Aa;\002\025\025D\030\016\036\'j].,G\r\006\002\002R!A!\021^7\005\002\t\021y\017\006\003\002R\tE\b\002\003Bq\005[\004\rAa.\t\021\tmW\016\"\001\003\005k$RA B|\005sDqA!&\003t\002\007q\016\003\005\003b\nM\b\031\001B\\\021!\021i0\034C\001\005\t}\030aC8o)\026\024X.\0338bi\026$2A`B\001\021%\t\031La?\005\002\004\021y\b\003\007\004\0065\f\t\021!C\005\007\017\031y!A\ttkB,\'\017J:uCJ$8+Z1sG\"$\002\"!\025\004\n\r-1Q\002\005\b\0033\032\031\0011\001y\021!\tifa\001A\002\005}\003\002CA4\007\007\001\r!!\033\n\t\00553\021C\005\004\007\'\021!a\002*fC\016$xN\035\005\r\007/i\027\021!A\005\n\re1QD\001\fgV\004XM\035\023sK\006\034G\017\006\003\002,\016m\001\002CA4\007+\001\r!a7\n\007\005U\'\013\003\007\004\"5\f\t\021!C\005\007G\031Y#A\ttkB,\'\017\n:fC\016$x+\033;iS:$Ba!\n\004*Q!\0211VB\024\021!\t9ga\bA\002\005m\007\002CAf\007?\001\r!!4\n\007\005}\'\013C\006\00405\f\t\021!C\005{\016E\022!D:va\026\024H\005Z8ti\006\024H/\003\003\0030\rE\001\002DB\033[\006\005\t\021\"\003\0048\rm\022aC:va\026\024He\035;beR$\"a!\017\021\t!\031\t\002_\005\005\005g\031\t\002\003\007\004@5\f\t\021!C\005\005w\031\t%\001\btkB,\'\017J4fiN#\030\r^3\n\007\te\"\013\003\007\004F5\f\t\021!C\005\005K\0349%\001\006tkB,\'\017J3ySRLAAa7\004\022!*Qna\023\004RA\031\001d!\024\n\007\r=CA\001\tTKJL\027\r\034,feNLwN\\+J\tzAQ\037\013e\004,[\003}\022K\002n\007+\0022\001GB,\023\r\031I\006\002\002\rg\026\024\030.\0317ju\006\024G.\032\005\bU&!\tAAB/)\ra7q\f\005\t\007C\032Y\0061\001\002F\005)1o\0315fI\"A1QM\005\005\002\t\0319\'A\004sC^\034V\r\0344\026\003EC\001b!\032\n\t\003\02111\016\013\004#\0165\004\002CB1\007S\002\r!!\022\t\017\rE\024\002\"\003\002D\005y\001/\031:f]R\0346\r[3ek2,\'\017C\004\004v%!\taa\036\002\025I,7/\032;Qe>D\0300F\001\177\021\035\031Y(\003C\001\007o\n\021b\0317fCJ\034V\r\0344\t\017\r}\024\002\"\001\004\002\006)\021m\031;peR\031Ana!\t\023\tu4Q\020CA\002\t}\004bBBD\023\021\0051\021R\001\be\026\f7\r^8s)\ra71\022\005\n\005{\032)\t\"a\001\007\033\003R\001\007BA\007\037\003B\001GBI}&\03111\023\003\003\023I+7\017]8oI\026\024\bbBAv\023\021\005\021Q\036\005\b\0037KA\021ABM+\021\031Yja(\025\t\ru51\025\t\005\003G\033y\n\002\005\004\"\016]%\031AAU\005\005\t\005\002CAZ\007/\003\ra!*\021\ra\tY\007_BO\021\035\tI,\003C\001\007S+Baa+\0042R!1QVB\\)\021\031yka-\021\t\005\r6\021\027\003\t\003O\0339K1\001\002*\"A\0211WBT\001\004\031)\f\005\004\031\003WB8q\026\005\t\003\027\0349\0131\001\002N\"9\021Q[\005\005\002\rmF\003BAV\007{C\001\"a-\004:\002\007\0211\034\005\b\003?LA\021ABa)\021\031\031ma2\025\t\005-6Q\031\005\t\003g\033y\f1\001\002\\\"A\0211ZB`\001\004\ti\rC\004\004L&!\ta!4\002\023\0254XM\034;m_>\004H\003BAV\007\037D\001\"a-\004J\002\007\0211\034\004\007\007\'LAa!6\003+I+7-\036:tSZ,\007K]8ys\"\013g\016\0327feN11\021\033\007\002\\^A!b!7\004R\n\005\t\025!\003R\003\005\t\007bCAZ\007#\024\t\021)A\005\0037Dq\001HBi\t\003\031y\016\006\004\004b\016\r8Q\035\t\004C\rE\007bBBm\007;\004\r!\025\005\t\003g\033i\0161\001\002\\\"A1\021^Bi\t\003\031Y/A\006jg\022+g-\0338fI\006#H\003BA\005\007[Dqaa<\004h\002\007\0010A\001n\021!\031\031p!5\005\002\rU\030!B1qa2LHc\001@\004x\"91q^By\001\004A\bbBB~\023\021\0051Q`\001\007g\026tG-\032:\026\005\005}\003b\002C\001\023\021\005A1A\001\006e\026\004H.\037\013\004}\022\025\001bBA-\007\177\004\r\001\037\005\007\t\003IA\021A?\t\017\021-\021\002\"\001\005\016\005YQ.Y5mE>D8+\033>f+\t!y\001E\002\031\t#I1\001b\005\005\005\rIe\016\036\005\b\t/IA\021\001C\r\003%\021Xm\0359p]\022|e.\006\004\005\034\021\035B1\006\013\005\t;!\t\004E\004\031\t?!\031\003b\f\n\007\021\005BAA\005Gk:\034G/[8ocA9\001$a\033\005&\021%\002\003BAR\tO!\001b!)\005\026\t\007\021\021\026\t\005\003G#Y\003\002\005\005.\021U!\031AAU\005\005\021\005#\002\r\004\022\022%\002\002CAJ\t+\001\r\001b\r\021\017a!y\002\"\016\002,B1\001$a\033\005&y4!\002\"\017\n!\003\r\nA\001C\036\005\021\021u\016Z=\026\t\021uB1K\n\004\toa\001\002\003C!\to1\t\001b\021\002\017\005tG\r\0265f]V!AQ\tC()\rqHq\t\005\n\t\023\"y\004\"a\001\t\027\nQa\034;iKJ\004R\001\007BA\t\033\002B!a)\005P\021AA\021\013C \005\004\tIKA\001c\t!!)\006b\016C\002\005%&!A1\t\017\021e\023\002b\001\005\\\0051Qn\033\"pIf,B\001\"\030\005jQ!Aq\fC6%\025!\t\007\004C3\r\035!\031\007b\026\001\t?\022A\002\020:fM&tW-\\3oiz\002R!\tC\034\tO\002B!a)\005j\021AAQ\013C,\005\004\tI\013C\005\003~\021]C\0211\001\005nA)\001D!!\005h!9!qN\005\005\002\021EDcA8\005t!9!Q\017C8\001\004y\007b\002B8\023\021\005Aq\017\013\004Y\022e\004\"\003B?\tk\"\t\031\001B@\021\035\021y)\003C\001\t{\"2A C@\021\035\021)\nb\037A\002=DqAa7\n\t\003!\031\t\006\003\002,\022\025\005\002\003Bq\t\003\003\rAa.\t\017\tm\027\002\"\001\003f\"QA1R\005\005\002\003%\t\002\"$\002\027I,\027\r\032*fg>dg/\032\013\002\031!\032\021b!\026")
+public interface Actor extends scala.actors.AbstractActor, scala.actors.ReplyReactor, scala.actors.ActorCanReply, scala.actors.InputChannel<java.lang.Object>, scala.ScalaObject {
+
+ public static interface Body<a> {
+
+ <b> void andThen(scala.Function0<b> arg0);
+ }
+
+ public static class RecursiveProxyHandler implements scala.PartialFunction<java.lang.Object,java.lang.Object>, scala.ScalaObject {
+ private final scala.actors.ReplyReactor a;
+ private final scala.PartialFunction<java.lang.Object,java.lang.Object> f;
+
+ public <A1B1> scala.PartialFunction<A1,B1> orElse(scala.PartialFunction<A1,B1> that);
+
+ public <C> scala.PartialFunction<java.lang.Object,C> andThen(scala.Function1<java.lang.Object,C> k);
+
+ public scala.Function1<java.lang.Object,scala.Option<java.lang.Object>> lift();
+
+ public void apply$mcVI$sp(int v1);
+
+ public boolean apply$mcZI$sp(int v1);
+
+ public int apply$mcII$sp(int v1);
+
+ public float apply$mcFI$sp(int v1);
+
+ public long apply$mcJI$sp(int v1);
+
+ public double apply$mcDI$sp(int v1);
+
+ public void apply$mcVJ$sp(long v1);
+
+ public boolean apply$mcZJ$sp(long v1);
+
+ public int apply$mcIJ$sp(long v1);
+
+ public float apply$mcFJ$sp(long v1);
+
+ public long apply$mcJJ$sp(long v1);
+
+ public double apply$mcDJ$sp(long v1);
+
+ public void apply$mcVF$sp(float v1);
+
+ public boolean apply$mcZF$sp(float v1);
+
+ public int apply$mcIF$sp(float v1);
+
+ public float apply$mcFF$sp(float v1);
+
+ public long apply$mcJF$sp(float v1);
+
+ public double apply$mcDF$sp(float v1);
+
+ public void apply$mcVD$sp(double v1);
+
+ public boolean apply$mcZD$sp(double v1);
+
+ public int apply$mcID$sp(double v1);
+
+ public float apply$mcFD$sp(double v1);
+
+ public long apply$mcJD$sp(double v1);
+
+ public double apply$mcDD$sp(double v1);
+
+ public java.lang.String toString();
+
+ public <A> scala.Function1<A,java.lang.Object> compose(scala.Function1<A,java.lang.Object> g);
+
+ public <A> scala.Function1<A,java.lang.Object> compose$mcVI$sp(scala.Function1<A,java.lang.Integer> g);
+
+ public <A> scala.Function1<A,java.lang.Boolean> compose$mcZI$sp(scala.Function1<A,java.lang.Integer> g);
+
+ public <A> scala.Function1<A,java.lang.Integer> compose$mcII$sp(scala.Function1<A,java.lang.Integer> g);
+
+ public <A> scala.Function1<A,java.lang.Float> compose$mcFI$sp(scala.Function1<A,java.lang.Integer> g);
+
+ public <A> scala.Function1<A,java.lang.Long> compose$mcJI$sp(scala.Function1<A,java.lang.Integer> g);
+
+ public <A> scala.Function1<A,java.lang.Double> compose$mcDI$sp(scala.Function1<A,java.lang.Integer> g);
+
+ public <A> scala.Function1<A,java.lang.Object> compose$mcVJ$sp(scala.Function1<A,java.lang.Long> g);
+
+ public <A> scala.Function1<A,java.lang.Boolean> compose$mcZJ$sp(scala.Function1<A,java.lang.Long> g);
+
+ public <A> scala.Function1<A,java.lang.Integer> compose$mcIJ$sp(scala.Function1<A,java.lang.Long> g);
+
+ public <A> scala.Function1<A,java.lang.Float> compose$mcFJ$sp(scala.Function1<A,java.lang.Long> g);
+
+ public <A> scala.Function1<A,java.lang.Long> compose$mcJJ$sp(scala.Function1<A,java.lang.Long> g);
+
+ public <A> scala.Function1<A,java.lang.Double> compose$mcDJ$sp(scala.Function1<A,java.lang.Long> g);
+
+ public <A> scala.Function1<A,java.lang.Object> compose$mcVF$sp(scala.Function1<A,java.lang.Float> g);
+
+ public <A> scala.Function1<A,java.lang.Boolean> compose$mcZF$sp(scala.Function1<A,java.lang.Float> g);
+
+ public <A> scala.Function1<A,java.lang.Integer> compose$mcIF$sp(scala.Function1<A,java.lang.Float> g);
+
+ public <A> scala.Function1<A,java.lang.Float> compose$mcFF$sp(scala.Function1<A,java.lang.Float> g);
+
+ public <A> scala.Function1<A,java.lang.Long> compose$mcJF$sp(scala.Function1<A,java.lang.Float> g);
+
+ public <A> scala.Function1<A,java.lang.Double> compose$mcDF$sp(scala.Function1<A,java.lang.Float> g);
+
+ public <A> scala.Function1<A,java.lang.Object> compose$mcVD$sp(scala.Function1<A,java.lang.Double> g);
+
+ public <A> scala.Function1<A,java.lang.Boolean> compose$mcZD$sp(scala.Function1<A,java.lang.Double> g);
+
+ public <A> scala.Function1<A,java.lang.Integer> compose$mcID$sp(scala.Function1<A,java.lang.Double> g);
+
+ public <A> scala.Function1<A,java.lang.Float> compose$mcFD$sp(scala.Function1<A,java.lang.Double> g);
+
+ public <A> scala.Function1<A,java.lang.Long> compose$mcJD$sp(scala.Function1<A,java.lang.Double> g);
+
+ public <A> scala.Function1<A,java.lang.Double> compose$mcDD$sp(scala.Function1<A,java.lang.Double> g);
+
+ public <A> scala.Function1<java.lang.Integer,A> andThen$mcVI$sp(scala.Function1<java.lang.Object,A> g);
+
+ public <A> scala.Function1<java.lang.Integer,A> andThen$mcZI$sp(scala.Function1<java.lang.Boolean,A> g);
+
+ public <A> scala.Function1<java.lang.Integer,A> andThen$mcII$sp(scala.Function1<java.lang.Integer,A> g);
+
+ public <A> scala.Function1<java.lang.Integer,A> andThen$mcFI$sp(scala.Function1<java.lang.Float,A> g);
+
+ public <A> scala.Function1<java.lang.Integer,A> andThen$mcJI$sp(scala.Function1<java.lang.Long,A> g);
+
+ public <A> scala.Function1<java.lang.Integer,A> andThen$mcDI$sp(scala.Function1<java.lang.Double,A> g);
+
+ public <A> scala.Function1<java.lang.Long,A> andThen$mcVJ$sp(scala.Function1<java.lang.Object,A> g);
+
+ public <A> scala.Function1<java.lang.Long,A> andThen$mcZJ$sp(scala.Function1<java.lang.Boolean,A> g);
+
+ public <A> scala.Function1<java.lang.Long,A> andThen$mcIJ$sp(scala.Function1<java.lang.Integer,A> g);
+
+ public <A> scala.Function1<java.lang.Long,A> andThen$mcFJ$sp(scala.Function1<java.lang.Float,A> g);
+
+ public <A> scala.Function1<java.lang.Long,A> andThen$mcJJ$sp(scala.Function1<java.lang.Long,A> g);
+
+ public <A> scala.Function1<java.lang.Long,A> andThen$mcDJ$sp(scala.Function1<java.lang.Double,A> g);
+
+ public <A> scala.Function1<java.lang.Float,A> andThen$mcVF$sp(scala.Function1<java.lang.Object,A> g);
+
+ public <A> scala.Function1<java.lang.Float,A> andThen$mcZF$sp(scala.Function1<java.lang.Boolean,A> g);
+
+ public <A> scala.Function1<java.lang.Float,A> andThen$mcIF$sp(scala.Function1<java.lang.Integer,A> g);
+
+ public <A> scala.Function1<java.lang.Float,A> andThen$mcFF$sp(scala.Function1<java.lang.Float,A> g);
+
+ public <A> scala.Function1<java.lang.Float,A> andThen$mcJF$sp(scala.Function1<java.lang.Long,A> g);
+
+ public <A> scala.Function1<java.lang.Float,A> andThen$mcDF$sp(scala.Function1<java.lang.Double,A> g);
+
+ public <A> scala.Function1<java.lang.Double,A> andThen$mcVD$sp(scala.Function1<java.lang.Object,A> g);
+
+ public <A> scala.Function1<java.lang.Double,A> andThen$mcZD$sp(scala.Function1<java.lang.Boolean,A> g);
+
+ public <A> scala.Function1<java.lang.Double,A> andThen$mcID$sp(scala.Function1<java.lang.Integer,A> g);
+
+ public <A> scala.Function1<java.lang.Double,A> andThen$mcFD$sp(scala.Function1<java.lang.Float,A> g);
+
+ public <A> scala.Function1<java.lang.Double,A> andThen$mcJD$sp(scala.Function1<java.lang.Long,A> g);
+
+ public <A> scala.Function1<java.lang.Double,A> andThen$mcDD$sp(scala.Function1<java.lang.Double,A> g);
+
+ public <R1> scala.PartialFunction<java.lang.Object,R1> unlift(scala.Predef.$less$colon$less<java.lang.Object,scala.Option<R1>> ev);
+
+ public boolean isDefinedAt(java.lang.Object m);
+
+ public void apply(java.lang.Object m);
+
+ public scala.Function1 andThen(scala.Function1 g);
+
+ public java.lang.Object apply(java.lang.Object v1);
+
+ public RecursiveProxyHandler(scala.actors.ReplyReactor a,
+ scala.PartialFunction<java.lang.Object,java.lang.Object> f);
+ }
+ long serialVersionUID;
+
+ scala.Function0<java.lang.Object> scala$actors$Actor$$super$startSearch(java.lang.Object arg0,
+ scala.actors.OutputChannel<java.lang.Object> arg1,
+ scala.PartialFunction<java.lang.Object,java.lang.Object> arg2);
+
+ scala.runtime.Nothing$ scala$actors$Actor$$super$react(scala.PartialFunction<java.lang.Object,java.lang.Object> arg0);
+
+ scala.runtime.Nothing$ scala$actors$Actor$$super$reactWithin(long arg0,
+ scala.PartialFunction<java.lang.Object,java.lang.Object> arg1);
+
+ void scala$actors$Actor$$super$dostart();
+
+ scala.actors.Reactor<java.lang.Object> scala$actors$Actor$$super$start();
+
+ scala.Enumeration.Value scala$actors$Actor$$super$getState();
+
+ scala.runtime.Nothing$ scala$actors$Actor$$super$exit();
+
+ boolean scala$actors$Actor$$isSuspended();
+
+ @scala.runtime.TraitSetter
+ void scala$actors$Actor$$isSuspended_$eq(boolean arg0);
+
+ scala.Option<java.lang.Object> scala$actors$Actor$$received();
+
+ @scala.runtime.TraitSetter
+ void scala$actors$Actor$$received_$eq(scala.Option<java.lang.Object> arg0);
+
+ scala.actors.IScheduler scheduler();
+
+ scala.Function0<java.lang.Object> startSearch(java.lang.Object arg0,
+ scala.actors.OutputChannel<java.lang.Object> arg1,
+ scala.PartialFunction<java.lang.Object,java.lang.Object> arg2);
+
+ void searchMailbox(scala.actors.MQueue<java.lang.Object> arg0,
+ scala.PartialFunction<java.lang.Object,java.lang.Object> arg1,
+ boolean arg2);
+
+ java.lang.Runnable makeReaction(scala.Function0<java.lang.Object> arg0,
+ scala.PartialFunction<java.lang.Object,java.lang.Object> arg1,
+ java.lang.Object arg2);
+
+ <R> R receive(scala.PartialFunction<java.lang.Object,R> arg0);
+
+ <R> R receiveWithin(long arg0,
+ scala.PartialFunction<java.lang.Object,R> arg1);
+
+ scala.runtime.Nothing$ react(scala.PartialFunction<java.lang.Object,java.lang.Object> arg0);
+
+ scala.runtime.Nothing$ reactWithin(long arg0,
+ scala.PartialFunction<java.lang.Object,java.lang.Object> arg1);
+
+ java.lang.Object $qmark();
+
+ void scheduleActor(scala.PartialFunction<java.lang.Object,java.lang.Object> arg0,
+ java.lang.Object arg1);
+
+ scala.actors.Actor$blocker$ scala$actors$Actor$$blocker();
+
+ boolean exiting();
+
+ void dostart();
+
+ scala.actors.Actor start();
+
+ scala.Enumeration.Value getState();
+
+ scala.collection.immutable.List<scala.actors.AbstractActor> links();
+
+ @scala.runtime.TraitSetter
+ void links_$eq(scala.collection.immutable.List<scala.actors.AbstractActor> arg0);
+
+ scala.actors.AbstractActor link(scala.actors.AbstractActor arg0);
+
+ scala.actors.Actor link(scala.Function0<java.lang.Object> arg0);
+
+ void linkTo(scala.actors.AbstractActor arg0);
+
+ void unlink(scala.actors.AbstractActor arg0);
+
+ void unlinkFrom(scala.actors.AbstractActor arg0);
+
+ boolean trapExit();
+
+ @scala.runtime.TraitSetter
+ void trapExit_$eq(boolean arg0);
+
+ java.lang.Object scala$actors$Actor$$exitReason();
+
+ @scala.runtime.TraitSetter
+ void scala$actors$Actor$$exitReason_$eq(java.lang.Object arg0);
+
+ boolean shouldExit();
+
+ @scala.runtime.TraitSetter
+ void shouldExit_$eq(boolean arg0);
+
+ scala.runtime.Nothing$ exit(java.lang.Object arg0);
+
+ scala.runtime.Nothing$ exit();
+
+ scala.Function0<java.lang.Object> exitLinked();
+
+ scala.Function0<java.lang.Object> exitLinked(java.lang.Object arg0);
+
+ void exit(scala.actors.AbstractActor arg0,
+ java.lang.Object arg1);
+
+ void onTerminate(scala.Function0<java.lang.Object> arg0);
+}
diff --git a/test/pending/jvm/javasigs.scala b/test/pending/jvm/javasigs.scala
new file mode 100644
index 0000000000..8da59ab0a0
--- /dev/null
+++ b/test/pending/jvm/javasigs.scala
@@ -0,0 +1,78 @@
+import java.io._
+
+object Scalatest {
+ val outputdir = System.getProperty("partest.output", "inner.obj")
+ val scalalib = System.getProperty("partest.lib", "")
+ val classpath = outputdir + File.pathSeparator + scalalib
+ val javacmd = System.getProperty("javacmd", "java")
+ val javac = System.getProperty("javaccmd", "javac")
+
+ def javac(src: String, opts: String, fname: String) {
+ val tmpfilename = outputdir + File.separator + fname
+ val tmpfile = new FileWriter(tmpfilename)
+ tmpfile.write(src)
+ tmpfile.close
+ exec(javac + " -d " + outputdir + " -classpath " + classpath + " " + opts + tmpfilename)
+ }
+
+ def java(cname: String) =
+ exec(javacmd + " -cp " + classpath + " " + cname)
+
+ class Slurp(in: BufferedReader) extends Thread("slurper") {
+ var done = false
+ override def run() {
+ while (!done) if (in.ready) println(in.readLine())
+ }
+ }
+
+ def slurp(in: BufferedReader): Slurp = {
+ val s = new Slurp(in)
+ s.start()
+ s
+ }
+
+
+ /** Execute cmd, wait for the process to end and pipe it's output to stdout */
+ def exec(cmd: String) {
+ val proc = Runtime.getRuntime().exec(cmd)
+ val inp = new BufferedReader(new InputStreamReader(proc.getInputStream))
+ val errp = new BufferedReader(new InputStreamReader(proc.getErrorStream))
+ val t1 = slurp(inp)
+ val t2 = slurp(errp)
+ proc.waitFor()
+ t1.done = true
+ t2.done = true
+ t1.join()
+ t2.join()
+ }
+}
+
+// Test correct java signatures for anonymous classes. Enclosing method attributes should
+// allow javac to see the type parameters in foo. See #3249.
+
+class A[U] {
+ def bar[B](x : => B) = x
+ def foo[C](c : C) : C = bar(c)
+}
+
+object B {
+ def bar[B](x : => B) = x
+ def foo[C](c : C) : C = {
+ class InnerB(x: C)
+ c
+ }
+}
+
+class B {
+ def foo {}
+}
+
+object Test {
+ def main(args: Array[String]) {
+ import Scalatest._
+ exec("%s -Xprint -cp %s A".format(javac, classpath))
+ exec("%s -Xprint -cp %s B".format(javac, classpath))
+ exec("%s -Xprint -cp %s A$$anonfun$foo$1".format(javac, classpath))
+ exec("%s -Xprint -cp %s scala.actors.Actor".format(javac, classpath))
+ }
+}
diff --git a/test/pending/jvm/serialization.check b/test/pending/jvm/serialization.check
deleted file mode 100644
index 397578bcba..0000000000
--- a/test/pending/jvm/serialization.check
+++ /dev/null
@@ -1,198 +0,0 @@
-x0 = List(1, 2, 3)
-y0 = List(1, 2, 3)
-x0 eq y0: false, y0 eq x0: false
-x0 equals y0: true, y0 equals x0: true
-
-x1 = List()
-y1 = List()
-x1 eq y1: true, y1 eq x1: true
-
-x2 = None
-y2 = None
-x2 eq y2: true, y2 eq x2: true
-
-x3 = Array[1,2,3]
-y3 = Array[1,2,3]
-arrayEquals(x3, y3): true
-
-x4 = <na>
-y4 = <na>
-x4(2): 4 - y4(2): 4
-
-x5 = 'hello
-y5 = 'hello
-x5 eq y5: true, y5 eq x5: true
-x5 equals y5: true, y5 equals x5: true
-
-x6 = (BannerLimit,12345)
-y6 = (BannerLimit,12345)
-x6 eq y6: false, y6 eq x6: false
-x6 equals y6: true, y6 equals x6: true
-
-x7 = RoundingMode
-y7 = RoundingMode
-x7 eq y7: true, y7 eq x7: true
-x7 equals y7: true, y7 equals x7: true
-
-x8 = WeekDay
-y8 = WeekDay
-x8 eq y8: true, y8 eq x8: true
-x8 equals y8: true, y8 equals x8: true
-
-x9 = UP
-y9 = UP
-x9 eq y9: true, y9 eq x9: true
-x9 equals y9: true, y9 equals x9: true
-
-x10 = WeekDay(0)
-y10 = WeekDay(0)
-x10 eq y10: true, y10 eq x10: true
-x10 equals y10: true, y10 equals x10: true
-
-x9 eq x10: false, x10 eq x9: false
-x9 equals x10: false, x10 equals x9: false
-x9 eq y10: false, y10 eq x9: false
-x9 equals y10: false, y10 equals x9: false
-
-x = List((buffers,20), (layers,2), (title,3))
-y = List((buffers,20), (layers,2), (title,3))
-x equals y: true, y equals x: true
-
-x = Map(2 -> C, 1 -> B, 0 -> A)
-y = Map(2 -> C, 1 -> B, 0 -> A)
-x equals y: true, y equals x: true
-
-x = Map(buffers -> 20, layers -> 2, title -> 3)
-y = Map(buffers -> 20, layers -> 2, title -> 3)
-x equals y: true, y equals x: true
-
-x = Set(2, 3)
-y = Set(2, 3)
-x equals y: true, y equals x: true
-
-x = Set(5, 3)
-y = Set(5, 3)
-x equals y: true, y equals x: true
-
-x = Queue(a, b, c)
-y = Queue(a, b, c)
-x equals y: true, y equals x: true
-
-x = Stack(a, b, c)
-y = Stack(a, b, c)
-x equals y: true, y equals x: true
-
-x = Map(42 -> FortyTwo)
-y = Map(42 -> FortyTwo)
-x equals y: true, y equals x: true
-
-x = TreeSet(0, 2)
-y = TreeSet(0, 2)
-x equals y: true, y equals x: true
-
-x = Vector(1, 2, 3)
-y = Vector(1, 2, 3)
-x equals y: true, y equals x: true
-
-x = ArrayBuffer(one, two)
-y = ArrayBuffer(one, two)
-x equals y: true, y equals x: true
-
-x = Map(title -> 3, buffers -> 20, layers -> 2)
-y = Map(title -> 3, buffers -> 20, layers -> 2)
-x equals y: true, y equals x: true
-
-x = Set(0, 8, 9)
-y = Set(0, 8, 9)
-x equals y: true, y equals x: true
-
-x = Set(layers, buffers, title)
-y = Set(layers, buffers, title)
-x equals y: true, y equals x: true
-
-x = LinkedList(2, 3)
-y = LinkedList(2, 3)
-x equals y: true, y equals x: true
-
-x = Queue(20, 2, 3)
-y = Queue(20, 2, 3)
-x equals y: true, y equals x: true
-
-x = Stack(3, 2, 20)
-y = Stack(3, 2, 20)
-x equals y: true, y equals x: true
-
-x = ListBuffer(white, black)
-y = ListBuffer(white, black)
-x equals y: true, y equals x: true
-
-x = History((Feed,hello))
-y = History((Feed,hello))
-x equals y: true, y equals x: true
-
-x = <html><title>title</title><body></body></html>
-y = <html><title>title</title><body></body></html>
-x equals y: true, y equals x: true
-
-x = <html>
- <body>
- <table cellpadding="2" cellspacing="0">
- <tr>
- <th>Last Name</th>
- <th>First Name</th>
- </tr>
- <tr>
- <td> Tom </td>
- <td> 20 </td>
- </tr><tr>
- <td> Bob </td>
- <td> 22 </td>
- </tr><tr>
- <td> James </td>
- <td> 19 </td>
- </tr>
- </table>
- </body>
- </html>
-y = <html>
- <body>
- <table cellpadding="2" cellspacing="0">
- <tr>
- <th>Last Name</th>
- <th>First Name</th>
- </tr>
- <tr>
- <td> Tom </td>
- <td> 20 </td>
- </tr><tr>
- <td> Bob </td>
- <td> 22 </td>
- </tr><tr>
- <td> James </td>
- <td> 19 </td>
- </tr>
- </table>
- </body>
- </html>
-x equals y: true, y equals x: true
-
-x = Tim
-y = Tim
-x equals y: true, y equals x: true
-
-x = Bob
-y = Bob
-x equals y: true, y equals x: true
-
-x = John
-y = John
-x equals y: true, y equals x: true
-
-x = Bill
-y = Bill
-x equals y: true, y equals x: true
-
-x = Paul
-y = Paul
-x equals y: true, y equals x: true
-
diff --git a/test/pending/jvm/serialization.scala b/test/pending/jvm/serialization.scala
deleted file mode 100644
index ff9413ae4b..0000000000
--- a/test/pending/jvm/serialization.scala
+++ /dev/null
@@ -1,411 +0,0 @@
-//############################################################################
-// Serialization
-//############################################################################
-
-import java.lang.System
-
-object Serialize {
- @throws(classOf[java.io.IOException])
- def write[A](o: A): Array[Byte] = {
- val ba = new java.io.ByteArrayOutputStream(512)
- val out = new java.io.ObjectOutputStream(ba)
- out.writeObject(o)
- out.close()
- ba.toByteArray()
- }
- @throws(classOf[java.io.IOException])
- @throws(classOf[ClassNotFoundException])
- def read[A](buffer: Array[Byte]): A = {
- val in =
- new java.io.ObjectInputStream(new java.io.ByteArrayInputStream(buffer))
- in.readObject().asInstanceOf[A]
- }
- def check[A, B](x: A, y: B) {
- println("x = " + x)
- println("y = " + y)
- println("x equals y: " + (x equals y) + ", y equals x: " + (y equals x))
- println()
- }
-}
-import Serialize._
-
-//############################################################################
-// Test classes in package "scala"
-
-object Test1_scala {
-
- private def arrayToString[A](arr: Array[A]): String =
- arr.mkString("Array[",",","]")
-
- private def arrayEquals[A, B](a1: Array[A], a2: Array[B]): Boolean =
- (a1.length == a2.length) &&
- (Iterator.range(0, a1.length) forall { i => a1(i) == a2(i) })
-
- @serializable
- object WeekDay extends Enumeration {
- type WeekDay = Value
- val Monday, Tuesday, Wednesday, Thusday, Friday, Saturday, Sunday = Value
- }
- import WeekDay._, BigDecimal._, RoundingMode._
-
- val x0 = List(1, 2, 3)
- val x1 = Nil
- val x2 = None
- val x3 = Array(1, 2, 3)
- val x4 = { x: Int => 2 * x }
- val x5 = 'hello
- val x6 = ("BannerLimit", 12345)
- val x7 = BigDecimal.RoundingMode
- val x8 = WeekDay
- val x9 = UP // named element
- val x10 = Monday // unamed element
-
- try {
- val y0: List[Int] = read(write(x0))
- val y1: List[Nothing] = read(write(x1))
- val y2: Option[Nothing] = read(write(x2))
- val y3: Array[Int] = read(write(x3))
- val y4: Function[Int, Int] = read(write(x4))
- val y5: Symbol = read(write(x5))
- val y6: (String, Int) = read(write(x6))
- val y7: RoundingMode.type = read(write(x7))
- val y8: WeekDay.type = read(write(x8))
- val y9: RoundingMode = read(write(x9))
- val y10: WeekDay = read(write(x10))
-
- println("x0 = " + x0)
- println("y0 = " + y0)
- println("x0 eq y0: " + (x0 eq y0) + ", y0 eq x0: " + (y0 eq x0))
- println("x0 equals y0: " + (x0 equals y0) + ", y0 equals x0: " + (y0 equals x0))
- println()
- println("x1 = " + x1)
- println("y1 = " + y1)
- println("x1 eq y1: " + (x1 eq y1) + ", y1 eq x1: " + (y1 eq x1))
- println()
- println("x2 = " + x2)
- println("y2 = " + y2)
- println("x2 eq y2: " + (x2 eq y2) + ", y2 eq x2: " + (y2 eq x2))
- println()
- println("x3 = " + arrayToString(x3))
- println("y3 = " + arrayToString(y3))
- println("arrayEquals(x3, y3): " + arrayEquals(x3, y3))
- println()
- println("x4 = <na>")
- println("y4 = <na>")
- println("x4(2): " + x4(2) + " - y4(2): " + y4(2))
- println()
- println("x5 = " + x5)
- println("y5 = " + y5)
- println("x5 eq y5: " + (x5 eq y5) + ", y5 eq x5: " + (y5 eq x5))
- println("x5 equals y5: " + (x5 equals y5) + ", y5 equals x5: " + (y5 equals x5))
- println()
- println("x6 = " + x6)
- println("y6 = " + y6)
- println("x6 eq y6: " + (x6 eq y6) + ", y6 eq x6: " + (y6 eq x6))
- println("x6 equals y6: " + (x6 equals y6) + ", y6 equals x6: " + (y6 equals x6))
- println()
- println("x7 = " + x7)
- println("y7 = " + y7)
- println("x7 eq y7: " + (x7 eq y7) + ", y7 eq x7: " + (y7 eq x7))
- println("x7 equals y7: " + (x7 equals y7) + ", y7 equals x7: " + (y7 equals x7))
- println()
- println("x8 = " + x8)
- println("y8 = " + y8)
- println("x8 eq y8: " + (x8 eq y8) + ", y8 eq x8: " + (y8 eq x8))
- println("x8 equals y8: " + (x8 equals y8) + ", y8 equals x8: " + (y8 equals x8))
- println()
- println("x9 = " + x9)
- println("y9 = " + y9)
- println("x9 eq y9: " + (x9 eq y9) + ", y9 eq x9: " + (y9 eq x9))
- println("x9 equals y9: " + (x9 equals y9) + ", y9 equals x9: " + (y9 equals x9))
- println()
- println("x10 = " + x10)
- println("y10 = " + y10)
- println("x10 eq y10: " + (x10 eq y10) + ", y10 eq x10: " + (y10 eq x10))
- println("x10 equals y10: " + (x10 equals y10) + ", y10 equals x10: " + (y10 equals x10))
- println()
- println("x9 eq x10: " + (x9 eq x10) + ", x10 eq x9: " + (x10 eq x9))
- println("x9 equals x10: " + (x9 equals x10) + ", x10 equals x9: " + (x10 equals x9))
- println("x9 eq y10: " + (x9 eq y10) + ", y10 eq x9: " + (y10 eq x9))
- println("x9 equals y10: " + (x9 equals y10) + ", y10 equals x9: " + (y10 equals x9))
- println()
- }
- catch {
- case e: Exception =>
- e.printStackTrace()
- println("Error in Test1_scala: " + e)
- }
-}
-
-//############################################################################
-// Test classes in package "scala.collection.immutable"
-
-@serializable
-object Test2_immutable {
- import scala.collection.immutable.{
- BitSet, HashMap, ListMap, ListSet, Queue, Stack, TreeSet, TreeMap, Vector}
-
- val x1 = List(
- ("buffers", 20),
- ("layers", 2),
- ("title", 3)
- )
-
- val m1 = new HashMap[Int, String] + (0 -> "A", 1 -> "B", 2 -> "C")
-
- val x2 = new ListMap[String, Int] + ("buffers" -> 20, "layers" -> 2, "title" -> 3)
-
- val x3 = {
- val bs = new collection.mutable.BitSet()
- bs += 2; bs += 3
- bs.toImmutable
- }
-
- val x4 = new ListSet[Int]() + 3 + 5
-
- val x5 = Queue("a", "b", "c")
-
- val x6 = Stack("a", "b", "c")
-
- val x7 = new TreeMap[Int, String] + (42 -> "FortyTwo")
-
- val x8 = new TreeSet[Int]() + 2 + 0
-
- val x9 = Vector(1, 2, 3)
-
- try {
- val y1: List[Pair[String, Int]] = read(write(x1))
- val n1: HashMap[Int, String] = read(write(m1))
- val y2: ListMap[String, Int] = read(write(x2))
- val y3: BitSet = read(write(x3))
- val y4: ListSet[Int] = read(write(x4))
- val y5: Queue[String] = read(write(x5))
- val y6: Stack[String] = read(write(x6))
- val y7: TreeMap[Int, String] = read(write(x7))
- val y8: TreeSet[Int] = read(write(x8))
- val y9: Vector[Int] = read(write(x9))
-
- check(x1, y1)
- check(m1, n1)
- check(x2, y2)
- check(x3, y3)
- check(x4, y4)
- check(x5, y5)
- check(x6, y6)
- check(x7, y7)
- check(x8, y8)
- check(x9, y9)
- }
- catch {
- case e: Exception =>
- println("Error in Test2_immutable: " + e)
- throw e
- }
-}
-
-//############################################################################
-// Test classes in package "scala.collection.mutable"
-
-object Test3_mutable {
- import scala.collection.mutable.{
- ArrayBuffer, BitSet, HashMap, HashSet, History, LinkedList, ListBuffer,
- Publisher, Queue, RevertableHistory, Stack}
-
- val x0 = new ArrayBuffer[String]
- x0 ++= List("one", "two")
-
- val x2 = new BitSet()
- x2 += 0
- x2 += 8
- x2 += 9
-
- val x1 = new HashMap[String, Int]
- x1 ++= Test2_immutable.x1
-
- val x3 = new HashSet[String]
- x3 ++= Test2_immutable.x1.map(p => p._1)
-
- val x4 = new LinkedList[Int](2, null)
- x4.append(new LinkedList(3, null))
-
- val x5 = new Queue[Int]
- x5 ++= Test2_immutable.x1.map(p => p._2)
-
- val x6 = new Stack[Int]
- x6 pushAll x5
-
- val x7 = new ListBuffer[String]
- x7 ++= List("white", "black")
-
- @serializable
- class Feed extends Publisher[String, Feed] {
- override def toString() = "Feed"
- }
- val feed = new Feed
-
- val x8 = new History[String, Feed]
- x8.notify(feed, "hello")
-
- try {
- val y0: ArrayBuffer[String] = read(write(x0))
- val y1: HashMap[String, Int] = read(write(x1))
- val y2: BitSet = read(write(x2))
- val y3: HashSet[String] = read(write(x3))
- val y4: LinkedList[Int] = read(write(x4))
- val y5: Queue[Int] = read(write(x5))
- val y6: Stack[Int] = read(write(x6))
- val y7: ListBuffer[String] = read(write(x7))
- val y8: History[String, Feed] = read(write(x8))
-
- check(x0, y0)
- check(x1, y1)
- check(x2, y2)
- check(x3, y3)
- check(x4, y4)
- check(x5, y5)
- check(x6, y6)
- check(x7, y7)
- check(x8, y8)
- }
- catch {
- case e: Exception =>
- println("Error in Test3_mutable: " + e)
- }
-}
-
-//############################################################################
-// Test classes in package "scala.xml"
-
-object Test4_xml {
- import scala.xml.Elem
-
- val x1 = <html><title>title</title><body></body></html>;
-
- case class Person(name: String, age: Int)
-
- class AddressBook(a: Person*) {
- private val people: List[Person] = a.toList
- def toXHTML =
- <table cellpadding="2" cellspacing="0">
- <tr>
- <th>Last Name</th>
- <th>First Name</th>
- </tr>
- { for (p <- people) yield
- <tr>
- <td> { p.name } </td>
- <td> { p.age.toString() } </td>
- </tr> }
- </table>;
- }
-
- val people = new AddressBook(
- Person("Tom", 20),
- Person("Bob", 22),
- Person("James", 19))
-
- val x2 =
- <html>
- <body>
- { people.toXHTML }
- </body>
- </html>;
-
- try {
- val y1: scala.xml.Elem = read(write(x1))
- val y2: scala.xml.Elem = read(write(x2))
-
- check(x1, y1)
- check(x2, y2)
- }
- catch {
- case e: Exception =>
- println("Error in Test4_xml: " + e)
- }
-}
-
-//############################################################################
-// Test user-defined classes WITHOUT nesting
-
-@serializable
-class Person(_name: String) {
- private var name = _name
- override def toString() = name
- override def equals(that: Any): Boolean =
- that.isInstanceOf[Person] &&
- (name == that.asInstanceOf[Person].name)
-}
-
-@serializable
-class Employee(_name: String) {
- private var name = _name
- override def toString() = name
-}
-@serializable
-object bob extends Employee("Bob")
-
-object Test5 {
- val x1 = new Person("Tim")
- val x2 = bob
-
- try {
- val y1: Person = read(write(x1))
- val y2: Employee = read(write(x2))
-
- check(x1, y1)
- check(x2, y2)
- }
- catch {
- case e: Exception =>
- println("Error in Test5: " + e)
- }
-}
-
-//############################################################################
-// Test user-defined classes WITH nesting
-
-@serializable
-object Test6 {
- @serializable
- object bill extends Employee("Bill") {
- val x = paul
- }
- @serializable
- object paul extends Person("Paul") {
- val x = 4 // bill; => StackOverflowException !!!
- }
- val x1 = new Person("John")
- val x2 = bill
- val x3 = paul
-
- try {
- val y1: Person = read(write(x1))
- val y2: Employee = read(write(x2))
- val y3: Person = read(write(x3))
-
- check(x1, y1)
- check(x2, y2)
- check(x3, y3)
- }
- catch {
- case e: Exception =>
- println("Error in Test6: " + e)
- }
-}
-
-//############################################################################
-// Test code
-
-object Test {
- def main(args: Array[String]) {
- Test1_scala
- Test2_immutable
- Test3_mutable
- Test4_xml
- Test5
- Test6
- }
-}
-
-//############################################################################
-
diff --git a/test/files/jvm/t1801.check b/test/pending/jvm/t1801.check
index bf78a99db9..bf78a99db9 100644
--- a/test/files/jvm/t1801.check
+++ b/test/pending/jvm/t1801.check
diff --git a/test/files/jvm/t1801.scala b/test/pending/jvm/t1801.scala
index 6ed7c56336..6ed7c56336 100644
--- a/test/files/jvm/t1801.scala
+++ b/test/pending/jvm/t1801.scala
diff --git a/test/files/jvm/t2515.check b/test/pending/jvm/t2515.check
index 8cb8bde11e..8cb8bde11e 100644
--- a/test/files/jvm/t2515.check
+++ b/test/pending/jvm/t2515.check
diff --git a/test/pending/jvm/t2515.scala b/test/pending/jvm/t2515.scala
new file mode 100644
index 0000000000..ee655967f3
--- /dev/null
+++ b/test/pending/jvm/t2515.scala
@@ -0,0 +1,43 @@
+import scala.actors.{Futures, TIMEOUT}
+import scala.actors.Actor._
+
+object Test {
+
+ def compute(): Option[Boolean] = {
+ val fts = for (j <- 0 until 5) yield Futures.future {
+ receiveWithin (100) {
+ case TIMEOUT => true
+ case other => false
+ }
+ }
+ val done = Futures.awaitAll(2000, fts.toArray: _*) // list to array, as varargs
+ if (done.contains(None))
+ None
+ else
+ Some(true)
+ }
+
+ def main(args:Array[String]) : Unit = {
+ val ft = Futures.future {
+ val format = new java.text.DecimalFormat("000.00'ms'")
+ var iter = 1
+ val done = 11
+ while (iter < done) {
+ val start = System.nanoTime()
+ val result = compute()
+ val time = System.nanoTime() - start
+ result match {
+ case Some(result) =>
+ //printf("Iteration %2d succeeded after %s %n", iter, format.format(time / 1e6))
+ printf("Iteration %2d succeeded%n", iter)
+ iter += 1
+ case None =>
+ printf(">>>> Iteration %2d failed after %s <<<<< %n", iter, format.format(time / 1e6))
+ iter = done
+ }
+ }
+ }
+ ft()
+ }
+
+}
diff --git a/test/pending/jvm/t2705/GenericInterface.java b/test/pending/jvm/t2705/GenericInterface.java
new file mode 100644
index 0000000000..ff4ecd403d
--- /dev/null
+++ b/test/pending/jvm/t2705/GenericInterface.java
@@ -0,0 +1 @@
+public interface GenericInterface<T> { }
diff --git a/test/pending/jvm/t2705/Methods.java b/test/pending/jvm/t2705/Methods.java
new file mode 100644
index 0000000000..00eed6c595
--- /dev/null
+++ b/test/pending/jvm/t2705/Methods.java
@@ -0,0 +1,4 @@
+public class Methods {
+ public static <T> GenericInterface<T> getGenericInterface() { return null; }
+ public static <T> void acceptGenericInterface(GenericInterface<? super T> gi) { }
+} \ No newline at end of file
diff --git a/test/pending/jvm/t2705/t2705.scala b/test/pending/jvm/t2705/t2705.scala
new file mode 100644
index 0000000000..cc3cfd9faf
--- /dev/null
+++ b/test/pending/jvm/t2705/t2705.scala
@@ -0,0 +1,5 @@
+class GenericsCompilerCrashTest {
+ def test() {
+ Methods.acceptGenericInterface(Methods.getGenericInterface())
+ }
+} \ No newline at end of file
diff --git a/test/pending/jvm/timeout.scala b/test/pending/jvm/timeout.scala
index 3005beab2c..22b3647dce 100644
--- a/test/pending/jvm/timeout.scala
+++ b/test/pending/jvm/timeout.scala
@@ -16,7 +16,7 @@ object Test extends Application {
case 'doTiming =>
val s = sender
reactWithin(500) {
- case TIMEOUT =>
+ case TIMEOUT =>
s ! Timing(System.currentTimeMillis)
}
}
diff --git a/test/pending/neg/bug112506A.scala b/test/pending/neg/bug112506A.scala
deleted file mode 100644
index 5dffb5ebe6..0000000000
--- a/test/pending/neg/bug112506A.scala
+++ /dev/null
@@ -1,19 +0,0 @@
-package test;
-import scala.collection.immutable.ListSet
-import scala.collection.mutable._;
-trait TypeManagerXXX {
- trait TypedNode;
- type Node;
-}
-trait ScalaTyperXXX extends TypeManagerXXX {
- private var typed : Node = null;
- private val dependMap = new HashMap[String,ListSet[TypedNode]];
- override def lookupEntry(name: String): String = {
- val set = dependMap.get(name) match {
- case Some(set) => set;
- case None => new ListSet[Node]
- }
- dependMap.update(name, set + typed);
- throw new Error;
- }
-}
diff --git a/test/pending/neg/bug1210.scala b/test/pending/neg/bug1210.scala
deleted file mode 100644
index fc2c954ff2..0000000000
--- a/test/pending/neg/bug1210.scala
+++ /dev/null
@@ -1,10 +0,0 @@
-object Test {
- def id[T](f: T => T): T = error("bla")
-
- abstract class M { self =>
- type Settings
- type selfType = M {type Settings = self.Settings}
-
- val v: selfType = id[M.this.selfType](_.v)
- }
-}
diff --git a/test/pending/neg/bug1987.scala b/test/pending/neg/bug1987.scala
deleted file mode 100644
index d45f1b0f0d..0000000000
--- a/test/pending/neg/bug1987.scala
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-// Copyright Shunsuke Sogame 2008-2009.
-// Distributed under the terms of an MIT-style license.
-
-
-package object overloading {
- def bar(f: (Int) => Unit): Unit = ()
- def bar(f: (Int, Int) => Unit): Unit = ()
-}
-
-class PackageObjectOverloadingTest {
- overloading.bar( (i: Int) => () ) // doesn't compile.
-}
diff --git a/test/pending/neg/dbldef.check b/test/pending/neg/dbldef.check
new file mode 100644
index 0000000000..3ee63475e4
--- /dev/null
+++ b/test/pending/neg/dbldef.check
@@ -0,0 +1,14 @@
+dbldef.scala:1: error: x is already defined as value x
+case class test0(x: Int, x: Float)
+ ^
+dbldef.scala:1: error: type mismatch;
+ found : Float
+ required: Int
+case class test0(x: Int, x: Float)
+ ^
+dbldef.scala:1: error: type mismatch;
+ found : Float
+ required: Int
+case class test0(x: Int, x: Float)
+ ^
+three errors found
diff --git a/test/pending/neg/dbldef.scala b/test/pending/neg/dbldef.scala
new file mode 100644
index 0000000000..c70fb97b2c
--- /dev/null
+++ b/test/pending/neg/dbldef.scala
@@ -0,0 +1 @@
+case class test0(x: Int, x: Float)
diff --git a/test/pending/neg/dot-classpath.flags b/test/pending/neg/dot-classpath.flags
new file mode 100644
index 0000000000..5af7a81156
--- /dev/null
+++ b/test/pending/neg/dot-classpath.flags
@@ -0,0 +1 @@
+-Ylog-classpath \ No newline at end of file
diff --git a/test/pending/neg/dot-classpath/S_1.scala b/test/pending/neg/dot-classpath/S_1.scala
new file mode 100644
index 0000000000..f8bd12404c
--- /dev/null
+++ b/test/pending/neg/dot-classpath/S_1.scala
@@ -0,0 +1,3 @@
+package foo {
+ class Bippy
+}
diff --git a/test/pending/neg/dot-classpath/S_2.scala b/test/pending/neg/dot-classpath/S_2.scala
new file mode 100644
index 0000000000..e44c1a5bb8
--- /dev/null
+++ b/test/pending/neg/dot-classpath/S_2.scala
@@ -0,0 +1,3 @@
+class A {
+ def f = new foo.Bippy
+} \ No newline at end of file
diff --git a/test/files/neg/plugin-after-terminal.check b/test/pending/neg/plugin-after-terminal.check
index 096efe09cd..096efe09cd 100644
--- a/test/files/neg/plugin-after-terminal.check
+++ b/test/pending/neg/plugin-after-terminal.check
diff --git a/test/files/neg/plugin-after-terminal.flags b/test/pending/neg/plugin-after-terminal.flags
index 6a44376213..6a44376213 100644
--- a/test/files/neg/plugin-after-terminal.flags
+++ b/test/pending/neg/plugin-after-terminal.flags
diff --git a/test/pending/neg/plugin-after-terminal/lib/plugins.jar.desired.sha1 b/test/pending/neg/plugin-after-terminal/lib/plugins.jar.desired.sha1
new file mode 100644
index 0000000000..3e382f3a12
--- /dev/null
+++ b/test/pending/neg/plugin-after-terminal/lib/plugins.jar.desired.sha1
@@ -0,0 +1 @@
+f174c50c4363c492362a05c72dd45b0da18fdcd8 ?plugins.jar
diff --git a/test/files/neg/plugin-after-terminal/misc/build.sh b/test/pending/neg/plugin-after-terminal/misc/build.sh
index 8899009d7f..8899009d7f 100755
--- a/test/files/neg/plugin-after-terminal/misc/build.sh
+++ b/test/pending/neg/plugin-after-terminal/misc/build.sh
diff --git a/test/files/neg/plugin-after-terminal/misc/scalac-plugin.xml b/test/pending/neg/plugin-after-terminal/misc/scalac-plugin.xml
index 90ff27dc2a..90ff27dc2a 100644
--- a/test/files/neg/plugin-after-terminal/misc/scalac-plugin.xml
+++ b/test/pending/neg/plugin-after-terminal/misc/scalac-plugin.xml
diff --git a/test/pending/neg/plugin-after-terminal/src/ThePlugin.scala b/test/pending/neg/plugin-after-terminal/src/ThePlugin.scala
new file mode 100644
index 0000000000..2a4607392f
--- /dev/null
+++ b/test/pending/neg/plugin-after-terminal/src/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 = "afterterminal"
+ val description = "Declares one plugin that wants to be after the terminal phase"
+ val components = List[PluginComponent](thePhase)
+
+ private object thePhase extends PluginComponent {
+ val global = ThePlugin.this.global
+
+ val runsAfter = List[String]("terminal")
+
+ val phaseName = ThePlugin.this.name
+
+ def newPhase(prev: Phase) = new ThePhase(prev)
+ }
+
+ private class ThePhase(prev: Phase) extends Phase(prev) {
+ def name = ThePlugin.this.name
+ def run {}
+ }
+}
+
diff --git a/test/files/neg/plugin-after-terminal/testsource.scala b/test/pending/neg/plugin-after-terminal/testsource.scala
index 519d162fdf..519d162fdf 100644
--- a/test/files/neg/plugin-after-terminal/testsource.scala
+++ b/test/pending/neg/plugin-after-terminal/testsource.scala
diff --git a/test/files/neg/plugin-before-parser.check b/test/pending/neg/plugin-before-parser.check
index 9a407923b1..9a407923b1 100644
--- a/test/files/neg/plugin-before-parser.check
+++ b/test/pending/neg/plugin-before-parser.check
diff --git a/test/files/neg/plugin-before-parser.flags b/test/pending/neg/plugin-before-parser.flags
index 632530922c..632530922c 100644
--- a/test/files/neg/plugin-before-parser.flags
+++ b/test/pending/neg/plugin-before-parser.flags
diff --git a/test/pending/neg/plugin-before-parser/lib/plugins.jar.desired.sha1 b/test/pending/neg/plugin-before-parser/lib/plugins.jar.desired.sha1
new file mode 100644
index 0000000000..e82eed76ce
--- /dev/null
+++ b/test/pending/neg/plugin-before-parser/lib/plugins.jar.desired.sha1
@@ -0,0 +1 @@
+d7b100ad483484b598b7cd643424bd2e33898a0d ?plugins.jar
diff --git a/test/files/neg/plugin-before-parser/misc/build.sh b/test/pending/neg/plugin-before-parser/misc/build.sh
index 8899009d7f..8899009d7f 100755
--- a/test/files/neg/plugin-before-parser/misc/build.sh
+++ b/test/pending/neg/plugin-before-parser/misc/build.sh
diff --git a/test/files/neg/plugin-before-parser/misc/scalac-plugin.xml b/test/pending/neg/plugin-before-parser/misc/scalac-plugin.xml
index 90ff27dc2a..90ff27dc2a 100644
--- a/test/files/neg/plugin-before-parser/misc/scalac-plugin.xml
+++ b/test/pending/neg/plugin-before-parser/misc/scalac-plugin.xml
diff --git a/test/pending/neg/plugin-before-parser/src/ThePlugin.scala b/test/pending/neg/plugin-before-parser/src/ThePlugin.scala
new file mode 100644
index 0000000000..7ca896650d
--- /dev/null
+++ b/test/pending/neg/plugin-before-parser/src/ThePlugin.scala
@@ -0,0 +1,32 @@
+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 = "beforeparser"
+ val description = "Declares one plugin that wants to be before the parser phase"
+ val components = List[PluginComponent](thePhase)
+
+ private object thePhase extends PluginComponent {
+ val global = ThePlugin.this.global
+
+ val runsAfter = List[String]()
+ override val runsBefore = List[String]("parser")
+
+ val phaseName = ThePlugin.this.name
+
+ def newPhase(prev: Phase) = new ThePhase(prev)
+ }
+
+ private class ThePhase(prev: Phase) extends Phase(prev) {
+ def name = ThePlugin.this.name
+ def run {}
+ }
+}
+
diff --git a/test/files/neg/plugin-before-parser/testsource.scala b/test/pending/neg/plugin-before-parser/testsource.scala
index 9928aaa83c..9928aaa83c 100644
--- a/test/files/neg/plugin-before-parser/testsource.scala
+++ b/test/pending/neg/plugin-before-parser/testsource.scala
diff --git a/test/files/neg/plugin-cyclic-dependency.check b/test/pending/neg/plugin-cyclic-dependency.check
index a29bc3f5be..a29bc3f5be 100644
--- a/test/files/neg/plugin-cyclic-dependency.check
+++ b/test/pending/neg/plugin-cyclic-dependency.check
diff --git a/test/files/neg/plugin-cyclic-dependency.flags b/test/pending/neg/plugin-cyclic-dependency.flags
index 8716aaa65f..8716aaa65f 100644
--- a/test/files/neg/plugin-cyclic-dependency.flags
+++ b/test/pending/neg/plugin-cyclic-dependency.flags
diff --git a/test/pending/neg/plugin-cyclic-dependency/lib/plugins.jar.desired.sha1 b/test/pending/neg/plugin-cyclic-dependency/lib/plugins.jar.desired.sha1
new file mode 100644
index 0000000000..7e565e9e61
--- /dev/null
+++ b/test/pending/neg/plugin-cyclic-dependency/lib/plugins.jar.desired.sha1
@@ -0,0 +1 @@
+7e6be9e33a87194e7061f94f6be115619f91ada2 ?plugins.jar
diff --git a/test/files/neg/plugin-cyclic-dependency/misc/build.sh b/test/pending/neg/plugin-cyclic-dependency/misc/build.sh
index 8899009d7f..8899009d7f 100755
--- a/test/files/neg/plugin-cyclic-dependency/misc/build.sh
+++ b/test/pending/neg/plugin-cyclic-dependency/misc/build.sh
diff --git a/test/files/neg/plugin-cyclic-dependency/misc/scalac-plugin.xml b/test/pending/neg/plugin-cyclic-dependency/misc/scalac-plugin.xml
index 90ff27dc2a..90ff27dc2a 100644
--- a/test/files/neg/plugin-cyclic-dependency/misc/scalac-plugin.xml
+++ b/test/pending/neg/plugin-cyclic-dependency/misc/scalac-plugin.xml
diff --git a/test/pending/neg/plugin-cyclic-dependency/src/ThePlugin.scala b/test/pending/neg/plugin-cyclic-dependency/src/ThePlugin.scala
new file mode 100644
index 0000000000..bd94ce60d7
--- /dev/null
+++ b/test/pending/neg/plugin-cyclic-dependency/src/ThePlugin.scala
@@ -0,0 +1,41 @@
+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 = "cyclicdependency"
+ val description = "Declares two phases that have a cyclic dependency"
+ val components = List[PluginComponent](thePhase1,thePhase2)
+
+ private object thePhase1 extends PluginComponent {
+ val global = ThePlugin.this.global
+
+ val runsAfter = List[String]("tailcalls","cyclicdependency2")
+
+ val phaseName = ThePlugin.this.name + "1"
+
+ def newPhase(prev: Phase) = new ThePhase(prev)
+ }
+
+ private object thePhase2 extends PluginComponent {
+ val global = ThePlugin.this.global
+
+ val runsAfter = List[String]("dce","cyclicdependency1")
+
+ val phaseName = ThePlugin.this.name + "2"
+
+ def newPhase(prev: Phase) = new ThePhase(prev)
+ }
+
+ private class ThePhase(prev: Phase) extends Phase(prev) {
+ def name = ThePlugin.this.name
+ def run {}
+ }
+}
+
diff --git a/test/files/neg/plugin-cyclic-dependency/testsource.scala b/test/pending/neg/plugin-cyclic-dependency/testsource.scala
index f1513ec9a0..f1513ec9a0 100644
--- a/test/files/neg/plugin-cyclic-dependency/testsource.scala
+++ b/test/pending/neg/plugin-cyclic-dependency/testsource.scala
diff --git a/test/files/neg/plugin-multiple-rafter.check b/test/pending/neg/plugin-multiple-rafter.check
index c54f884feb..c54f884feb 100644
--- a/test/files/neg/plugin-multiple-rafter.check
+++ b/test/pending/neg/plugin-multiple-rafter.check
diff --git a/test/files/neg/plugin-multiple-rafter.flags b/test/pending/neg/plugin-multiple-rafter.flags
index dcae7f2f96..dcae7f2f96 100644
--- a/test/files/neg/plugin-multiple-rafter.flags
+++ b/test/pending/neg/plugin-multiple-rafter.flags
diff --git a/test/pending/neg/plugin-multiple-rafter/lib/plugins.jar.desired.sha1 b/test/pending/neg/plugin-multiple-rafter/lib/plugins.jar.desired.sha1
new file mode 100644
index 0000000000..f4905fcbd4
--- /dev/null
+++ b/test/pending/neg/plugin-multiple-rafter/lib/plugins.jar.desired.sha1
@@ -0,0 +1 @@
+2bda582b574287429ad5ee2e1d9a3effc88b0a5f ?plugins.jar
diff --git a/test/files/neg/plugin-multiple-rafter/misc/build.sh b/test/pending/neg/plugin-multiple-rafter/misc/build.sh
index 8899009d7f..8899009d7f 100755
--- a/test/files/neg/plugin-multiple-rafter/misc/build.sh
+++ b/test/pending/neg/plugin-multiple-rafter/misc/build.sh
diff --git a/test/files/neg/plugin-multiple-rafter/misc/scalac-plugin.xml b/test/pending/neg/plugin-multiple-rafter/misc/scalac-plugin.xml
index 90ff27dc2a..90ff27dc2a 100644
--- a/test/files/neg/plugin-multiple-rafter/misc/scalac-plugin.xml
+++ b/test/pending/neg/plugin-multiple-rafter/misc/scalac-plugin.xml
diff --git a/test/pending/neg/plugin-multiple-rafter/src/ThePlugin.scala b/test/pending/neg/plugin-multiple-rafter/src/ThePlugin.scala
new file mode 100644
index 0000000000..819176fa88
--- /dev/null
+++ b/test/pending/neg/plugin-multiple-rafter/src/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 = "multi-rafter"
+ val description = ""
+ val components = List[PluginComponent](thePhase)
+
+ private object thePhase extends PluginComponent {
+ val global = ThePlugin.this.global
+
+ val runsAfter = List[String]()
+ override val runsRightAfter = Some("explicitouter")
+ val phaseName = ThePlugin.this.name
+
+ def newPhase(prev: Phase) = new ThePhase(prev)
+ }
+
+ private class ThePhase(prev: Phase) extends Phase(prev) {
+ def name = ThePlugin.this.name
+ def run {}
+ }
+}
+
diff --git a/test/files/neg/plugin-multiple-rafter/testsource.scala b/test/pending/neg/plugin-multiple-rafter/testsource.scala
index f73db1eb60..f73db1eb60 100644
--- a/test/files/neg/plugin-multiple-rafter/testsource.scala
+++ b/test/pending/neg/plugin-multiple-rafter/testsource.scala
diff --git a/test/files/neg/plugin-rafter-before-1.check b/test/pending/neg/plugin-rafter-before-1.check
index 19ed4d2fba..19ed4d2fba 100644
--- a/test/files/neg/plugin-rafter-before-1.check
+++ b/test/pending/neg/plugin-rafter-before-1.check
diff --git a/test/files/neg/plugin-rafter-before-1.flags b/test/pending/neg/plugin-rafter-before-1.flags
index 8bf03145b9..8bf03145b9 100644
--- a/test/files/neg/plugin-rafter-before-1.flags
+++ b/test/pending/neg/plugin-rafter-before-1.flags
diff --git a/test/pending/neg/plugin-rafter-before-1/lib/plugins.jar.desired.sha1 b/test/pending/neg/plugin-rafter-before-1/lib/plugins.jar.desired.sha1
new file mode 100644
index 0000000000..8ad591b6ea
--- /dev/null
+++ b/test/pending/neg/plugin-rafter-before-1/lib/plugins.jar.desired.sha1
@@ -0,0 +1 @@
+af91fd67ccef349e7f8ea662615e17796a339485 ?plugins.jar
diff --git a/test/files/neg/plugin-rafter-before-1/misc/build.sh b/test/pending/neg/plugin-rafter-before-1/misc/build.sh
index 8899009d7f..8899009d7f 100755
--- a/test/files/neg/plugin-rafter-before-1/misc/build.sh
+++ b/test/pending/neg/plugin-rafter-before-1/misc/build.sh
diff --git a/test/files/neg/plugin-rafter-before-1/misc/scalac-plugin.xml b/test/pending/neg/plugin-rafter-before-1/misc/scalac-plugin.xml
index 90ff27dc2a..90ff27dc2a 100644
--- a/test/files/neg/plugin-rafter-before-1/misc/scalac-plugin.xml
+++ b/test/pending/neg/plugin-rafter-before-1/misc/scalac-plugin.xml
diff --git a/test/pending/neg/plugin-rafter-before-1/src/ThePlugin.scala b/test/pending/neg/plugin-rafter-before-1/src/ThePlugin.scala
new file mode 100644
index 0000000000..81ba85ae80
--- /dev/null
+++ b/test/pending/neg/plugin-rafter-before-1/src/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 = "rafter-before-1"
+ val description = ""
+ val components = List[PluginComponent](thePhase1)
+
+ private object thePhase1 extends PluginComponent {
+ val global = ThePlugin.this.global
+
+ val runsAfter = List[String]("refchecks")
+ override val runsBefore = List[String]("erasure")
+ val phaseName = ThePlugin.this.name
+
+ def newPhase(prev: Phase) = new ThePhase(prev)
+ }
+
+ private class ThePhase(prev: Phase) extends Phase(prev) {
+ def name = ThePlugin.this.name
+ def run {}
+ }
+}
+
diff --git a/test/files/neg/plugin-rafter-before-1/testsource.scala b/test/pending/neg/plugin-rafter-before-1/testsource.scala
index 836459db22..836459db22 100644
--- a/test/files/neg/plugin-rafter-before-1/testsource.scala
+++ b/test/pending/neg/plugin-rafter-before-1/testsource.scala
diff --git a/test/files/neg/plugin-rightafter-terminal.check b/test/pending/neg/plugin-rightafter-terminal.check
index 6fe4f63c82..6fe4f63c82 100644
--- a/test/files/neg/plugin-rightafter-terminal.check
+++ b/test/pending/neg/plugin-rightafter-terminal.check
diff --git a/test/files/neg/plugin-rightafter-terminal.flags b/test/pending/neg/plugin-rightafter-terminal.flags
index 948a318668..948a318668 100644
--- a/test/files/neg/plugin-rightafter-terminal.flags
+++ b/test/pending/neg/plugin-rightafter-terminal.flags
diff --git a/test/pending/neg/plugin-rightafter-terminal/lib/plugins.jar.desired.sha1 b/test/pending/neg/plugin-rightafter-terminal/lib/plugins.jar.desired.sha1
new file mode 100644
index 0000000000..c2e2b9cd43
--- /dev/null
+++ b/test/pending/neg/plugin-rightafter-terminal/lib/plugins.jar.desired.sha1
@@ -0,0 +1 @@
+8cccde4914da2058dca893783c231cda23855603 ?plugins.jar
diff --git a/test/files/neg/plugin-rightafter-terminal/misc/build.sh b/test/pending/neg/plugin-rightafter-terminal/misc/build.sh
index 8899009d7f..8899009d7f 100755
--- a/test/files/neg/plugin-rightafter-terminal/misc/build.sh
+++ b/test/pending/neg/plugin-rightafter-terminal/misc/build.sh
diff --git a/test/files/neg/plugin-rightafter-terminal/misc/scalac-plugin.xml b/test/pending/neg/plugin-rightafter-terminal/misc/scalac-plugin.xml
index 90ff27dc2a..90ff27dc2a 100644
--- a/test/files/neg/plugin-rightafter-terminal/misc/scalac-plugin.xml
+++ b/test/pending/neg/plugin-rightafter-terminal/misc/scalac-plugin.xml
diff --git a/test/pending/neg/plugin-rightafter-terminal/src/ThePlugin.scala b/test/pending/neg/plugin-rightafter-terminal/src/ThePlugin.scala
new file mode 100644
index 0000000000..9d6d30b327
--- /dev/null
+++ b/test/pending/neg/plugin-rightafter-terminal/src/ThePlugin.scala
@@ -0,0 +1,32 @@
+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 = "rightafterterminal"
+ val description = "Declares one plugin that wants to be right after the terminal phase"
+ val components = List[PluginComponent](thePhase)
+
+ private object thePhase extends PluginComponent {
+ val global = ThePlugin.this.global
+
+ val runsAfter = List[String]()
+ override val runsRightAfter = Some("terminal")
+
+ val phaseName = ThePlugin.this.name
+
+ def newPhase(prev: Phase) = new ThePhase(prev)
+ }
+
+ private class ThePhase(prev: Phase) extends Phase(prev) {
+ def name = ThePlugin.this.name
+ def run {}
+ }
+}
+
diff --git a/test/files/neg/plugin-rightafter-terminal/testsource.scala b/test/pending/neg/plugin-rightafter-terminal/testsource.scala
index 7af767b638..7af767b638 100644
--- a/test/files/neg/plugin-rightafter-terminal/testsource.scala
+++ b/test/pending/neg/plugin-rightafter-terminal/testsource.scala
diff --git a/test/pending/neg/scopes.check b/test/pending/neg/scopes.check
deleted file mode 100644
index bb8e15058b..0000000000
--- a/test/pending/neg/scopes.check
+++ /dev/null
@@ -1,30 +0,0 @@
-scopes.scala:1: error: x is already defined as value x
-case class test0(x: int, x: float)
- ^
-scopes.scala:5: error: t is already defined as type t
- type t = float
- ^
-scopes.scala:7: error: x is already defined as value x
- val x: float = .0f;
- ^
-scopes.scala:10: error: y is already defined as value y
- val y: float = .0f
- ^
-scopes.scala:13: error: x is already defined as value x
- def f1(x: int, x: float) = x
- ^
-scopes.scala:14: error: y is already defined as value y
- def f2(x: int)(y: int, y: float) = x + y
- ^
-scopes.scala:15: error: x is already defined as value x
- val closure = (x: int, x: float) => x
- ^
-scopes.scala:17: error: x is already defined as value x
- case x::x => x
- ^
-scopes.scala:1: error: type mismatch;
- found : float
- required: int
-case class test0(x: int, x: float)
- ^
-9 errors found
diff --git a/test/pending/neg/scopes.scala b/test/pending/neg/scopes.scala
deleted file mode 100644
index e38a0a3d2e..0000000000
--- a/test/pending/neg/scopes.scala
+++ /dev/null
@@ -1,20 +0,0 @@
-case class test0(x: int, x: float)
-
-object test1 {
- type t = int
- type t = float
- val x: int = 0
- val x: float = .0f;
- {
- val y: int = 0
- val y: float = .0f
- ()
- }
- def f1(x: int, x: float) = x
- def f2(x: int)(y: int, y: float) = x + y
- val closure = (x: int, x: float) => x
- List() match {
- case x::x => x
- case Nil => Nil
- }
-}
diff --git a/test/pending/neg/t0513.scala b/test/pending/neg/t0513.scala
deleted file mode 100644
index 0082b0e563..0000000000
--- a/test/pending/neg/t0513.scala
+++ /dev/null
@@ -1,6 +0,0 @@
-object Test {
- case class Y[T1, T2 <: T1]
- //val test = Y[Nothing, Int] // Compiler error
- case class Test[T]
- val test2 = Test[Y[Nothing, Int]] // No error
-}
diff --git a/test/pending/neg/t0625.check b/test/pending/neg/t0625.check
deleted file mode 100644
index 45a35eb157..0000000000
--- a/test/pending/neg/t0625.check
+++ /dev/null
@@ -1,7 +0,0 @@
-<insert expected error message, current one is the following>
-
-t0625.scala:3: error: inferred the kinds of the type arguments (Option[B],Int) do not conform to the expected kinds of the type parameters (type C,type T).
-Option[B]'s type parameters do not match type C's expected parameters: class Option has one type parameter, but type C has one
- idMap(Some(0))
- ^
-one error found
diff --git a/test/pending/neg/t0625.scala b/test/pending/neg/t0625.scala
deleted file mode 100644
index a44a04fd97..0000000000
--- a/test/pending/neg/t0625.scala
+++ /dev/null
@@ -1,4 +0,0 @@
-object Test {
- def idMap[C[_],T](m: { def map[U](f: T => U): C[U] }): C[T] = m.map(t => t)
- idMap(Some(0))
-}
diff --git a/test/pending/neg/t0653.check b/test/pending/neg/t0653.check
deleted file mode 100644
index cb5ca65b8e..0000000000
--- a/test/pending/neg/t0653.check
+++ /dev/null
@@ -1,5 +0,0 @@
-t0653.scala:5: error: inferred the kinds of the type arguments (InL[Nothing,Nothing]) do not conform to the expected kinds of the type parameters (type Op) in class Fix.
-InL[Nothing,Nothing]'s type parameters do not match type Op's expected parameters: class InL has two type parameters, but type Op has one
- val zero = new Fix(new InL)
- ^
-one error found
diff --git a/test/pending/neg/t0653.scala b/test/pending/neg/t0653.scala
index 156aa2d701..26204a8b40 100644
--- a/test/pending/neg/t0653.scala
+++ b/test/pending/neg/t0653.scala
@@ -1,6 +1,30 @@
-class InL[A, B]
+// What is this test in place to test for?
+//
+class One[A]
+class Two[A, B]
class Fix[Op[A]](x : Op[Fix[Op]])
class FixTest {
- val zero = new Fix(new InL)
+ // works
+ // val zero = new Fix[One](new One)
+
+ // don't work:
+ val two = new Fix(new Two) // this was what I found here
+ val zero = new Fix(new One) // this seems like something which could plausibly work
+
+ // neg/t0653.scala:12: error: no type parameters for constructor Fix: (x: Op[Fix[Op[A]]])Fix[Op[A]] exist so that it can be applied to arguments (Two[Nothing,Nothing])
+ // --- because ---
+ // argument expression's type is not compatible with formal parameter type;
+ // found : Two[Nothing,Nothing]
+ // required: ?Op[ Fix[?Op[ A ]] ]
+ // val two = new Fix(new Two) // this was what I found here
+ // ^
+ // neg/t0653.scala:13: error: no type parameters for constructor Fix: (x: Op[Fix[Op[A]]])Fix[Op[A]] exist so that it can be applied to arguments (One[Nothing])
+ // --- because ---
+ // argument expression's type is not compatible with formal parameter type;
+ // found : One[Nothing]
+ // required: ?Op[ Fix[?Op[ A ]] ]
+ // val zero = new Fix(new One) // this seems like something which could plausibly work
+ // ^
+ // two errors found
}
diff --git a/test/pending/neg/t1038.check b/test/pending/neg/t1038.check
deleted file mode 100644
index 3bfd479f42..0000000000
--- a/test/pending/neg/t1038.check
+++ /dev/null
@@ -1,4 +0,0 @@
-t1038.scala:4: error: wrong number of arguments for constructor X: (Int)X
- val a = new X
- ^
-one error found
diff --git a/test/pending/neg/t1038.scala b/test/pending/neg/t1038.scala
deleted file mode 100644
index 7157aafa06..0000000000
--- a/test/pending/neg/t1038.scala
+++ /dev/null
@@ -1,7 +0,0 @@
-class X(x : Int)
-
-object Y {
- val a = new X
- import a._
- implicit val b : Int = 1
-}
diff --git a/test/pending/neg/t1545.scala b/test/pending/neg/t1545.scala
deleted file mode 100755
index d7c0245725..0000000000
--- a/test/pending/neg/t1545.scala
+++ /dev/null
@@ -1,16 +0,0 @@
-object Main extends Application {
-
- case class Foo (field : Option[String])
-
- val x : PartialFunction[Foo,Int] =
- {
- c => c.field match {
- case Some (s) => 42
- case None => 99
- }
- }
-
- println (x (Foo (None))) // prints 99
- println (x (Foo (Some ("foo")))) // prints 42
-
-}
diff --git a/test/pending/neg/t1845.scala b/test/pending/neg/t1845.scala
deleted file mode 100644
index cfb28aa03c..0000000000
--- a/test/pending/neg/t1845.scala
+++ /dev/null
@@ -1,12 +0,0 @@
-// Compiling the attached code makes scalac give a NPE.
-
-import scala.util.parsing.combinator.syntactical.TokenParsers
-import scala.util.parsing.combinator.lexical.StdLexical
-import scala.util.parsing.syntax.StdTokens
-
-class MyTokenParsers extends TokenParsers {
- import lexical._
- type Tokens = StdTokens
- type Elem = lexical.Token
- val lexical = new StdLexical
-}
diff --git a/test/pending/neg/t2078.scala b/test/pending/neg/t2078.scala
deleted file mode 100644
index a697afc646..0000000000
--- a/test/pending/neg/t2078.scala
+++ /dev/null
@@ -1,9 +0,0 @@
-class A[-S](y : S) {
- val f = new { val x = y }
-}
-
-object Test extends Application {
- val a = new A(1)
- val b = a : A[Nothing]
- b.f.x
-}
diff --git a/test/pending/neg/t2079.scala b/test/pending/neg/t2079.scala
deleted file mode 100644
index a86674c7e0..0000000000
--- a/test/pending/neg/t2079.scala
+++ /dev/null
@@ -1,25 +0,0 @@
-trait A {
- type T
- var v : T
-}
-
-object B {
- def f(x : { val y : A }) { x.y.v = x.y.v }
-
- var a : A = _
- var b : Boolean = false
- def y : A = {
- if(b) {
- a = new A { type T = Int; var v = 1 }
- a
- } else {
- a = new A { type T = String; var v = "" }
- b = true
- a
- }
- }
-}
-
-object Test extends Application {
- B.f(B)
-}
diff --git a/test/pending/neg/t2080.scala b/test/pending/neg/t2080.scala
index 0880a40faa..3f4306c091 100644
--- a/test/pending/neg/t2080.scala
+++ b/test/pending/neg/t2080.scala
@@ -14,4 +14,4 @@ object C extends B {
}
override def f(x : T) : T = { x.g; x }
}
-//It compiles without errors, but T in B and T in C are completely unrelated types.
+//It compiles without errors, but T in B and T in C are completely unrelated types.
diff --git a/test/pending/neg/t2180.scala b/test/pending/neg/t2180.scala
deleted file mode 100644
index a8055bf77d..0000000000
--- a/test/pending/neg/t2180.scala
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-Given the following code (which is broken):
-
-class Mxml {
-
- private def processChildren( children:Seq[Any] ):List[Mxml] = {
-
- children.toList.flatMap ( e => {
-
- e match {
-
- case s:scala.collection.Traversable[_] => s case a => List(a)
-
- }
-
- })
-
- }
-
-}
-
-I get the following error:
-
-Mxml.scala:5: error: could not find implicit value for parameter bf:scala.collection.generic.BuilderFactory[Any,List[Mxml],Sequence[Any]].
-
- children.flatMap ( e => {
-
-I spent 4 hours failing before I figured out the problem. The return type was wrong. It should have been List[Any].
-
-I have seen similar errors with map. My solution in the past has been to change it to a foldLeft because I have never been able to determine how to fix the problem until now.
diff --git a/test/pending/neg/t3152.scala b/test/pending/neg/t3152.scala
new file mode 100644
index 0000000000..3abc772076
--- /dev/null
+++ b/test/pending/neg/t3152.scala
@@ -0,0 +1,8 @@
+package test
+
+object NotEnclosing {
+ def main(args : Array[String]) : Unit = {}
+ def compare[T](x: Ordered[T], y: Ordered[T]) = error("")
+ def mkEx: Ordered[_] = error("")
+ compare(mkEx, mkEx)
+}
diff --git a/test/pending/neg/t3189.check b/test/pending/neg/t3189.check
new file mode 100644
index 0000000000..43dd0f29a0
--- /dev/null
+++ b/test/pending/neg/t3189.check
@@ -0,0 +1,7 @@
+t3189.scala:2: error: illegal start of simple pattern
+ val Array(a,b*) = ("": Any)
+ ^
+t3189.scala:3: error: ')' expected but '}' found.
+}
+^
+two errors found
diff --git a/test/pending/neg/t3189.scala b/test/pending/neg/t3189.scala
new file mode 100644
index 0000000000..4ea4bb7581
--- /dev/null
+++ b/test/pending/neg/t3189.scala
@@ -0,0 +1,3 @@
+object A {
+ val Array(a,b*) = ("": Any)
+} \ No newline at end of file
diff --git a/test/pending/neg/t3633/test/Test.scala b/test/pending/neg/t3633/test/Test.scala
new file mode 100644
index 0000000000..395a6be6f4
--- /dev/null
+++ b/test/pending/neg/t3633/test/Test.scala
@@ -0,0 +1,23 @@
+package test
+
+final class Test extends PackageProtected {
+ def bar = foo
+}
+
+package another {
+ object Main {
+ def t1(t: Test) {
+ // Can always be replicated.
+ println(t.foo)
+ }
+ def t2(t: Test) {
+ // Conditions to replicate: must use -optimise, class Test must be final
+ println(t.bar)
+ //@noinline is a usable workaround
+ }
+ def main(args: Array[String]) {
+ t1(new Test)
+ t2(new Test)
+ }
+ }
+}
diff --git a/test/pending/pos/t796.scala b/test/pending/neg/t796.scala
index c013f49686..c013f49686 100644
--- a/test/pending/pos/t796.scala
+++ b/test/pending/neg/t796.scala
diff --git a/test/pending/neg/t963.scala b/test/pending/neg/t963.scala
new file mode 100644
index 0000000000..3be0be1b84
--- /dev/null
+++ b/test/pending/neg/t963.scala
@@ -0,0 +1,26 @@
+// Soundness bug, at #963 and dup at #2079.
+trait A {
+ type T
+ var v : T
+}
+
+object B {
+ def f(x : { val y : A }) { x.y.v = x.y.v }
+
+ var a : A = _
+ var b : Boolean = false
+ def y : A = {
+ if(b) {
+ a = new A { type T = Int; var v = 1 }
+ a
+ } else {
+ a = new A { type T = String; var v = "" }
+ b = true
+ a
+ }
+ }
+}
+
+object Test extends Application {
+ B.f(B)
+}
diff --git a/test/pending/neg/tcpoly_typealias_eta.scala b/test/pending/neg/tcpoly_typealias_eta.scala
index 0fb2c2d33e..033c911f7c 100644
--- a/test/pending/neg/tcpoly_typealias_eta.scala
+++ b/test/pending/neg/tcpoly_typealias_eta.scala
@@ -12,7 +12,7 @@ trait A3 {
trait FooCov[+x]
trait FooCon[-x]
-trait FooBound[+x <: String]
+trait FooBound[+x <: String]
trait BOk1 extends A {
type m/*[+x]*/ = FooCov/*[x]*/
@@ -30,8 +30,8 @@ trait BOk4 extends A3 {
type m/*[+x]*/ = FooCov/*[x]*/ // weaker variance
}
-// there are two aspects to check:
- // does type alias signature (not considering RHS) correspond to abstract type member in super class
+// there are two aspects to check:
+ // does type alias signature (not considering RHS) correspond to abstract type member in super class
// does RHS correspond to the type alias sig
trait BInv extends A{
type m/*[x]*/ = FooCov/*[x]*/ // error: invariant x in alias def
diff --git a/test/pending/neg/tcpoly_variance_enforce_getter_setter.scala b/test/pending/neg/tcpoly_variance_enforce_getter_setter.scala
index 321d392cc4..deafba8d8a 100644
--- a/test/pending/neg/tcpoly_variance_enforce_getter_setter.scala
+++ b/test/pending/neg/tcpoly_variance_enforce_getter_setter.scala
@@ -1,12 +1,12 @@
trait coll[+m[+x]]
-class FooInvar[x]
+class FooInvar[x]
class FooContra[-x]
class FooCov[+x]
object test {
var ok: coll[FooCov] = _
-
+
var x: coll[FooInvar] = _ // TODO: error should be reported only once instead of separately for getter and setter
var y: coll[FooContra] = _
}
diff --git a/test/pending/neg/type-diagnostics.scala b/test/pending/neg/type-diagnostics.scala
new file mode 100644
index 0000000000..a3a9172bb2
--- /dev/null
+++ b/test/pending/neg/type-diagnostics.scala
@@ -0,0 +1,11 @@
+object TooManyParens {
+ def f = Map(1 -> 2).keySet()
+ //
+ // Confusion reigns!
+ //
+ // work/a.scala:27: error: not enough arguments for method apply: (elem: Int)Boolean in trait SetLike.
+ // Unspecified value parameter elem.
+ // def f = Map(1 -> 2).keySet()
+ // ^
+
+}
diff --git a/test/pending/pos/bug0305.scala b/test/pending/pos/bug0305.scala
deleted file mode 100644
index 433f0e72c3..0000000000
--- a/test/pending/pos/bug0305.scala
+++ /dev/null
@@ -1,8 +0,0 @@
-object Test extends Application {
-
- def foo(is:int*) = 1;
- def foo(i:int) = 2;
-
- Console.println( foo( List(3):_* ) )
-
-}
diff --git a/test/pending/pos/bug112606B.scala b/test/pending/pos/bug112606B.scala
deleted file mode 100644
index 6dfaf4bf01..0000000000
--- a/test/pending/pos/bug112606B.scala
+++ /dev/null
@@ -1,11 +0,0 @@
-package test;
-trait Test2 {
- case class Token(text : String);
- class KeywordToken(text : String) extends Token(text);
- def decode(tok : KeywordToken) = tok match {
- // constructor cannot be instantiated to expected type;
- // found : Test2.this.Token
- // required: Test2.this.KeywordToken
- case Token("final") => true;
- }
-}
diff --git a/test/pending/pos/bug2018.scala b/test/pending/pos/bug2018.scala
deleted file mode 100644
index f1753f4d7a..0000000000
--- a/test/pending/pos/bug2018.scala
+++ /dev/null
@@ -1,15 +0,0 @@
-class A {
- val b = new B
-
- def getChildren = List(new A).elements
-
- class B {
- private def check = true
-
- private def getAncestor(p: A): A = {
- val c = (p.getChildren.find(_.b.check)) match {case Some(d) => d case None => p}
-
- if (c == p) p else c.b.getAncestor(c)
- }
- }
-}
diff --git a/test/pending/pos/bug563.scala b/test/pending/pos/bug563.scala
deleted file mode 100644
index d559226bdb..0000000000
--- a/test/pending/pos/bug563.scala
+++ /dev/null
@@ -1,7 +0,0 @@
-object Test {
- def map[A,R](a : List[A], f : A => R) : List[R] = a.map(f);
-
- def split(sn : Iterable[List[Cell[int]]]) : unit =
- for (val n <- sn)
- map(n,ptr => new Cell(ptr.elem));
-}
diff --git a/test/pending/pos/bug572.scala b/test/pending/pos/bug572.scala
deleted file mode 100644
index 3a69cde4a6..0000000000
--- a/test/pending/pos/bug572.scala
+++ /dev/null
@@ -1,33 +0,0 @@
-package lampion.collections;
-
-object DirX {
- abstract class Dir {
- def reverse : Dir;
- }
- object BEFORE extends Dir {
- def reverse = AFTER;
- }
- object AFTER extends Dir {
- def reverse = BEFORE;
- }
-}
-import DirX._;
-abstract class Linked {
- type Node <: Node0;
-
- abstract class Node0 {
- var next : Node = _;
- var prev : Node = _;
-
- def get(dir : Dir) = if (dir == BEFORE) prev; else next;
- private def set(dir : Dir, node : Node) =
- if (dir == BEFORE) prev = node; else next = node;
-
- def link(dir : Dir, node : Node) = {
- assert(get(dir) == null);
- assert(node.get(dir.reverse) == null);
- set(dir, node);
- node.set(dir.reverse(), node);
- }
- }
-}
diff --git a/test/pending/pos/bug573.scala b/test/pending/pos/bug573.scala
deleted file mode 100644
index b1b4f75098..0000000000
--- a/test/pending/pos/bug573.scala
+++ /dev/null
@@ -1,43 +0,0 @@
-package lampion.collections;
-
-object DirX {
- abstract class Dir {
- def reverse : Dir;
- }
- object BEFORE extends Dir {
- def reverse = AFTER;
- }
- object AFTER extends Dir {
- def reverse = BEFORE;
- }
-}
-
-import DirX._;
-
-abstract class Linked {
- type Node <: Node0;
-
- abstract class Node0 {
- var next : Node = _;
- var prev : Node = _;
-
- def self : Node;
-
- def get(dir : Dir) = if (dir == BEFORE) prev; else next;
- private def set(dir : Dir, node : Node) =
- if (dir == BEFORE) prev = node; else next = node;
-
- def link(dir : Dir, node : Node) = {
- assert(get(dir) == null);
- assert(node.get(dir.reverse) == null);
- set(dir, node);
- node.set(dir.reverse, self);
- }
-
-
- def end(dir : Dir) : Node = {
- if (get(dir) == null) this;
- else get(dir).end(dir);
- }
- }
-}
diff --git a/test/pending/pos/bug578.scala b/test/pending/pos/bug578.scala
deleted file mode 100644
index 4899fa7f5f..0000000000
--- a/test/pending/pos/bug578.scala
+++ /dev/null
@@ -1,7 +0,0 @@
-object Test {
- val x = Nil
- val x2: Nil = x
- val y = None
- val y2:None = y
- Console.println("Okay")
-}
diff --git a/test/pending/pos/bug579.scala b/test/pending/pos/bug579.scala
deleted file mode 100644
index a0806919e0..0000000000
--- a/test/pending/pos/bug579.scala
+++ /dev/null
@@ -1,21 +0,0 @@
-package my.webapp.bean.stuff;
-
-import scala.reflect.BeanProperty
-
-class MyBean {
- [BeanProperty]
- var frombulizer: String = _;
-}
-
-object Test extends Application {
-
- val x = new MyBean;
- x.frombulizer = "hello"
-
- x.setFrombulizer ("hola") // synthetic methods comes too late for typechecking this code
-
- val z:String = x.frombulizer
-
- val zz:String = x.getFrombulizer // synthetic methods comes too late for typechecking this code
-
-}
diff --git a/test/pending/pos/bug586.scala b/test/pending/pos/bug586.scala
deleted file mode 100644
index b736e6ab43..0000000000
--- a/test/pending/pos/bug586.scala
+++ /dev/null
@@ -1,78 +0,0 @@
-import scala.collection.immutable.{Map, TreeMap, ListMap, ListSet, Set}
-import scala.collection.{immutable=>imm, mutable=>mut}
-
-case class HashTreeSet[A](map: imm.Map[A, Unit])
-extends Object
-with imm.Set[A]
-{
- def this() = this(null)
-
- def size = map.size
- def +(elem: A) = new HashTreeSet(map + elem -> ())
- def -(elem: A) = new HashTreeSet(map - elem)
- def contains(elem: A) = map.isDefinedAt(elem)
- def iterator = map.iterator.map(._1)
- def empty:imm.Set[A] = new HashTreeSet[A]()
-}
-
-
-abstract class Goal2 {
- type Question
- val question: Question
-
- type Answer
- def initialAnswer: Answer
-}
-
-
-
-abstract class AbstractRespondersGoal
-extends Goal2 // TYPEFIX -- comment out the extends Goal2
-{
-}
-
-class RespondersGoal(
- val question: String,
- rcvr: String,
- signature: String,
- codebase: String)
-extends AbstractRespondersGoal
-{
- type Question = String
- type Answer = imm.Set[String]
-
- val initialAnswer = new HashTreeSet[String]()// TYPEFIX .asInstanceOf[Answer]
-}
-
-
-class SingleResponderGoal(val question: String, responder: String)
-extends AbstractRespondersGoal
-{
- type Question = String
- type Answer = Set[String]
- val initialAnswer = (new ListSet[String])//TYPEFIX .asInstanceOf[Answer]
-}
-
-class RespondersGoalSet
-//extends OneKindGoalSet
-{
- type Question = String
- type Answer = imm.Set[String]
- type MyGoal = AbstractRespondersGoal
-
- var selector: Boolean = _
- def newGoal(question: String) //TYPEFIX :MyGoal
- = {
-
- selector match {
-// case StaticMethodSelector(method: MethodRef) =>
- case true =>
- new SingleResponderGoal(null, null)
-
-// case DynamicMethodSelector(signature: MethodSignature) => {
-case false => {
- new RespondersGoal(null, null,null,null)
- }
- }
- }
-}
diff --git a/test/pending/pos/existentials-harmful.scala b/test/pending/pos/existentials-harmful.scala
new file mode 100644
index 0000000000..8722852e8a
--- /dev/null
+++ b/test/pending/pos/existentials-harmful.scala
@@ -0,0 +1,54 @@
+// a.scala
+// Mon Jul 11 14:18:26 PDT 2011
+
+object ExistentialsConsideredHarmful {
+ class Animal(val name: String)
+ object Dog extends Animal("Dog")
+ object Sheep extends Animal("Sheep")
+
+ trait Tools[A] {
+ def shave(a: A): A
+ }
+ def tools[A](a: A): Tools[A] = null // dummy
+
+ case class TransportBox[A <: Animal](animal: A, tools: Tools[A]) {
+ def label: String = animal.name
+ }
+
+ // 1.
+ def carry[A <: Animal](box: TransportBox[A]): Unit = {
+ println(box.animal.name+" got carried away")
+ }
+
+ val aBox =
+ if (math.random < 0.5)
+ TransportBox(Dog, tools(Dog))
+ else
+ TransportBox(Sheep, tools(Sheep))
+
+ // 2.
+ //aBox.tools.shave(aBox.animal)
+
+ // Use pattern match to avoid opening the existential twice
+ aBox match {
+ case TransportBox(animal, tools) => tools.shave(animal)
+ }
+
+ abstract class BoxCarrier[R <: Animal](box: TransportBox[R]) {
+ def speed: Int
+
+ def talkToAnimal: Unit = println("The carrier says hello to"+box.animal.name)
+ }
+
+ // 3.
+ //val bc = new BoxCarrier(aBox) {
+
+ // Use pattern match to avoid opening the existential twice
+ // Type annotation on bc is required ... possible compiler bug?
+ // val bc : BoxCarrier[_ <: Animal] = aBox match {
+ val bc = aBox match {
+ case tb : TransportBox[a] => new BoxCarrier(tb) {
+ def speed: Int = 12
+ }
+ }
+}
diff --git a/test/pending/pos/foo.scala b/test/pending/pos/foo.scala
deleted file mode 100644
index 8b45addbd5..0000000000
--- a/test/pending/pos/foo.scala
+++ /dev/null
@@ -1,3 +0,0 @@
-object foo {
- var x: String
-}
diff --git a/test/pending/pos/misc/B.scala b/test/pending/pos/misc/B.scala
index 3a080e4712..afc30944f5 100644
--- a/test/pending/pos/misc/B.scala
+++ b/test/pending/pos/misc/B.scala
@@ -1,7 +1,7 @@
package test
class B {
-
+
def myA = new A()
}
diff --git a/test/pending/pos/moors.scala b/test/pending/pos/moors.scala
deleted file mode 100644
index 4f7346f57f..0000000000
--- a/test/pending/pos/moors.scala
+++ /dev/null
@@ -1,12 +0,0 @@
-object Test {
-
- implicit def foo2bar(foo :Foo) :Bar = foo.bar
-
- class Foo(val bar :Bar) {
- def testCoercion ={ val a: this.type = this; a.baz /* here, foo2bar is inferred by the compiler, as expected */}
- def testCoercionThis = baz // --> error: not found: value baz
- def testCoercionThis = (this: Foo).baz // --> error: value baz is not a member of Foo
- }
-
- class Bar { def baz = System.out.println("baz")}
-}
diff --git a/test/pending/pos/no-widen-locals.scala b/test/pending/pos/no-widen-locals.scala
new file mode 100644
index 0000000000..013e63f0a2
--- /dev/null
+++ b/test/pending/pos/no-widen-locals.scala
@@ -0,0 +1,19 @@
+// Worked from r23262 until that was reverted somewhere
+// around r25016.
+import annotation.switch
+
+object Test {
+ def f(x: Int) = {
+ val X1 = 5
+ val X2 = 10
+ val X3 = 15
+ val X4 = 20
+
+ (x: @switch) match {
+ case X1 => 1
+ case X2 => 2
+ case X3 => 3
+ case X4 => 4
+ }
+ }
+}
diff --git a/test/pending/pos/package-case.scala b/test/pending/pos/package-case.scala
new file mode 100644
index 0000000000..906f1eb3f2
--- /dev/null
+++ b/test/pending/pos/package-case.scala
@@ -0,0 +1,4 @@
+// a.scala
+// Sat Jul 16 00:34:36 EDT 2011
+
+package object io { case class TextReader() }
diff --git a/test/pending/pos/sig/sigs.scala b/test/pending/pos/sig/sigs.scala
index 72a293d0e6..bdb72a09bb 100644
--- a/test/pending/pos/sig/sigs.scala
+++ b/test/pending/pos/sig/sigs.scala
@@ -1,5 +1,5 @@
package test
-class T {
+class T {
def foo[T <: String](x: T): T = x
def bar[T](x: T): T = x
class Inner {
diff --git a/test/pending/pos/t0576.scala b/test/pending/pos/t0576.scala
deleted file mode 100644
index 669806826d..0000000000
--- a/test/pending/pos/t0576.scala
+++ /dev/null
@@ -1,9 +0,0 @@
-class Test {
- new Object { self =>
- def f(other: Any): Boolean =
- other match {
- case that: self.type => true
- case _ => false
- }
- }
-}
diff --git a/test/pending/pos/t0621.scala b/test/pending/pos/t0621.scala
index d178bed0fb..1d2531c4bd 100644
--- a/test/pending/pos/t0621.scala
+++ b/test/pending/pos/t0621.scala
@@ -1,7 +1,7 @@
object Test {
val x1 : List[T] forSome { type T } = List(42)
val w1 = x1 match { case y : List[u] => ((z : u) => z)(y.head) }
-
+
val x2 : T forSome { type T } = 42
val w2 = x2 match { case y : u => ((z : u) => z)(y) }
}
diff --git a/test/pending/pos/t0644.scala b/test/pending/pos/t0644.scala
deleted file mode 100644
index 5ad12c3632..0000000000
--- a/test/pending/pos/t0644.scala
+++ /dev/null
@@ -1,11 +0,0 @@
-class A {
- def appply(): Int = 0
- def update(n: Int) {}
-}
-
-class B extends A {
- this()
- this()=1
- super()
- super()=1
-}
diff --git a/test/pending/pos/t0716.scala b/test/pending/pos/t0716.scala
deleted file mode 100644
index 98ba9bb2aa..0000000000
--- a/test/pending/pos/t0716.scala
+++ /dev/null
@@ -1,24 +0,0 @@
-trait Functor[F[_]] {
- def fmap[A,B](fun: A=>B, arg:F[A]): F[B]
-}
-object Functor{
- implicit val ListFunctor = new Functor[List] {
- def fmap[A, B](f: A => B, arg: List[A]):List[B] = arg map f
- }
-
- final class OOFunctor[F[_],A](arg:F[A])(implicit ftr: Functor[F]) {
- def fmap[B](fun: A=>B):F[B] = ftr.fmap(fun,arg)
- }
-
- //breaks if uncommented
- implicit def lifttoOO[F[_],A](arg:F[A])(implicit ftr: Functor[F]) = new OOFunctor[F,A](arg)(ftr)
-
- //works if uncommented
- //implicit def liftListtoOO[A](arg:List[A]):OOFunctor[List,A] = new OOFunctor[List,A](arg)
-}
-
-object GeneralLiftingDemo extends Application {
- import Functor._
- val l = List(1,2,3)
- println("OO : " + l.fmap( 1+) )
-}
diff --git a/test/pending/pos/t0756.scala b/test/pending/pos/t0756.scala
deleted file mode 100644
index a778bd63d0..0000000000
--- a/test/pending/pos/t0756.scala
+++ /dev/null
@@ -1,8 +0,0 @@
-object Test {
- for {
- n <- Some(42)
-
- _
- m <- Some(24)
- } yield n
-}
diff --git a/test/pending/pos/t0805.scala b/test/pending/pos/t0805.scala
deleted file mode 100644
index 565a2a6527..0000000000
--- a/test/pending/pos/t0805.scala
+++ /dev/null
@@ -1,9 +0,0 @@
-package fr.up5.mi.noel.scala
-object Test {
- def make(t: Test) : Test = TestList(t.args.toList)
-}
-case class TestList[T](elements: List[T])(implicit f: T => Test)
-
-class Test {
- val args: Array[Test]
-}
diff --git a/test/pending/pos/t0816.scala b/test/pending/pos/t0816.scala
deleted file mode 100644
index 44282ea872..0000000000
--- a/test/pending/pos/t0816.scala
+++ /dev/null
@@ -1,12 +0,0 @@
-abstract class Atest(val data: String)
-
-case class Btest(override val data: String, val b: boolean) extends Atest(data)
-
-case class Ctest(override val data: String) extends Btest(data, true)
-
-class testCaseClass {
- def test(x: Atest) = x match {
- case Ctest(data) => Console.println("C")
- case Btest(data, b) => Console.println("B")
- }
-}
diff --git a/test/pending/pos/t1003.scala b/test/pending/pos/t1003.scala
deleted file mode 100644
index 27becdb10f..0000000000
--- a/test/pending/pos/t1003.scala
+++ /dev/null
@@ -1,3 +0,0 @@
-object A {
- classOf[String].getMethod("equals", "")
-}
diff --git a/test/pending/pos/t1004.scala b/test/pending/pos/t1004.scala
deleted file mode 100644
index e86631acea..0000000000
--- a/test/pending/pos/t1004.scala
+++ /dev/null
@@ -1,6 +0,0 @@
-object A {
- def main(args: Array[String]) = {
- val x = new { def copy(a : this.type) = a };
- x.copy(x)
- }
-}
diff --git a/test/pending/pos/t1024.scala b/test/pending/pos/t1024.scala
deleted file mode 100644
index 0bd5b026a5..0000000000
--- a/test/pending/pos/t1024.scala
+++ /dev/null
@@ -1,4 +0,0 @@
-object Test {
- trait T { trait U { val x = 3 } }
- val x = new AnyRef with T#U { }
-}
diff --git a/test/pending/pos/t1035.scala b/test/pending/pos/t1035.scala
deleted file mode 100644
index 2485c10018..0000000000
--- a/test/pending/pos/t1035.scala
+++ /dev/null
@@ -1,32 +0,0 @@
-//A fatal error or Scala compiler
-// Scala compiler version 2.7.1-final -- (c) 2002-2009 LAMP/EPFL
-// Carlos Loria cloria@artinsoft.com
-// 7/10/2008
-
-class A {
- var name:String = _
- def getName() = name
- def this(name:String, age:Int){this();this.name=name}
-
-}
-
-class B(name:String) extends A(name,0){
-}
-
-class D {
-
- object A {
- def unapply(p:A) = Some(p.getName)
- }
-
- object B {
- def unapply(p:B) = Some(p.getName)
- }
- def foo(p:Any) = p match {
- case B(n) => println("B")
- case A(n) => println("A")
-
-
- }
-
-}
diff --git a/test/pending/pos/t1357.scala b/test/pending/pos/t1357.scala
new file mode 100644
index 0000000000..7bc6d45034
--- /dev/null
+++ b/test/pending/pos/t1357.scala
@@ -0,0 +1,21 @@
+object NonEmptyCons {
+ def unapply[H, T](c: (H, T)): Option[(H, T)] = Some(c)
+}
+
+
+object Main {
+
+ type BT[+H, +T <: Tuple2[Tuple2[H, T], Tuple2[H, T]]] = Tuple2[H, T]
+
+ // type T = Tuple2[String,String]
+ type BinaryTree[+E] = BT[E, T forSome { type T <: Tuple2[BT[E, T], BT[E, T]] }]
+
+ def foo[E](tree: BinaryTree[E]): Unit = tree match {
+ case NonEmptyCons(_, tail) => {
+ tail match {
+ case NonEmptyCons(_, _) => {
+ }
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/test/files/pos/t1380/gnujaxp.jar.desired.sha1 b/test/pending/pos/t1380/gnujaxp.jar.desired.sha1
index c155c2aaa2..c155c2aaa2 100644
--- a/test/files/pos/t1380/gnujaxp.jar.desired.sha1
+++ b/test/pending/pos/t1380/gnujaxp.jar.desired.sha1
diff --git a/test/pending/pos/t1380/hallo.scala b/test/pending/pos/t1380/hallo.scala
new file mode 100644
index 0000000000..bb8fff2333
--- /dev/null
+++ b/test/pending/pos/t1380/hallo.scala
@@ -0,0 +1,3 @@
+object hallo {
+ def main(args:Array[String]) = println("hallo")
+}
diff --git a/test/pending/pos/t1659.scala b/test/pending/pos/t1659.scala
deleted file mode 100644
index 10470d66f8..0000000000
--- a/test/pending/pos/t1659.scala
+++ /dev/null
@@ -1,4 +0,0 @@
-trait Y { type X }
-trait W { def u[A](v : Y { type X = A }) : Unit }
-class Z extends W { def u[A](v : Y { type X = A }) = null }
-
diff --git a/test/pending/pos/t1786.scala b/test/pending/pos/t1786.scala
index d0cf8c7bac..dca2edaab4 100644
--- a/test/pending/pos/t1786.scala
+++ b/test/pending/pos/t1786.scala
@@ -1,10 +1,10 @@
/** This a consequence of the current type checking algorithm, where bounds
* are checked only after variables are instantiated. I believe this will change once we go to contraint-based type inference. Assigning low priority until then.
- *
+ *
*
*/
class SomeClass(val intValue:Int)
-class MyClass[T <: SomeClass](val myValue:T)
+class MyClass[T <: SomeClass](val myValue:T)
object Test extends Application {
def myMethod(i:MyClass[_]) {
diff --git a/test/pending/pos/bug1957.scala b/test/pending/pos/t1957.scala
index f80cf730ed..f80cf730ed 100644
--- a/test/pending/pos/bug1957.scala
+++ b/test/pending/pos/t1957.scala
diff --git a/test/pending/pos/t1987/a.scala b/test/pending/pos/t1987/a.scala
new file mode 100644
index 0000000000..ff27044b69
--- /dev/null
+++ b/test/pending/pos/t1987/a.scala
@@ -0,0 +1,7 @@
+package bug
+
+// goes with t1987b.scala
+package object packageb {
+ def func(a: Int) = ()
+ def func(a: String) = ()
+}
diff --git a/test/pending/pos/t1987/b.scala b/test/pending/pos/t1987/b.scala
new file mode 100644
index 0000000000..a469ca6ea8
--- /dev/null
+++ b/test/pending/pos/t1987/b.scala
@@ -0,0 +1,10 @@
+// compile with t1987a.scala
+
+package bug.packageb
+// Note that the overloading works if instead of being in the package we import it:
+// replace the above line with import bug.packageb._
+
+class Client {
+ val x = func(1) // doesn't compile: type mismatch; found: Int(1) required: String
+ val y = func("1") // compiles
+}
diff --git a/test/pending/pos/t2060.scala b/test/pending/pos/t2060.scala
deleted file mode 100644
index 3f47259849..0000000000
--- a/test/pending/pos/t2060.scala
+++ /dev/null
@@ -1,28 +0,0 @@
-object Test {
- class Op[I];
- class IntOp extends Op[Int];
-
- class Rich(x : Double) {
- def + (op : IntOp) = op;
- def + [I](op : Op[I]) = op;
- def plus [I](op : Op[I]) = op;
- }
-
- implicit def iToRich(x : Double) =
- new Rich(x);
-
- // fails to compile
- val failure = 1.0 + new Op[Int];
-
- // works as expected --
- // problem isn't in adding new "+"
- val a = 1.0 + new IntOp;
-
- // works as expected --
- // problem isn't in binding type variable I
- val b = 1.0 plus new Op[Int];
-
- // works as expected --
- // problem isn't in using Rich.+[I](op : Op[I])
- val c = iToRich(1.0) + new Op[Int];
-}
diff --git a/test/pending/pos/t2099.scala b/test/pending/pos/t2099.scala
deleted file mode 100644
index 934b6691a7..0000000000
--- a/test/pending/pos/t2099.scala
+++ /dev/null
@@ -1,27 +0,0 @@
-// nice to have, not terribly urgent, maybe?
-
-I have a trait:
-
-trait Vis[+T]
-
-and an object/class pair:
-
-object VisImpl? { def apply() = new VisImpl? } class VisImpl? extends Vis[Missing]
-
-Where Missing is some class of mine. In a separate project (where Vis and VisImpl? are on the classpath but Missing is not), if I do:
-
-object Test extends Application {
-
- val v = VisImpl?() println(v)
-
-}
-
-This causes a Scala compiler error (using 2.7.5 compiler). The error is:
-
-"Caused by java.lang.RuntimeException?: malformed Scala signature of VisImpl? at 3634; reference value data of package mypack refers to nonexisting symbol"
-
-Where mypack is the root package of the Missing class. This is not a helpful error as all my classes share the same root package and the problem is not in the VisImpl? declaration in any case.
-
-I would expect to see an error of the form:
-
-" Type parameter not found 'Missing': VisImpl? extends Vis[Missing] at Test: #4: val v = VisImpl?() "
diff --git a/test/pending/pos/t2173.scala b/test/pending/pos/t2173.scala
index 9a9a2edce4..cf1913d88b 100644
--- a/test/pending/pos/t2173.scala
+++ b/test/pending/pos/t2173.scala
@@ -1,17 +1,12 @@
-
-
-This (somewhat convoluted) code fails to compile
-
-class A[+U>:Null] {
-
- type R[+X>:Null] = X type O[+X] = A[R[X]]
-
+class A[+U >: Null] {
+ type R[+X >: Null] = X
+ type O[+X] = A[R[X]]
}
-with the following error:
-
-type arguments [A.this.R[X]] do not conform to class A's type parameter bounds [+U >: Null]
-
-However, because type R[+X>:Null] is identical to X, it should carry X bounds and R[X] lower bound should be known to be X's lower bound, i.e. Null.
-
-The same problem occurs with upper bounds.
+// with the following error:
+//
+// type arguments [A.this.R[X]] do not conform to class A's type parameter bounds [+U >: Null]
+//
+// However, because type R[+X>:Null] is identical to X, it should carry X bounds and R[X] lower bound should be known to be X's lower bound, i.e. Null.
+//
+// The same problem occurs with upper bounds.
diff --git a/test/pending/pos/t2179.scala b/test/pending/pos/t2179.scala
deleted file mode 100644
index fd37d8f760..0000000000
--- a/test/pending/pos/t2179.scala
+++ /dev/null
@@ -1,6 +0,0 @@
-on trunk r18368, this delightful little poison pill:
-
-(Nil:List[List[Double]]).reduceLeft((_: Any, _: Any) => Nil.indices.map(_ => 0d))
-
-sends the compiler into an apparently infinite loop. a sample thread dump shows:
-
diff --git a/test/pending/pos/t425variant.scala b/test/pending/pos/t425variant.scala
deleted file mode 100644
index 458f3b9da8..0000000000
--- a/test/pending/pos/t425variant.scala
+++ /dev/null
@@ -1,10 +0,0 @@
-object Temp{
- case class A(x: Int)
- case class B(override val x: Int, y: Double) extends A(x)
-
- B(5, 3.3) match {
- case B(x, y) => Console.println(y)
- case A(x) => Console.println(x)
- }
-}
-
diff --git a/test/pending/pos/t4606.scala b/test/pending/pos/t4606.scala
new file mode 100644
index 0000000000..f4e5058483
--- /dev/null
+++ b/test/pending/pos/t4606.scala
@@ -0,0 +1,29 @@
+object t4606 {
+ class A(var x: Int)
+ class B(x: Int) extends A(x)
+ trait C { self: B =>
+ def foo = x
+ def bar = self.x
+ def baz = {
+ val b: B = self
+ b.x
+ }
+ }
+
+ object Toto extends App {
+ val x = new B(10) with C
+ println(x.foo) // 10
+ println(x.bar) // 10
+ println(x.baz) // 10
+ println(x.x) // 10
+ }
+}
+
+object t3194 {
+ class A(var x: Int)
+ class B(x: Int) extends A(x) {
+ self: A =>
+
+ def update(z: Int) = this.x = z
+ }
+} \ No newline at end of file
diff --git a/test/pending/pos/t4859.scala b/test/pending/pos/t4859.scala
new file mode 100644
index 0000000000..ec5abd966d
--- /dev/null
+++ b/test/pending/pos/t4859.scala
@@ -0,0 +1,15 @@
+object O {
+ C().CC()
+ D().DD()
+}
+
+case class C() {
+ case class CC()
+}
+
+case class D() {
+ class DD()
+ object DD {
+ def apply() = new DD()
+ }
+}
diff --git a/test/pending/pos/those-kinds-are-high.scala b/test/pending/pos/those-kinds-are-high.scala
new file mode 100644
index 0000000000..3012e72d7e
--- /dev/null
+++ b/test/pending/pos/those-kinds-are-high.scala
@@ -0,0 +1,37 @@
+class A {
+ trait Container[+T]
+ trait Template[+CC[X] <: Container[X]]
+
+ class C1[T] extends Template[C1] with Container[T]
+ class C2[T] extends Template[C2] with Container[T]
+
+ /** Target expression:
+ * List(new C1[String], new C2[String])
+ */
+
+ // Here's what would ideally be inferred.
+ //
+ // scala> :type List[Template[Container] with Container[String]](new C1[String], new C2[String])
+ // List[Template[Container] with Container[java.lang.String]]
+ //
+ // Here's what it does infer.
+ //
+ // scala> :type List(new C1[String], new C2[String])
+ // <console>:8: error: type mismatch;
+ // found : C1[String]
+ // required: Container[String] with Template[Container[Any] with Template[Container[Any] with Template[Any] with ScalaObject] with ScalaObject] with ScalaObject
+ // List(new C1[String], new C2[String])
+ // ^
+ //
+ // Simplified, the inferred type is:
+ //
+ // List[Container[String] with Template[Container[Any] with Template[Container[Any] with Template[Any]]]
+ //
+
+ /** Working version explicitly typed.
+ */
+ def fExplicit = List[Template[Container] with Container[String]](new C1[String], new C2[String])
+
+ // nope
+ // def fFail = List(new C1[String], new C2[String])
+}
diff --git a/test/pending/pos/unappgadteval.scala b/test/pending/pos/unappgadteval.scala
index 0c22c71dee..89f6cabc43 100644
--- a/test/pending/pos/unappgadteval.scala
+++ b/test/pending/pos/unappgadteval.scala
@@ -1,35 +1,77 @@
-//Class hierarchy
+/** Cleaned up in october 2010 by paulp.
+ * Hey, we should get this working.
+ */
+
+// Class hierarchy
trait Term[a]
+
object Var{ def unapply[a](x:Var[a]) = Some(x.name) }
class Var[a] (val name : String) extends Term[a]
+
object Num{ def unapply(x:Num) = Some(x.value) }
-class Num (val value : int) extends Term[int]
-object Lam{ def unapply[b,c](l:Lam[b,c]) = Some{l.x,l.e}}
-class Lam[b, c] (val x : Var[b], val e : Term[c]) extends Term[b => c]
-object App{ def unapply[b,c](a:App[b,c]) = Some{a.f,a.e}}
+class Num (val value : Int) extends Term[Int]
+
+object Lam{ def unapply[b,c](l: Lam[b,c]) = Some(l.x, l.e) }
+class Lam[b, c](val x : Var[b], val e : Term[c]) extends Term[b => c]
+
+object App{ def unapply[b,c](a: App[b,c]) = Some(a.f, a.e) }
class App[b, c] (val f : Term[b => c], val e : Term[b]) extends Term[c]
-object Suc{ def unapply(a:Suc) = true }
-class Suc () extends Term[int => int]
+
+object Suc { def unapply(a: Suc) = true }
+class Suc() extends Term[Int => Int]
+
// Environments :
-abstract class Env {
- def apply[a](v : Var[a]): a
- def extend[a](v : Var[a], x : a) = new Env {
- def apply[b](w: Var[b]): b = w match {
+abstract class Env {
+ def apply[a](v: Var[a]): a
+ def extend[a](v: Var[a], x : a) = new Env {
+ def apply[b](w: Var[b]): b = w match {
case _ : v.type => x // v eq w, hence a = b
case _ => Env.this.apply(w)
}}
}
-object empty extends Env {
- def apply[a](x : Var[a]): a = throw new Error("not found : "+x.name)
+object empty extends Env {
+ def apply[a](x: Var[a]): a = throw new Error("not found : "+x.name)
}
+
object Test {
-// Evaluation :
-def eval[a](t : Term[a], env : Env): a = t match {
- case v : Var[b] => env(v) // a = b
- case n @ Num(value) => value // a = int
- case i @ Suc() => { y: int => y + 1 } // a = int=>int
- case f @ Lam[b,c](x,e) => { y: b => eval(e, env.extend(x, y))} // a = b=>c
- case a @ App(f,e) => eval(f, env)(eval(e, env)) // a = c
-}
+ val v1 = new Var[util.Random]("random")
+ val v2 = new Var[Int]("Int")
+ val v3 = new Var[List[String]]("list")
+
+ val anEnv = (empty
+ .extend(v1, new util.Random)
+ .extend(v2, 58)
+ .extend(v3, Nil)
+ )
+
+ def eval[a](t: Term[a], env : Env): a = t match {
+ // First three work
+ case v : Var[b] => env(v) // a = b
+ case n @ Num(value) => value // a = Int
+ case a @ App(f,e) => eval(f, env)(eval(e, env)) // a = c
+
+ // Next one fails like:
+ //
+ // found : (Int) => Int
+ // required: a
+ case i @ Suc() => { (y: Int) => y + 1 } // a = Int => Int
+
+ // Next one fails like:
+ //
+ // error: '=>' expected but '[' found.
+ // case f @ Lam[b,c](x, e) => { (y: b) => eval(e, env.extend(x, y)) } // a = b=>c
+ // ^
+ case f @ Lam[b,c](x, e) => { (y: b) => eval(e, env.extend(x, y)) } // a = b=>c
+ }
+
+ val f1 = () => eval(v1, anEnv)
+ val f2 = () => eval(v2, anEnv)
+ val f3 = () => eval(v3, anEnv)
+
+ def main(args: Array[String]): Unit = {
+ println(f1())
+ println(f2())
+ println(f3())
+ }
}
diff --git a/test/pending/pos/unapplyGeneric.scala b/test/pending/pos/unapplyGeneric.scala
new file mode 100644
index 0000000000..bf88816885
--- /dev/null
+++ b/test/pending/pos/unapplyGeneric.scala
@@ -0,0 +1,11 @@
+object Bar {
+ def unapply[A,B](bar:Bar[A,B]) = Some(bar)
+}
+
+class Bar[A,B](val _1:A, val _2:B) extends Product2[A,B]
+
+object Test {
+ new Bar(2, 'a') match {
+ case Bar(x,y) =>
+ }
+}
diff --git a/test/pending/pos/virt.scala b/test/pending/pos/virt.scala
index 6fe21246b0..99dcd747b2 100644
--- a/test/pending/pos/virt.scala
+++ b/test/pending/pos/virt.scala
@@ -1,9 +1,9 @@
object Virt extends Application {
- class Foo {
+ class Foo {
trait Inner <: { val x : Int = 3 }
}
- class Bar extends Foo {
+ class Bar extends Foo {
trait Inner <: { val y : Int = x }
}
}
diff --git a/test/pending/res/bug1092.res b/test/pending/res/bug1092.res
deleted file mode 100644
index 6deef8afd0..0000000000
--- a/test/pending/res/bug1092.res
+++ /dev/null
@@ -1 +0,0 @@
-bug1092/A.scala bug1092/B.scala bug1092/C.scala
diff --git a/test/pending/res/bug1092/A.scala b/test/pending/res/bug1092/A.scala
deleted file mode 100644
index 192e7afe11..0000000000
--- a/test/pending/res/bug1092/A.scala
+++ /dev/null
@@ -1,4 +0,0 @@
-object HolderA {
- class A(a: Int)
-}
-
diff --git a/test/pending/res/bug1092/B.scala b/test/pending/res/bug1092/B.scala
deleted file mode 100644
index 5c80e8e84d..0000000000
--- a/test/pending/res/bug1092/B.scala
+++ /dev/null
@@ -1,4 +0,0 @@
-object HolderB {
- import HolderA.A
- trait B extends A
-}
diff --git a/test/pending/res/bug1092/C.scala b/test/pending/res/bug1092/C.scala
deleted file mode 100644
index f961a93b5b..0000000000
--- a/test/pending/res/bug1092/C.scala
+++ /dev/null
@@ -1,6 +0,0 @@
-object C extends Application {
- import HolderA.A
- import HolderB.B
-
- println(new A(4) with B)
-}
diff --git a/test/pending/res/bug830/Bad.scala b/test/pending/res/bug830/Bad.scala
deleted file mode 100644
index 17632290ff..0000000000
--- a/test/pending/res/bug830/Bad.scala
+++ /dev/null
@@ -1,11 +0,0 @@
-package test;
-trait HasNodeXXX {
- type Node <: NodeImpl;
- trait NodeImpl;
-}
-trait ScalaFlowScannerZZZ extends HasNodeXXX {
- type Node <: NodeImpl;
- trait NodeImplA extends super.NodeImpl;
- trait NodeImplB extends NodeImpl;
- trait NodeImpl extends NodeImplA with NodeImplB;
-}
diff --git a/test/pending/res/bug830/Good.scala b/test/pending/res/bug830/Good.scala
deleted file mode 100644
index 84789bfc47..0000000000
--- a/test/pending/res/bug830/Good.scala
+++ /dev/null
@@ -1,11 +0,0 @@
-package test;
-trait HasNodeXXX {
- type Node <: NodeImpl;
- trait NodeImpl;
-}
-trait ScalaFlowScannerZZZ extends HasNodeXXX {
- type Node <: NodeImpl;
- trait NodeImplA extends super.NodeImpl;
- trait NodeImplB extends super.NodeImpl;
- trait NodeImpl extends NodeImplA with NodeImplB;
-}
diff --git a/test/pending/res/bug830A.res b/test/pending/res/bug830A.res
deleted file mode 100644
index 421e1a2fee..0000000000
--- a/test/pending/res/bug830A.res
+++ /dev/null
@@ -1,13 +0,0 @@
-bug830/Good.scala
-bug830/Bad.scala
-bug830/Good.scala
-bug830/Bad.scala
-bug830/Good.scala
-bug830/Bad.scala
-bug830/Good.scala
-bug830/Bad.scala
-bug830/Good.scala
-bug830/Bad.scala
-bug830/Good.scala
-bug830/Bad.scala
-bug830/Good.scala
diff --git a/test/pending/res/bug830B.res b/test/pending/res/bug830B.res
deleted file mode 100644
index 54c13801b6..0000000000
--- a/test/pending/res/bug830B.res
+++ /dev/null
@@ -1,13 +0,0 @@
-bug830/Good.scala
-bug830/Good.scala
-bug830/Good.scala
-bug830/Bad.scala
-bug830/Bad.scala
-bug830/Bad.scala
-bug830/Good.scala
-bug830/Good.scala
-bug830/Good.scala
-bug830/Bad.scala
-bug830/Bad.scala
-bug830/Bad.scala
-bug830/Good.scala
diff --git a/test/pending/res/bug837.res b/test/pending/res/bug837.res
deleted file mode 100644
index a0f5100843..0000000000
--- a/test/pending/res/bug837.res
+++ /dev/null
@@ -1,3 +0,0 @@
-DataFlowAnalysis.scala DeadCode.scala
-DeadCode.scala
-
diff --git a/test/pending/res/bug837/DataFlowAnalysis.scala b/test/pending/res/bug837/DataFlowAnalysis.scala
deleted file mode 100644
index 25c2fbc635..0000000000
--- a/test/pending/res/bug837/DataFlowAnalysis.scala
+++ /dev/null
@@ -1,17 +0,0 @@
-package test;
-import scala.collection.mutable._;
-trait CompleteLattice {
- trait Elem;
-}
-trait DataFlowAnalysis[L <: CompleteLattice] {
- type P;
- val lattice : L;
- val out: Map[P, lattice.Elem] = new HashMap;
-}
-abstract class Liveness {
- object livenessLattice extends CompleteLattice;
- final class LivenessAnalysis extends DataFlowAnalysis[livenessLattice.type] {
- type P = String;
- val lattice = livenessLattice;
- }
-}
diff --git a/test/pending/res/bug837/DeadCode.scala b/test/pending/res/bug837/DeadCode.scala
deleted file mode 100644
index 2978e24d42..0000000000
--- a/test/pending/res/bug837/DeadCode.scala
+++ /dev/null
@@ -1,6 +0,0 @@
-package test;
-trait DeadcodeAnalysis {
- object liveness extends Liveness;
- val a = new liveness.LivenessAnalysis();
- var live = a.out("hello");
-}
diff --git a/test/pending/run/TestFlatMap.scala b/test/pending/run/TestFlatMap.scala
new file mode 100644
index 0000000000..dd5a0a0c2f
--- /dev/null
+++ b/test/pending/run/TestFlatMap.scala
@@ -0,0 +1,29 @@
+import scala.collection.parallel.{ ParMap => PMap }
+import scala.collection.parallel.mutable.{ ParHashSet => PMHashSet, ParHashMap => PMHashMap, ParArray }
+import scala.util.Random
+import scala.collection.parallel.CompositeThrowable
+
+object Test {
+
+ def main(args: Array[String]) {
+ val N = 1500
+ val M = 1500
+ var unmatchedLeft = new PMHashSet[Int]
+ var unmatchedRight = new PMHashSet[Int]
+ Range(0, N).foreach{ x => unmatchedLeft += x}
+ Range(0, M).foreach{ x => unmatchedRight += x}
+
+ try {
+ val matches = unmatchedLeft.flatMap{ lind: Int =>
+ val dists = unmatchedRight.seq.map{ rind: Int =>
+ val dist = Random.nextInt
+ (rind, dist)
+ }
+ dists
+ }
+ } catch {
+ case c: CompositeThrowable => for (t <- c.throwables) println("\n%s\n%s".format(t, t.getStackTrace.mkString("\n")))
+ }
+ }
+
+}
diff --git a/test/pending/run/array_casts.check b/test/pending/run/array_casts.check
deleted file mode 100644
index f7d3e5036c..0000000000
--- a/test/pending/run/array_casts.check
+++ /dev/null
@@ -1,16 +0,0 @@
-is object - true
-is seq - true
-is collection - true
-is random-access-seq - true
-is random-access-seq-mutable - true
-not string - true
-not list - true
-class [I
-Array(10)
-Array(10)
-Array(10)
-Array(10)
-Good, arrays are not lists
-Good, arrays are not rich strings
-is-seq array true
-class [I
diff --git a/test/pending/run/array_casts.scala b/test/pending/run/array_casts.scala
deleted file mode 100644
index 9d298bbc2b..0000000000
--- a/test/pending/run/array_casts.scala
+++ /dev/null
@@ -1,42 +0,0 @@
-object Test {
- val a = Array(10)
- def main(args : Array[String]) : Unit = {
- val a = this.a : AnyRef
- Console.println("is object - " + a.isInstanceOf[Object])
- Console.println("is seq - " + a.isInstanceOf[Seq[_]])
- Console.println("is collection - " + a.isInstanceOf[Collection[_]])
- Console.println("is random-access-seq - " + a.isInstanceOf[RandomAccessSeq[_]])
- Console.println("is random-access-seq-mutable - " + a.isInstanceOf[RandomAccessSeq.Mutable[_]])
- Console.println("not string - " + !a.isInstanceOf[String])
- Console.println("not list - " + !a.isInstanceOf[List[_]])
- try {
- Console.println(a.asInstanceOf[Object].getClass)
- } catch { case ex : ClassCastException => Console.println("Bad, arrays should be objects") }
- try {
- Console.println(a.asInstanceOf[Seq[_]])
- } catch { case ex : ClassCastException => Console.println("Bad, arrays should be seqs") }
- try {
- Console.println(a.asInstanceOf[Collection[_]])
- } catch { case ex : ClassCastException => Console.println("Bad, arrays should be collections") }
- try {
- Console.println(a.asInstanceOf[RandomAccessSeq[_]])
- } catch { case ex : ClassCastException => Console.println("Bad, arrays should be random access seqs") }
- try {
- Console.println(a.asInstanceOf[RandomAccessSeq.Mutable[_]])
- } catch { case ex : ClassCastException => Console.println("Bad, arrays should be mutable random access seqs") }
- try {
- Console.println("not expected: " + a.asInstanceOf[List[_]])
- } catch { case ex : ClassCastException => Console.println("Good, arrays are not lists") }
- try {
- Console.println("not expected: " + a.asInstanceOf[runtime.RichString])
- throw new Error("not expected")
- } catch { case ex : ClassCastException => Console.println("Good, arrays are not rich strings") }
- // check that arrays as seqs are still dynamically typed as arrays
- val s = this.a : Seq[Int]
- Console.println("is-seq array " + s.isInstanceOf[Array[Char]])
- try {
- Console.println(s.asInstanceOf[Array[Int]].getClass)
- } catch { case ex : ClassCastException => Console.println("Bad, arrays as seqs should still be arrays of int") }
- ()
- }
-}
diff --git a/test/pending/run/arrays-2.check b/test/pending/run/arrays-2.check
deleted file mode 100644
index ce28533c20..0000000000
--- a/test/pending/run/arrays-2.check
+++ /dev/null
@@ -1,7 +0,0 @@
-a1=Array(3, 2, 1)
-a1=[3,2,1]
-a2=Array(0, 4, 2, 6)
-a2=[0,4,2,6]
-a2=[0,7,4,2,1,3,6,5]
-a2=[0,1,2,3,4,5,6,7]
-true
diff --git a/test/pending/run/arrays-2.scala b/test/pending/run/arrays-2.scala
deleted file mode 100644
index bee22db577..0000000000
--- a/test/pending/run/arrays-2.scala
+++ /dev/null
@@ -1,25 +0,0 @@
-//############################################################################
-// Arrays 2
-//############################################################################
-
-//############################################################################
-
-object Test extends Application {
- val a1 = Array(1, 2, 3)
- val a2 = Array(0, 7, 4, 2, 1, 3, 6, 5)
- val a3 = new Array(1, 2, 3) // ticket #193 (VerifyError)
-
- def _toString[A](a: Array[A]) = a.mkString("[", ",", "]")
-
- // slice: see file slices.scala
- println("a1=" + a1.reverse)
- println("a1=" + _toString(a1.reverse))
- println("a2=" + a2.filter(_ % 2 == 0))
- println("a2=" + _toString(a2.filter(_ % 2 == 0)))
-
- println("a2=" + _toString(a2))
- util.Sorting.stableSort(a2)
- println("a2=" + _toString(a2))
-
- println(a1 deepEquals a3)
-}
diff --git a/test/pending/run/bug0412.scala b/test/pending/run/bug0412.scala
deleted file mode 100644
index 4610235427..0000000000
--- a/test/pending/run/bug0412.scala
+++ /dev/null
@@ -1,33 +0,0 @@
-object Magic {
-
- abstract class A[T1,T2]() {
- trait C { type T; }
- trait C1 extends C { type T = T1; }
- trait C2 extends C { type T <: T2; }
-
- type CX;
-
- var cv: CX with C2 = _;
- val c: CX with C2 = cv;
-
- def castA(x: c.T): T2 = x;
- }
-
- class B[T1,T2] extends A[T1,T2]() {
- type CX = C1;
-
- def castB(x: T1): T2 = castA(x);
- }
-
- def cast[T1,T2](v: T1): T2 =
- new B[T1,T2]().castB(v)
-
-}
-
-object Test {
-
- def main(args: Array[String]): Unit = {
- Magic.cast[String,Exception]("xyz").printStackTrace();
- }
-
-}
diff --git a/test/pending/run/bug0551.scala b/test/pending/run/bug0551.scala
deleted file mode 100644
index ffa36d7cb0..0000000000
--- a/test/pending/run/bug0551.scala
+++ /dev/null
@@ -1,5 +0,0 @@
-case class A(x: int)
-class B(x: int) extends A(x)
-object Test extends Application {
- Console.println(A(1) == new B(1))
-}
diff --git a/test/pending/run/bug1006.check b/test/pending/run/bug1006.check
deleted file mode 100644
index 409940768f..0000000000
--- a/test/pending/run/bug1006.check
+++ /dev/null
@@ -1 +0,0 @@
-23
diff --git a/test/pending/run/bug1006.scala b/test/pending/run/bug1006.scala
deleted file mode 100644
index 0a82373fb6..0000000000
--- a/test/pending/run/bug1006.scala
+++ /dev/null
@@ -1,13 +0,0 @@
-object foo {
- def main(args: Array[String]) {
- abstract class A[T] {
- def myVal: T
- }
-
- class B[T](value: T) extends A[T] {
- def myVal = value
- }
-
- Console.println(new B[int](23).myVal)
- }
-}
diff --git a/test/pending/run/bug1031.scala b/test/pending/run/bug1031.scala
deleted file mode 100644
index 4db5674489..0000000000
--- a/test/pending/run/bug1031.scala
+++ /dev/null
@@ -1,11 +0,0 @@
-abstract class Tree
-case class Foo(xs: List[Int]) extends Tree
-
-object test extends Application {
- Foo(Nil) match {
- case Foo(xs: List[_]) =>
- Console.println(xs)
- case _ =>
- ;
- }
-}
diff --git a/test/pending/run/bug1042.scala b/test/pending/run/bug1042.scala
deleted file mode 100644
index 26b06a6f0c..0000000000
--- a/test/pending/run/bug1042.scala
+++ /dev/null
@@ -1,14 +0,0 @@
-abstract class A {
- override def toString(): String // crucial
-
- def toString(sb: StringBuilder): StringBuilder // crucial
-}
-
-case class B extends A {
- // overloaded version is implemented, causing toString not to be implemented?
- def toString(sb: StringBuilder): StringBuilder = error("")
-}
-
-object Test extends Application {
- Console.println(B)
-}
diff --git a/test/pending/run/bug2087.scala b/test/pending/run/bug2087.scala
deleted file mode 100644
index b3f96fa415..0000000000
--- a/test/pending/run/bug2087.scala
+++ /dev/null
@@ -1,8 +0,0 @@
-object Test {
- def main(args: Array[String]): Unit = {
- val s: Short = 0xFA99.toShort
- val c: Char = 0xFA99.toChar
-
- assert((s == c) == (c == s))
- }
-} \ No newline at end of file
diff --git a/test/pending/run/bug424.scala b/test/pending/run/bug424.scala
deleted file mode 100644
index bc7a55732d..0000000000
--- a/test/pending/run/bug424.scala
+++ /dev/null
@@ -1,3 +0,0 @@
-object M {
- def f = 3;
-}
diff --git a/test/pending/run/bug874.scala b/test/pending/run/bug874.scala
deleted file mode 100644
index 29dfabe0e9..0000000000
--- a/test/pending/run/bug874.scala
+++ /dev/null
@@ -1,17 +0,0 @@
-object Test {
- abstract class Base {
- val U: {
- def apply[A](x1: A)(x2: int): Any
- }
- U("xyz")(2)
- }
- class Mix extends Base {
- case class U[A](x1: A)(x2: int) {
- Console.println("U created with "+x1+" and "+x2)
- }
- }
- def main(args : Array[String]) : Unit = {
- val obvious: Base = new Mix;
- obvious.U("abc")(1)
- }
-}
diff --git a/test/pending/run/bugs425-and-816.scala b/test/pending/run/bugs425-and-816.scala
deleted file mode 100644
index d9267d06af..0000000000
--- a/test/pending/run/bugs425-and-816.scala
+++ /dev/null
@@ -1,27 +0,0 @@
-object Test {
- object bug425 {
- case class A(x: Int)
- case class B(override val x: Int, y: Double) extends A(x)
-
- val b: A = B(5, 3.3)
- b match {
- case B(x, y) => Console.println(y)
- case A(x) => Console.println(x)
- }
- }
-
- object bug816 {
- abstract class Atest(val data: String)
-
- case class Btest(override val data: String, val b: boolean) extends Atest(data)
-
- case class Ctest(override val data: String) extends Btest(data, true)
-
- class testCaseClass {
- def test(x: Atest) = x match {
- case Ctest(data) => Console.println("C")
- case Btest(data, b) => Console.println("B")
- }
- }
- }
-}
diff --git a/test/pending/run/castsingleton.check b/test/pending/run/castsingleton.check
deleted file mode 100644
index 49742281f0..0000000000
--- a/test/pending/run/castsingleton.check
+++ /dev/null
@@ -1,2 +0,0 @@
-L()
-L()
diff --git a/test/pending/run/castsingleton.scala b/test/pending/run/castsingleton.scala
deleted file mode 100644
index 171b380dc9..0000000000
--- a/test/pending/run/castsingleton.scala
+++ /dev/null
@@ -1,10 +0,0 @@
-object Test extends Application {
- case class L();
- object N extends L();
-
- def empty(xs : L) : Unit = xs match {
- case x@N => println(x); println(x);
- }
-
- empty(L())
-}
diff --git a/test/pending/run/collections.check b/test/pending/run/collections.check
deleted file mode 100644
index 33a8551bf3..0000000000
--- a/test/pending/run/collections.check
+++ /dev/null
@@ -1,36 +0,0 @@
-***** immutable.ListSet:
-test1: 14005
-test2: 25005003
-test3: 25005003
-***** immutable.TreeSet:
-test1: 14005
-test2: 25005003
-test3: 25005003
-***** mutable.HashSet:
-test1: 14005
-test2: 25005003
-test3: 25005003
-***** immutable.ListMap:
-test1: 14005
-test2: 1013003
-test3: 1013003
-***** immutable.TreeMap:
-test1: 14005
-test2: 1013003
-test3: 1013003
-***** immutable.UnBalancedTreeMap:
-test1: 14005
-test2: 1013003
-test3: 1013003
-***** immutable.HashTreeSet:
-test1: 14005
-test2: 25005003
-test3: 25005003
-***** immutable.HashTreeMap:
-test1: 14005
-test2: 1013003
-test3: 1013003
-***** mutable.HashMap:
-test1: 14005
-test2: 25005003
-test3: 25005003
diff --git a/test/pending/run/collections.scala b/test/pending/run/collections.scala
deleted file mode 100644
index 6717b524bb..0000000000
--- a/test/pending/run/collections.scala
+++ /dev/null
@@ -1,102 +0,0 @@
-import collection._
-
-object Test extends Application {
-
- val printTime = false
-
- def sum[A](xs: Iterable[int]) = (0 /: xs)((x, y) => x + y)
-
- def time(op: => unit): unit = {
- val start = System.currentTimeMillis;
- op
- if (printTime) Console.println(" time = "+(System.currentTimeMillis - start)+"ms")
- }
-
- def test(msg: String, s0: collection.immutable.Set[int]) = {
- Console.println("***** "+msg+":")
- var s = s0
- s = s + 2
- s = s + (3, 4000, 10000)
- Console.println("test1: "+sum(s))
- time {
- s = s ++ (List.range(0, 5000) map (2*))
- Console.println("test2: "+sum(s))
- }
- time {
- var x = 0
- for (val i <- (0 to 10000))
- if (s contains i) x = x + i
- Console.println("test3: "+x)
- }
- }
-
- def test(msg: String, s0: collection.mutable.Set[int]) = {
- Console.println("***** "+msg+":")
- var s = s0
- s = s + 2
- s = s + (3, 4000, 10000)
- Console.println("test1: "+sum(s))
- time {
- s = s ++ (List.range(0, 5000) map (2*))
- Console.println("test2: "+sum(s))
- }
- time {
- var x = 0
- for (val i <- (0 to 10000))
- if (s contains i) x = x + i
- Console.println("test3: "+x)
- }
- }
-
- def test(msg: String, s0: collection.immutable.Map[int, int]) = {
- Console.println("***** "+msg+":")
- var s = s0
- s = s + (2 -> 2)
- s = s + (3 -> 3, 4000 -> 4000, 10000 -> 10000)
- Console.println("test1: "+sum(s map (._2)))
- time {
- s = s ++ (List.range(0, 1000) map (x => x * 2 -> x * 2))
- Console.println("test2: "+sum(s map (._2)))
- }
- time {
- var x = 0
- for (val i <- (0 to 10000))
- s get i match {
- case Some(i) => x = x + i
- case None =>
- }
- Console.println("test3: "+x)
- }
- }
-
- def test(msg: String, s0: collection.mutable.Map[int, int]) = {
- Console.println("***** "+msg+":")
- var s = s0
- s = s + (2 -> 2)
- s = s + (3 -> 3, 4000 -> 4000, 10000 -> 10000)
- Console.println("test1: "+sum(s map (._2)))
- time {
- s = s ++ (List.range(0, 5000) map (x => x * 2 -> x * 2))
- Console.println("test2: "+sum(s map (._2)))
- }
- time {
- var x = 0
- for (val i <- (0 to 10000))
- s get i match {
- case Some(i) => x = x + i
- case None =>
- }
- Console.println("test3: "+x)
- }
- }
-
- test("immutable.ListSet", new immutable.ListSet[int])
- test("immutable.TreeSet", new immutable.TreeSet[int])
- test("mutable.HashSet", new mutable.HashSet[int])
- test("immutable.ListMap", new immutable.ListMap[int, int])
- test("immutable.TreeMap", new immutable.TreeMap[int, int])
- test("immutable.UnBalancedTreeMap", new immutable.UnbalancedTreeMap[int, int])
- test("immutable.HashTreeSet", new immutable.HashTreeSet[int])
- test("immutable.HashTreeMap", new immutable.HashTreeMap[int, int])
- test("mutable.HashMap", new mutable.HashMap[int, int])
-}
diff --git a/test/pending/run/deprecated.scala b/test/pending/run/deprecated.scala
deleted file mode 100644
index 122e339d2f..0000000000
--- a/test/pending/run/deprecated.scala
+++ /dev/null
@@ -1,35 +0,0 @@
-object Test {
- abstract class AbstractStuff {
- def dostuff: Unit
- }
-
- [postabstract]
- class BlueStuff extends AbstractStuff {
- [deprecated] def dostuff = Console.println("blue")
- def five = "five"
- }
-
- class LightBlueStuff extends BlueStuff {
- [deprecated] override def dostuff = {Console.println("light blue")}
-
- // warning: deprecated method overrides a concrete method
- [deprecated] override def five = "light five"
- }
-
- // warning: not marked as postabstract
- class RedStuff extends AbstractStuff {
- [deprecated] def dostuff = Console.println("red")
- }
-
-
- def main(args: Array[String]) {
- // warning: BlueStuff will be abstract after deprecated methods are removed
- val blue = new BlueStuff
-
- // warning: RedStuff will be abstract after deprecated methods are removed
- val red = new RedStuff
-
- // warning: dostuff is deprecated
- blue.dostuff
- }
-}
diff --git a/test/pending/run/exc1.scala b/test/pending/run/exc1.scala
deleted file mode 100644
index 48fc084dda..0000000000
--- a/test/pending/run/exc1.scala
+++ /dev/null
@@ -1,10 +0,0 @@
-object exc1 extends Application {
- def foo(): unit = {
- while (true) {
- try {
- } catch {
- case ex: Exception =>
- }
- }
- }
-}
diff --git a/test/pending/run/hk-lub-fail.scala b/test/pending/run/hk-lub-fail.scala
new file mode 100644
index 0000000000..b58a86ee75
--- /dev/null
+++ b/test/pending/run/hk-lub-fail.scala
@@ -0,0 +1,37 @@
+// Tue Jul 12 16:38:23 PDT 2011
+
+class Bip[T1]
+class Foo[T2] extends Bip[T2]
+class Bar[T3] extends Bip[T3]
+
+abstract class Factory[CC[X] <: Bip[X]] { }
+
+object Quux1 extends Factory[Foo]
+object Quux2 extends Factory[Bar]
+
+object Test {
+ // FAIL
+ val xs = List(Quux1, Quux2)
+ // error: type mismatch;
+ // found : Quux1.type (with underlying type object Quux1)
+ // required: Factory[_ >: Bar with Foo <: Bip]
+ // ^^ ^^ ^^ ^^ <-- QUIZ: what is missing from these types?
+
+ // The type it should figure out, come on scalac
+ type F = Factory[CC] forSome { type X ; type CC[X] >: Bar[X] with Foo[X] <: Bip[X] }
+
+ // No problem
+ val ys = List[F](Quux1, Quux2)
+
+ // A repl session to get you started.
+/*
+ val quux1 = EmptyPackageClass.tpe.member(newTermName("Quux1"))
+ val quux2 = EmptyPackageClass.tpe.member(newTermName("Quux2"))
+ val tps = List(quux1, quux2) map (_.tpe)
+ val test = EmptyPackageClass.tpe.member(newTermName("Test"))
+ val f = test.tpe.member(newTypeName("F")).tpe
+
+ val fn = f.normalize.asInstanceOf[ExistentialType]
+ val fn2 = fn.underlying.asInstanceOf[TypeRef]
+*/
+}
diff --git a/test/pending/run/instanceOfAndTypeMatching.scala b/test/pending/run/instanceOfAndTypeMatching.scala
new file mode 100644
index 0000000000..e04ae13585
--- /dev/null
+++ b/test/pending/run/instanceOfAndTypeMatching.scala
@@ -0,0 +1,192 @@
+// Summary of incorrect or questionable behavior.
+// Full code and successful parts follow.
+
+object Summary {
+ class Outer {
+ class Inner { }
+ def f() = { class MethodInner ; new MethodInner }
+ }
+
+ // 1 static issue:
+ //
+ // Given method in MethodInner: def g(other: MethodInner) = ()
+ // method1.g(method1) fails to compile with type error.
+ //
+ // Note that this cannot be worked around by widening the return type
+ // of f() because MethodInner is declared inside of f. So there is no way
+ // I see for a class declared inside a method to receive members of its
+ // own declared type -- not only the narrow type of those from this
+ // instance, but ANY members, because there is no Foo#Bar syntax which will
+ // traverse a method.
+ //
+ // 4 runtime issues:
+ //
+ // From the outside: inner1.isInstanceOf[outer2.Inner] is true, should (maybe) be false
+ // From inside inner1: inner2.isInstanceOf[Outer.this.Inner] is true, should (maybe) be false
+ // From the outside: inner1 match { case _: outer2.Inner => true ... } is true, should definitely be false
+ // From inside method1: method2 match { case _: MethodInner => true ... } is true, should definitely be false
+ //
+ // Note that the fact that every test returns true on instances of MethodInner means
+ // that it is impossible to draw any type distinction between instances. As far as one
+ // can tell, they are all of the same type regardless not only of whether they were
+ // created on the same method invocation but whether they are contained in the same
+ // instance of Outer.
+ //
+ // WRT "same method invocation", see Iterator.duplicate for an example of this.
+}
+
+// Tests
+
+class Outer {
+ class Inner {
+ def passOuter(other: Outer) = () // pass any Outer
+ def passThisType(other: Outer.this.type) = () // pass only this Outer instance
+ def passInner(other: Inner) = () // pass only Inners from this Outer instance
+ def passInner2(other: Outer.this.Inner) = () // same as above
+ def passInnerSharp(other: Outer#Inner) = () // pass any Inner
+
+ def compareSimpleWithTypeMatch(other: Any) = other match {
+ case _: Inner => true
+ case _ => false
+ }
+ def compareSimpleWithInstanceOf(other: Any) = other.isInstanceOf[Inner]
+
+ def compareSharpWithTypeMatch(other: Any) = {
+ other match {
+ case _: Outer#Inner => true
+ case _ => false
+ }
+ }
+ def compareSharpWithInstanceOf(other: Any) = other.isInstanceOf[Outer#Inner]
+
+ def comparePathWithTypeMatch(other: Any) = other match {
+ case _: Outer.this.Inner => true
+ case _ => false
+ }
+ def comparePathWithInstanceOf(other: Any) = other.isInstanceOf[Outer.this.Inner]
+ }
+
+ def f() = {
+ class MethodInner {
+ def passOuter(other: Outer) = () // pass any Outer
+ def passThisType(other: Outer.this.type) = () // pass only this Outer instance
+ def passInner(other: Inner) = () // pass only Inners from this Outer instance
+ def passInner2(other: Outer.this.Inner) = () // same as above
+ def passInnerSharp(other: Outer#Inner) = () // pass any Inner
+ def passMethodInner(other: MethodInner) = () // pass only MethodInners from this Outer instance
+ // is there any way to refer to Outer#MethodInner? Not that there should be.
+
+ def compareWithInstanceOf(other: Any) = other.isInstanceOf[MethodInner]
+ def compareWithTypeMatch(other: Any) = other match {
+ case _: MethodInner => true
+ case _ => false
+ }
+ }
+
+ new MethodInner
+ }
+}
+
+object Test {
+ val outer1 = new Outer
+ val outer2 = new Outer
+ val inner1 = new outer1.Inner
+ val inner2 = new outer2.Inner
+ val method1 = outer1.f()
+ val method2 = outer2.f()
+
+ def testInnerStatic = {
+ // these should all work
+ inner1.passOuter(outer1)
+ inner1.passOuter(outer2)
+ inner1.passThisType(outer1)
+ inner1.passInner(inner1)
+ inner1.passInner2(inner1)
+ inner1.passInnerSharp(inner1)
+ inner1.passInnerSharp(inner2)
+
+ // these should all fail to compile, and do
+ //
+ // inner1.passThisType(outer2)
+ // inner1.passInner(inner2)
+ // inner1.passInner2(inner2)
+ }
+ def testInnerRuntime = {
+ println("testInnerRuntime\n")
+
+ List("These should be true under any scenario: ",
+ inner1.isInstanceOf[outer1.Inner] ,
+ inner1.isInstanceOf[Outer#Inner] ,
+ (inner1: Any) match { case _: Outer#Inner => true ; case _ => false } ,
+ (inner1: Any) match { case _: outer1.Inner => true ; case _ => false } ,
+ inner1.compareSharpWithTypeMatch(inner2) ,
+ inner1.compareSharpWithInstanceOf(inner2)
+ ) foreach println
+
+ List("These should be true under current proposal: ",
+ inner1.compareSimpleWithInstanceOf(inner2)
+ ) foreach println
+
+ List("These should be false under current proposal: ",
+ inner1.compareSimpleWithTypeMatch(inner2) ,
+ inner1.comparePathWithTypeMatch(inner2)
+ ) foreach println
+
+ List("These return true but I think should return false: ",
+ inner1.isInstanceOf[outer2.Inner] , // true
+ inner1.comparePathWithInstanceOf(inner2) // true
+ ) foreach println
+
+ List("These are doing the wrong thing under current proposal",
+ (inner1: Any) match { case _: outer2.Inner => true ; case _ => false } // should be false
+ ) foreach println
+ }
+
+ def testMethodInnerStatic = {
+ // these should all work
+ method1.passOuter(outer1)
+ method1.passOuter(outer2)
+ method1.passThisType(outer1)
+ method1.passInner(inner1)
+ method1.passInner2(inner1)
+ method1.passInnerSharp(inner1)
+ method1.passInnerSharp(inner2)
+ // This fails with:
+ //
+ // a.scala:114: error: type mismatch;
+ // found : Test.method1.type (with underlying type MethodInner forSome { type MethodInner <: java.lang.Object with ScalaObject{def passOuter(other: Outer): Unit; def passThisType(other: Test.outer1.type): Unit; def passInner(other: Test.outer1.Inner): Unit; def passInner2(other: Test.outer1.Inner): Unit; def passInnerSharp(other: Outer#Inner): Unit; def passMethodInner(other: MethodInner): Unit} })
+ // required: MethodInner where type MethodInner <: java.lang.Object with ScalaObject{def passOuter(other: Outer): Unit; def passThisType(other: Test.outer1.type): Unit; def passInner(other: Test.outer1.Inner): Unit; def passInner2(other: Test.outer1.Inner): Unit; def passInnerSharp(other: Outer#Inner): Unit; def passMethodInner(other: MethodInner): Unit}
+ // method1.passMethodInner(method1)
+ // ^
+ method1.passMethodInner(method1)
+
+ // these should all fail to compile, and do
+ //
+ // method1.passThisType(outer2)
+ // method1.passInner(inner2)
+ // method1.passInner2(inner2)
+ // method1.passMethodInner(method2)
+ }
+
+ def testMethodInnerRuntime = {
+ println("\ntestMethodInnerRuntime\n")
+
+ List("These should be true under any scenario: ",
+ method1.compareWithInstanceOf(method1) ,
+ method1.compareWithTypeMatch(method1)
+ ) foreach println
+
+ List("These should be true under current proposal: ",
+ method1.compareWithInstanceOf(method2)
+ ) foreach println
+
+ List("These are doing the wrong thing under current proposal",
+ method1.compareWithTypeMatch(method2) // should be false
+ ) foreach println
+ }
+
+ def main(args: Array[String]): Unit = {
+ testInnerRuntime
+ testMethodInnerRuntime
+ }
+}
diff --git a/test/pending/run/jar-version.scala b/test/pending/run/jar-version.scala
new file mode 100644
index 0000000000..b79dfe733d
--- /dev/null
+++ b/test/pending/run/jar-version.scala
@@ -0,0 +1,11 @@
+import scala.util.Properties._
+import scala.tools.nsc.util.ClassPath._
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ infoFor(this).jarManifestMainAttrs get ScalaCompilerVersion match {
+ case Some(v) => println("I was built by scala compiler version " + v)
+ case _ => println("I was not apprised of which scala compiler version built me.")
+ }
+ }
+}
diff --git a/test/pending/run/mixins.scala b/test/pending/run/mixins.scala
deleted file mode 100644
index c7926c9c53..0000000000
--- a/test/pending/run/mixins.scala
+++ /dev/null
@@ -1,6 +0,0 @@
-trait A { val x: Int }
-trait B extends A { override val x = 1 } // with A
-trait C extends A { override val x = 2 } // with A
-object Test extends B with C with Application {
- println(x)
-}
diff --git a/test/pending/run/records.scala b/test/pending/run/records.scala
deleted file mode 100644
index 87b15265f2..0000000000
--- a/test/pending/run/records.scala
+++ /dev/null
@@ -1,25 +0,0 @@
-trait C {
- def f: int
-}
-
-object Test {
- type T = C {
- def f: int
- def g: String
- }
-
- val x: T = new C {
- def f = 1
- def g = "hello"
- }
-
- val y = new C {
- def f = 2
- def g = " world"
- }
-
- val z: T = y
-
- Console.println(x.f+z.f+", expected = 3")
- Console.println(x.g+z.g+", expected = hello world")
-}
diff --git a/test/pending/run/reify_addressbook.check b/test/pending/run/reify_addressbook.check
new file mode 100644
index 0000000000..4e12f87bdc
--- /dev/null
+++ b/test/pending/run/reify_addressbook.check
@@ -0,0 +1,30 @@
+<html>
+ <head>
+ <title>
+ My Address Book
+ </title>
+ <style type="text/css"> table { border-right: 1px solid #cccccc; }
+ th { background-color: #cccccc; }
+ td { border-left: 1px solid #acacac; }
+ td { border-bottom: 1px solid #acacac;
+ </style>
+ </head>
+ <body>
+ <table cellspacing="0" cellpadding="2">
+ <tr>
+ <th>Name</th>
+ <th>Age</th>
+ </tr>
+ <tr>
+ <td> Tom </td>
+ <td> 20 </td>
+ </tr><tr>
+ <td> Bob </td>
+ <td> 22 </td>
+ </tr><tr>
+ <td> James </td>
+ <td> 19 </td>
+ </tr>
+ </table>
+ </body>
+ </html>
diff --git a/test/pending/run/reify_addressbook.scala b/test/pending/run/reify_addressbook.scala
new file mode 100644
index 0000000000..225f26b75e
--- /dev/null
+++ b/test/pending/run/reify_addressbook.scala
@@ -0,0 +1,71 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ case class Person(name: String, age: Int)
+
+ /** An AddressBook takes a variable number of arguments
+ * which are accessed as a Sequence
+ */
+ class AddressBook(a: Person*) {
+ private val people: List[Person] = a.toList
+
+ /** Serialize to XHTML. Scala supports XML literals
+ * which may contain Scala expressions between braces,
+ * which are replaced by their evaluation
+ */
+ def toXHTML =
+ <table cellpadding="2" cellspacing="0">
+ <tr>
+ <th>Name</th>
+ <th>Age</th>
+ </tr>
+ { for (p <- people) yield
+ <tr>
+ <td> { p.name } </td>
+ <td> { p.age.toString() } </td>
+ </tr>
+ }
+ </table>;
+ }
+
+ /** We introduce CSS using raw strings (between triple
+ * quotes). Raw strings may contain newlines and special
+ * characters (like \) are not interpreted.
+ */
+ val header =
+ <head>
+ <title>
+ { "My Address Book" }
+ </title>
+ <style type="text/css"> {
+ """table { border-right: 1px solid #cccccc; }
+ th { background-color: #cccccc; }
+ td { border-left: 1px solid #acacac; }
+ td { border-bottom: 1px solid #acacac;"""}
+ </style>
+ </head>;
+
+ val people = new AddressBook(
+ Person("Tom", 20),
+ Person("Bob", 22),
+ Person("James", 19));
+
+ val page =
+ <html>
+ { header }
+ <body>
+ { people.toXHTML }
+ </body>
+ </html>;
+
+ println(page)
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ toolbox.runExpr(ttree)
+}
diff --git a/test/pending/run/reify_brainf_ck.check b/test/pending/run/reify_brainf_ck.check
new file mode 100644
index 0000000000..702bb18394
--- /dev/null
+++ b/test/pending/run/reify_brainf_ck.check
@@ -0,0 +1,4 @@
+---running---
+Hello World!
+
+---done---
diff --git a/test/pending/run/reify_brainf_ck.scala b/test/pending/run/reify_brainf_ck.scala
new file mode 100644
index 0000000000..3bfb76c9ea
--- /dev/null
+++ b/test/pending/run/reify_brainf_ck.scala
@@ -0,0 +1,85 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ import scala.annotation._
+
+ trait Func[T] {
+ val zero: T
+ def inc(t: T): T
+ def dec(t: T): T
+ def in: T
+ def out(t: T): Unit
+ }
+
+ object ByteFunc extends Func[Byte] {
+ override val zero: Byte = 0
+ override def inc(t: Byte) = ((t + 1) & 0xFF).toByte
+ override def dec(t: Byte) = ((t - 1) & 0xFF).toByte
+ override def in: Byte = readByte
+ override def out(t: Byte) { print(t.toChar) }
+ }
+
+ case class Tape[T](left: List[T], cell: T, right: List[T])(implicit func: Func[T]) {
+ private def headOf(list:List[T]) = if (list.isEmpty) func.zero else list.head
+ private def tailOf(list:List[T]) = if (list.isEmpty) Nil else list.tail
+ def isZero = cell == func.zero
+ def execute(ch: Char) = (ch: @switch) match {
+ case '+' => copy(cell = func.inc(cell))
+ case '-' => copy(cell = func.dec(cell))
+ case '<' => Tape(tailOf(left), headOf(left), cell :: right)
+ case '>' => Tape(cell :: left, headOf(right), tailOf(right))
+ case '.' => func.out(cell); this
+ case ',' => copy(cell = func.in)
+ case '[' | ']' => this
+ case _ => error("Unexpected token: " + ch)
+ }
+ }
+
+ object Tape {
+ def empty[T](func: Func[T]) = Tape(Nil, func.zero, Nil)(func)
+ }
+
+ class Brainfuck[T](func:Func[T]) {
+
+ def execute(p: String) {
+ val prog = p.replaceAll("[^\\+\\-\\[\\]\\.\\,\\>\\<]", "")
+
+ @tailrec def braceMatcher(pos: Int, stack: List[Int], o2c: Map[Int, Int]): Map[Int,Int] =
+ if(pos == prog.length) o2c else (prog(pos): @switch) match {
+ case '[' => braceMatcher(pos + 1, pos :: stack, o2c)
+ case ']' => braceMatcher(pos + 1, stack.tail, o2c + (stack.head -> pos))
+ case _ => braceMatcher(pos + 1, stack, o2c)
+ }
+
+ val open2close = braceMatcher(0, Nil, Map())
+ val close2open = open2close.map(_.swap)
+
+ @tailrec def ex(pos:Int, tape:Tape[T]): Unit =
+ if(pos < prog.length) ex((prog(pos): @switch) match {
+ case '[' if tape.isZero => open2close(pos)
+ case ']' if ! tape.isZero => close2open(pos)
+ case _ => pos + 1
+ }, tape.execute(prog(pos)))
+
+ println("---running---")
+ ex(0, Tape.empty(func))
+ println("\n---done---")
+ }
+ }
+
+ val bf = new Brainfuck(ByteFunc)
+ bf.execute(""">+++++++++[<++++++++>-]<.>+++++++[<++
+ ++>-]<+.+++++++..+++.[-]>++++++++[<++++>-]
+ <.#>+++++++++++[<+++++>-]<.>++++++++[<++
+ +>-]<.+++.------.--------.[-]>++++++++[<++++>
+ -]<+.[-]++++++++++.""")
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ toolbox.runExpr(ttree)
+}
diff --git a/test/pending/run/reify_callccinterpreter.check b/test/pending/run/reify_callccinterpreter.check
new file mode 100644
index 0000000000..ef8fc121df
--- /dev/null
+++ b/test/pending/run/reify_callccinterpreter.check
@@ -0,0 +1,3 @@
+42
+wrong
+5
diff --git a/test/pending/run/reify_callccinterpreter.scala b/test/pending/run/reify_callccinterpreter.scala
new file mode 100644
index 0000000000..c10f4f0b4e
--- /dev/null
+++ b/test/pending/run/reify_callccinterpreter.scala
@@ -0,0 +1,94 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ type Answer = Value;
+
+ /**
+ * A continuation monad.
+ */
+ case class M[A](in: (A => Answer) => Answer) {
+ def bind[B](k: A => M[B]) = M[B](c => in (a => k(a) in c))
+ def map[B](f: A => B): M[B] = bind(x => unitM(f(x)))
+ def flatMap[B](f: A => M[B]): M[B] = bind(f)
+ }
+
+ def unitM[A](a: A) = M[A](c => c(a))
+
+ def id[A] = (x: A) => x
+ def showM(m: M[Value]): String = (m in id).toString()
+
+ def callCC[A](h: (A => M[A]) => M[A]) =
+ M[A](c => h(a => M[A](d => c(a))) in c)
+
+ type Name = String
+
+ trait Term
+ case class Var(x: Name) extends Term
+ case class Con(n: Int) extends Term
+ case class Add(l: Term, r: Term) extends Term
+ case class Lam(x: Name, body: Term) extends Term
+ case class App(fun: Term, arg: Term) extends Term
+ case class Ccc(x: Name, t: Term) extends Term
+
+ trait Value
+ case object Wrong extends Value {
+ override def toString() = "wrong"
+ }
+ case class Num(n: Int) extends Value {
+ override def toString() = n.toString()
+ }
+ case class Fun(f: Value => M[Value]) extends Value {
+ override def toString() = "<function>"
+ }
+
+ type Environment = List[Pair[Name, Value]];
+
+ def lookup(x: Name, e: Environment): M[Value] = e match {
+ case List() => unitM(Wrong)
+ case Pair(y, b) :: e1 => if (x == y) unitM(b) else lookup(x, e1)
+ }
+
+ def add(a: Value, b: Value): M[Value] = Pair(a, b) match {
+ case Pair(Num(m), Num(n)) => unitM(Num(m + n))
+ case _ => unitM(Wrong)
+ }
+
+ def apply(a: Value, b: Value): M[Value] = a match {
+ case Fun(k) => k(b)
+ case _ => unitM(Wrong)
+ }
+
+ def interp(t: Term, e: Environment): M[Value] = t match {
+ case Var(x) => lookup(x, e)
+ case Con(n) => unitM(Num(n))
+ case Add(l, r) => for (a <- interp(l, e);
+ b <- interp(r, e);
+ c <- add(a, b))
+ yield c
+ case Lam(x, t) => unitM(Fun(a => interp(t, Pair(x, a) :: e)))
+ case App(f, t) => for (a <- interp(f, e);
+ b <- interp(t, e);
+ c <- apply(a, b))
+ yield c
+ case Ccc(x, t) => callCC(k => interp(t, Pair(x, Fun(k)) :: e))
+ }
+
+ def test(t: Term): String = showM(interp(t, List()))
+
+ val term0 = App(Lam("x", Add(Var("x"), Var("x"))), Add(Con(10), Con(11)))
+ val term1 = App(Con(1), Con(2))
+ val term2 = Add(Con(1), Ccc("k", Add(Con(2), App(Var("k"), Con(4)))))
+
+ println(test(term0))
+ println(test(term1))
+ println(test(term2))
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ toolbox.runExpr(ttree)
+}
diff --git a/test/pending/run/reify_complex.check b/test/pending/run/reify_complex.check
new file mode 100644
index 0000000000..7df35e33a0
--- /dev/null
+++ b/test/pending/run/reify_complex.check
@@ -0,0 +1 @@
+3.0+4.0*i
diff --git a/test/pending/run/reify_complex.scala b/test/pending/run/reify_complex.scala
new file mode 100644
index 0000000000..aae4d558cf
--- /dev/null
+++ b/test/pending/run/reify_complex.scala
@@ -0,0 +1,31 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ class Complex(val re: Double, val im: Double) {
+ def + (that: Complex) =
+ new Complex(re + that.re, im + that.im)
+ def - (that: Complex) =
+ new Complex(re - that.re, im - that.im)
+ def * (that: Complex) =
+ new Complex(re * that.re - im * that.im,
+ re * that.im + im * that.re)
+ def / (that: Complex) = {
+ val denom = that.re * that.re + that.im * that.im
+ new Complex((re * that.re + im * that.im) / denom,
+ (im * that.re - re * that.im) / denom)
+ }
+ override def toString =
+ re + (if (im < 0) "-" + (-im) else "+" + im) + "*i"
+ }
+ val x = new Complex(2, 1); val y = new Complex(1, 3)
+ println(x + y)
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ toolbox.runExpr(ttree)
+}
diff --git a/test/pending/run/reify_csv.check b/test/pending/run/reify_csv.check
new file mode 100644
index 0000000000..b56f4bb50b
--- /dev/null
+++ b/test/pending/run/reify_csv.check
@@ -0,0 +1,10 @@
+List(phase name, id, description)
+record(parser,1,parse source into ASTs, perform simple desugaring)
+record(namer,2,resolve names, attach symbols to named trees)
+record(packageobjects,3,load package objects)
+record(typer,4,the meat and potatoes: type the trees)
+record(superaccessors,5,add super accessors in traits and nested classes)
+record(pickler,6,serialize symbol tables)
+record(refchecks,7,reference/override checking, translate nested objects)
+record(selectiveanf,8,)
+record(liftcode,9,reify trees)
diff --git a/test/pending/run/reify_csv.scala b/test/pending/run/reify_csv.scala
new file mode 100644
index 0000000000..a05a3b55d4
--- /dev/null
+++ b/test/pending/run/reify_csv.scala
@@ -0,0 +1,42 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val csv = """
+ | phase name; id; description
+ | parser; 1; parse source into ASTs, perform simple desugaring
+ | namer; 2; resolve names, attach symbols to named trees
+ |packageobjects; 3; load package objects
+ | typer; 4; the meat and potatoes: type the trees
+ |superaccessors; 5; add super accessors in traits and nested classes
+ | pickler; 6; serialize symbol tables
+ | refchecks; 7; reference/override checking, translate nested objects
+ | selectiveanf; 8;
+ | liftcode; 9; reify trees""".stripMargin.split("\n").map{_.trim()}.drop(1).toList
+
+ val fields = csv.head.split(";").map{_.trim()}.toList
+ println(fields)
+
+ val code = scala.reflect.Code.lift({
+ object Csv {
+ case class record(`phase name`: String, id: String, description: String)
+
+ object record {
+ def parse(lines: List[String]) = {
+ lines drop(1) map { line => line.split(";", -1).toList match {
+ case phase$whitespace$name :: id :: description :: _ => record(phase$whitespace$name.trim(), id.trim(), description.trim())
+ case _ => throw new Exception("format error")
+ }}
+ }
+ }
+ }
+
+ Csv.record.parse(csv) foreach println
+ })
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ toolbox.runExpr(ttree)
+}
diff --git a/test/pending/run/reify_extendbuiltins.check b/test/pending/run/reify_extendbuiltins.check
new file mode 100644
index 0000000000..a48033a30d
--- /dev/null
+++ b/test/pending/run/reify_extendbuiltins.check
@@ -0,0 +1 @@
+10! = 3628800
diff --git a/test/pending/run/reify_extendbuiltins.scala b/test/pending/run/reify_extendbuiltins.scala
new file mode 100644
index 0000000000..57acd699ff
--- /dev/null
+++ b/test/pending/run/reify_extendbuiltins.scala
@@ -0,0 +1,21 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ def fact(n: Int): BigInt =
+ if (n == 0) 1 else fact(n-1) * n
+ class Factorizer(n: Int) {
+ def ! = fact(n)
+ }
+ implicit def int2fact(n: Int) = new Factorizer(n)
+
+ println("10! = " + (10!))
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ toolbox.runExpr(ttree)
+}
diff --git a/test/pending/run/reify_fors.check b/test/pending/run/reify_fors.check
new file mode 100644
index 0000000000..eefddedc20
--- /dev/null
+++ b/test/pending/run/reify_fors.check
@@ -0,0 +1,5 @@
+Persons over 20: John Richard
+divisors(34) = List(1, 2, 17, 34)
+findNums(15) = (4,1) (5,2) (6,1) (7,4) (8,3) (8,5) (9,2) (9,4) (10,1) (10,3) (10,7) (11,2) (11,6) (11,8) (12,1) (12,5) (12,7) (13,4) (13,6) (13,10) (14,3) (14,5) (14,9)
+average(List(3.5, 5.0, 4.5)) = 4.333333333333333
+scalProd(List(3.5, 5.0, 4.5), List(2.0, 1.0, 3.0)) = 25.5
diff --git a/test/pending/run/reify_fors.scala b/test/pending/run/reify_fors.scala
new file mode 100644
index 0000000000..f3556514a9
--- /dev/null
+++ b/test/pending/run/reify_fors.scala
@@ -0,0 +1,107 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ object Persons {
+ /** A list of persons. To create a list, we use Predef.List
+ * which takes a variable number of arguments and constructs
+ * a list out of them.
+ */
+ val persons = List(
+ new Person("Bob", 17),
+ new Person("John", 40),
+ new Person("Richard", 68)
+ )
+
+ /** A Person class. 'val' constructor parameters become
+ * public members of the class.
+ */
+ class Person(val name: String, val age: Int)
+
+ /** Return an iterator over persons that are older than 20.
+ */
+ def olderThan20(xs: Seq[Person]): Iterator[String] =
+ olderThan20(xs.elements)
+
+ /** Return an iterator over persons older than 20, given
+ * an iterator over persons.
+ */
+ def olderThan20(xs: Iterator[Person]): Iterator[String] = {
+
+ // The first expression is called a 'generator' and makes
+ // 'p' take values from 'xs'. The second expression is
+ // called a 'filter' and it is a boolean expression which
+ // selects only persons older than 20. There can be more than
+ // one generator and filter. The 'yield' expression is evaluated
+ // for each 'p' which satisfies the filters and used to assemble
+ // the resulting iterator
+ for (p <- xs if p.age > 20) yield p.name
+ }
+ }
+
+ /** Some functions over lists of numbers which demonstrate
+ * the use of for comprehensions.
+ */
+ object Numeric {
+
+ /** Return the divisors of n. */
+ def divisors(n: Int): List[Int] =
+ for (i <- List.range(1, n+1) if n % i == 0) yield i
+
+ /** Is 'n' a prime number? */
+ def isPrime(n: Int) = divisors(n).length == 2
+
+ /** Return pairs of numbers whose sum is prime. */
+ def findNums(n: Int): Iterable[(Int, Int)] = {
+
+ // a for comprehension using two generators
+ for (i <- 1 until n;
+ j <- 1 until (i-1);
+ if isPrime(i + j)) yield (i, j)
+ }
+
+ /** Return the sum of the elements of 'xs'. */
+ def sum(xs: List[Double]): Double =
+ xs.foldLeft(0.0) { (x, y) => x + y }
+
+ /** Return the sum of pairwise product of the two lists. */
+ def scalProd(xs: List[Double], ys: List[Double]) =
+ sum(for((x, y) <- xs zip ys) yield x * y);
+
+ /** Remove duplicate elements in 'xs'. */
+ def removeDuplicates[A](xs: List[A]): List[A] =
+ if (xs.isEmpty)
+ xs
+ else
+ xs.head :: removeDuplicates(for (x <- xs.tail if x != xs.head) yield x)
+ }
+
+ // import all members of object 'persons' in the current scope
+ import Persons._
+
+ print("Persons over 20:")
+ olderThan20(persons) foreach { x => print(" " + x) }
+ println
+
+ import Numeric._
+
+ println("divisors(34) = " + divisors(34))
+
+ print("findNums(15) =")
+ findNums(15) foreach { x => print(" " + x) }
+ println
+
+ val xs = List(3.5, 5.0, 4.5)
+ println("average(" + xs + ") = " + sum(xs) / xs.length)
+
+ val ys = List(2.0, 1.0, 3.0)
+ println("scalProd(" + xs + ", " + ys +") = " + scalProd(xs, ys))
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ toolbox.runExpr(ttree)
+}
diff --git a/test/pending/run/reify_gadts.check b/test/pending/run/reify_gadts.check
new file mode 100644
index 0000000000..d81cc0710e
--- /dev/null
+++ b/test/pending/run/reify_gadts.check
@@ -0,0 +1 @@
+42
diff --git a/test/pending/run/reify_gadts.scala b/test/pending/run/reify_gadts.scala
new file mode 100644
index 0000000000..7077de735c
--- /dev/null
+++ b/test/pending/run/reify_gadts.scala
@@ -0,0 +1,45 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ /* The syntax tree of a toy language */
+ abstract class Term[T]
+
+ /* An integer literal */
+ case class Lit(x: Int) extends Term[Int]
+
+ /* Successor of a number */
+ case class Succ(t: Term[Int]) extends Term[Int]
+
+ /* Is 't' equal to zero? */
+ case class IsZero(t: Term[Int]) extends Term[Boolean]
+
+ /* An 'if' expression. */
+ case class If[T](c: Term[Boolean],
+ t1: Term[T],
+ t2: Term[T]) extends Term[T]
+
+ /** A type-safe eval function. The right-hand sides can
+ * make use of the fact that 'T' is a more precise type,
+ * constraint by the pattern type.
+ */
+ def eval[T](t: Term[T]): T = t match {
+ case Lit(n) => n
+
+ // the right hand side makes use of the fact
+ // that T = Int and so it can use '+'
+ case Succ(u) => eval(u) + 1
+ case IsZero(u) => eval(u) == 0
+ case If(c, u1, u2) => eval(if (eval(c)) u1 else u2)
+ }
+ println(
+ eval(If(IsZero(Lit(1)), Lit(41), Succ(Lit(41)))))
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ toolbox.runExpr(ttree)
+}
diff --git a/test/pending/run/reify_implicits.check b/test/pending/run/reify_implicits.check
new file mode 100644
index 0000000000..e3aeb20f6b
--- /dev/null
+++ b/test/pending/run/reify_implicits.check
@@ -0,0 +1 @@
+x = List(1, 2, 3, 4)
diff --git a/test/pending/run/reify_implicits.scala b/test/pending/run/reify_implicits.scala
new file mode 100644
index 0000000000..a15cef9c97
--- /dev/null
+++ b/test/pending/run/reify_implicits.scala
@@ -0,0 +1,21 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ implicit def arrayWrapper[A : ClassManifest](x: Array[A]) =
+ new {
+ def sort(p: (A, A) => Boolean) = {
+ util.Sorting.stableSort(x, p); x
+ }
+ }
+ val x = Array(2, 3, 1, 4)
+ println("x = "+ x.sort((x: Int, y: Int) => x < y).toList)
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ toolbox.runExpr(ttree)
+}
diff --git a/test/pending/run/reify_lazyevaluation.check b/test/pending/run/reify_lazyevaluation.check
new file mode 100644
index 0000000000..1c7f96cd96
--- /dev/null
+++ b/test/pending/run/reify_lazyevaluation.check
@@ -0,0 +1,8 @@
+s = Susp(?)
+evaluating...
+s() = 3
+s = Susp(3)
+2 + s = 5
+sl2 = Susp(?)
+sl2() = Some(3)
+sl2 = Susp(Some(3))
diff --git a/test/pending/run/reify_lazyevaluation.scala b/test/pending/run/reify_lazyevaluation.scala
new file mode 100644
index 0000000000..f38af76751
--- /dev/null
+++ b/test/pending/run/reify_lazyevaluation.scala
@@ -0,0 +1,65 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ object lazyLib {
+
+ /** Delay the evaluation of an expression until it is needed. */
+ def delay[A](value: => A): Susp[A] = new SuspImpl[A](value)
+
+ /** Get the value of a delayed expression. */
+ implicit def force[A](s: Susp[A]): A = s()
+
+ /**
+ * Data type of suspended computations. (The name froms from ML.)
+ */
+ abstract class Susp[+A] extends Function0[A]
+
+ /**
+ * Implementation of suspended computations, separated from the
+ * abstract class so that the type parameter can be invariant.
+ */
+ class SuspImpl[A](lazyValue: => A) extends Susp[A] {
+ private var maybeValue: Option[A] = None
+
+ override def apply() = maybeValue match {
+ case None =>
+ val value = lazyValue
+ maybeValue = Some(value)
+ value
+ case Some(value) =>
+ value
+ }
+
+ override def toString() = maybeValue match {
+ case None => "Susp(?)"
+ case Some(value) => "Susp(" + value + ")"
+ }
+ }
+ }
+
+ import lazyLib._
+
+ val s: Susp[Int] = delay { println("evaluating..."); 3 }
+
+ println("s = " + s) // show that s is unevaluated
+ println("s() = " + s()) // evaluate s
+ println("s = " + s) // show that the value is saved
+ println("2 + s = " + (2 + s)) // implicit call to force()
+
+ val sl = delay { Some(3) }
+ val sl1: Susp[Some[Int]] = sl
+ val sl2: Susp[Option[Int]] = sl1 // the type is covariant
+
+ println("sl2 = " + sl2)
+ println("sl2() = " + sl2())
+ println("sl2 = " + sl2)
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ toolbox.runExpr(ttree)
+}
diff --git a/test/pending/run/reify_maps.check b/test/pending/run/reify_maps.check
new file mode 100644
index 0000000000..08cbbb1359
--- /dev/null
+++ b/test/pending/run/reify_maps.check
@@ -0,0 +1,4 @@
+red has code: 16711680
+Unknown color: green
+Unknown color: blue
+turquoise has code: 65535
diff --git a/test/pending/run/reify_maps.scala b/test/pending/run/reify_maps.scala
new file mode 100644
index 0000000000..589b28d049
--- /dev/null
+++ b/test/pending/run/reify_maps.scala
@@ -0,0 +1,26 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ val colors = Map("red" -> 0xFF0000,
+ "turquoise" -> 0x00FFFF,
+ "black" -> 0x000000,
+ "orange" -> 0xFF8040,
+ "brown" -> 0x804000)
+ for (name <- List("red", "green", "blue", "turquoise")) println(
+ colors.get(name) match {
+ case Some(code) =>
+ name + " has code: " + code
+ case None =>
+ "Unknown color: " + name
+ }
+ )
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ toolbox.runExpr(ttree)
+}
diff --git a/test/pending/run/reify_properties.check b/test/pending/run/reify_properties.check
new file mode 100644
index 0000000000..d769bea4b0
--- /dev/null
+++ b/test/pending/run/reify_properties.check
@@ -0,0 +1,2 @@
+user1: MR. ROBERT <noname>
+user2: MR. BOB KUZ
diff --git a/test/pending/run/reify_properties.scala b/test/pending/run/reify_properties.scala
new file mode 100644
index 0000000000..2115a96715
--- /dev/null
+++ b/test/pending/run/reify_properties.scala
@@ -0,0 +1,63 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ /** A mutable property whose getter and setter may be customized. */
+ case class Property[T](init: T) {
+ private var value: T = init
+
+ /** The getter function, defaults to identity. */
+ private var setter: T => T = identity[T]
+
+ /** The setter function, defaults to identity. */
+ private var getter: T => T = identity[T]
+
+ /** Retrive the value held in this property. */
+ def apply(): T = getter(value)
+
+ /** Update the value held in this property, through the setter. */
+ def update(newValue: T) = value = setter(newValue)
+
+ /** Change the getter. */
+ def get(newGetter: T => T) = { getter = newGetter; this }
+
+ /** Change the setter */
+ def set(newSetter: T => T) = { setter = newSetter; this }
+ }
+
+ class User {
+ // Create a property with custom getter and setter
+ val firstname = Property("")
+ .get { v => v.toUpperCase() }
+ .set { v => "Mr. " + v }
+ val lastname = Property("<noname>")
+
+ /** Scala provides syntactic sugar for calling 'apply'. Simply
+ * adding a list of arguments between parenthesis (in this case,
+ * an empty list) is translated to a call to 'apply' with those
+ * arguments.
+ */
+ override def toString() = firstname() + " " + lastname()
+ }
+
+ val user1 = new User
+
+ // Syntactic sugar for 'update': an assignment is translated to a
+ // call to method 'update'
+ user1.firstname() = "Robert"
+
+ val user2 = new User
+ user2.firstname() = "bob"
+ user2.lastname() = "KUZ"
+
+ println("user1: " + user1)
+ println("user2: " + user2)
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ toolbox.runExpr(ttree)
+}
diff --git a/test/pending/run/reify_simpleinterpreter.check b/test/pending/run/reify_simpleinterpreter.check
new file mode 100644
index 0000000000..4344dc9009
--- /dev/null
+++ b/test/pending/run/reify_simpleinterpreter.check
@@ -0,0 +1,2 @@
+42
+wrong
diff --git a/test/pending/run/reify_simpleinterpreter.scala b/test/pending/run/reify_simpleinterpreter.scala
new file mode 100644
index 0000000000..b39f5583bb
--- /dev/null
+++ b/test/pending/run/reify_simpleinterpreter.scala
@@ -0,0 +1,82 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ case class M[A](value: A) {
+ def bind[B](k: A => M[B]): M[B] = k(value)
+ def map[B](f: A => B): M[B] = bind(x => unitM(f(x)))
+ def flatMap[B](f: A => M[B]): M[B] = bind(f)
+ }
+
+ def unitM[A](a: A): M[A] = M(a)
+
+ def showM(m: M[Value]): String = m.value.toString();
+
+ type Name = String
+
+ trait Term;
+ case class Var(x: Name) extends Term
+ case class Con(n: Int) extends Term
+ case class Add(l: Term, r: Term) extends Term
+ case class Lam(x: Name, body: Term) extends Term
+ case class App(fun: Term, arg: Term) extends Term
+
+ trait Value
+ case object Wrong extends Value {
+ override def toString() = "wrong"
+ }
+ case class Num(n: Int) extends Value {
+ override def toString() = n.toString()
+ }
+ case class Fun(f: Value => M[Value]) extends Value {
+ override def toString() = "<function>"
+ }
+
+ type Environment = List[Pair[Name, Value]]
+
+ def lookup(x: Name, e: Environment): M[Value] = e match {
+ case List() => unitM(Wrong)
+ case Pair(y, b) :: e1 => if (x == y) unitM(b) else lookup(x, e1)
+ }
+
+ def add(a: Value, b: Value): M[Value] = Pair(a, b) match {
+ case Pair(Num(m), Num(n)) => unitM(Num(m + n))
+ case _ => unitM(Wrong)
+ }
+
+ def apply(a: Value, b: Value): M[Value] = a match {
+ case Fun(k) => k(b)
+ case _ => unitM(Wrong)
+ }
+
+ def interp(t: Term, e: Environment): M[Value] = t match {
+ case Var(x) => lookup(x, e)
+ case Con(n) => unitM(Num(n))
+ case Add(l, r) => for (a <- interp(l, e);
+ b <- interp(r, e);
+ c <- add(a, b))
+ yield c
+ case Lam(x, t) => unitM(Fun(a => interp(t, Pair(x, a) :: e)))
+ case App(f, t) => for (a <- interp(f, e);
+ b <- interp(t, e);
+ c <- apply(a, b))
+ yield c
+ }
+
+ def test(t: Term): String =
+ showM(interp(t, List()))
+
+ val term0 = App(Lam("x", Add(Var("x"), Var("x"))), Add(Con(10), Con(11)))
+ val term1 = App(Con(1), Con(2))
+
+ println(test(term0))
+ println(test(term1))
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ toolbox.runExpr(ttree)
+}
diff --git a/test/pending/run/reify_sort.check b/test/pending/run/reify_sort.check
new file mode 100644
index 0000000000..375536cc29
--- /dev/null
+++ b/test/pending/run/reify_sort.check
@@ -0,0 +1,2 @@
+[6,2,8,5,1]
+[1,2,5,6,8]
diff --git a/test/pending/run/reify_sort.scala b/test/pending/run/reify_sort.scala
new file mode 100644
index 0000000000..42991fe5d2
--- /dev/null
+++ b/test/pending/run/reify_sort.scala
@@ -0,0 +1,57 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ /** Nested methods can use and even update everything
+ * visible in their scope (including local variables or
+ * arguments of enclosing methods).
+ */
+ def sort(a: Array[Int]) {
+
+ def swap(i: Int, j: Int) {
+ val t = a(i); a(i) = a(j); a(j) = t
+ }
+
+ def sort1(l: Int, r: Int) {
+ val pivot = a((l + r) / 2)
+ var i = l
+ var j = r
+ while (i <= j) {
+ while (a(i) < pivot) i += 1
+ while (a(j) > pivot) j -= 1
+ if (i <= j) {
+ swap(i, j)
+ i += 1
+ j -= 1
+ }
+ }
+ if (l < j) sort1(l, j)
+ if (j < r) sort1(i, r)
+ }
+
+ if (a.length > 0)
+ sort1(0, a.length - 1)
+ }
+
+ def println(ar: Array[Int]) {
+ def print1 = {
+ def iter(i: Int): String =
+ ar(i) + (if (i < ar.length-1) "," + iter(i+1) else "")
+ if (ar.length == 0) "" else iter(0)
+ }
+ Console.println("[" + print1 + "]")
+ }
+
+ val ar = Array(6, 2, 8, 5, 1)
+ println(ar)
+ sort(ar)
+ println(ar)
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ toolbox.runExpr(ttree)
+}
diff --git a/test/pending/run/reify_sort1.check b/test/pending/run/reify_sort1.check
new file mode 100644
index 0000000000..0d30805141
--- /dev/null
+++ b/test/pending/run/reify_sort1.check
@@ -0,0 +1,2 @@
+List(6, 2, 8, 5, 1)
+List(1, 2, 5, 6, 8)
diff --git a/test/pending/run/reify_sort1.scala b/test/pending/run/reify_sort1.scala
new file mode 100644
index 0000000000..42f4c824a5
--- /dev/null
+++ b/test/pending/run/reify_sort1.scala
@@ -0,0 +1,27 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ def sort(a: List[Int]): List[Int] = {
+ if (a.length < 2)
+ a
+ else {
+ val pivot = a(a.length / 2)
+ sort(a.filter(_ < pivot)) :::
+ a.filter(_ == pivot) :::
+ sort(a.filter(_ > pivot))
+ }
+ }
+
+ val xs = List(6, 2, 8, 5, 1)
+ println(xs)
+ println(sort(xs))
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ toolbox.runExpr(ttree)
+}
diff --git a/test/pending/run/reify_timeofday.check b/test/pending/run/reify_timeofday.check
new file mode 100644
index 0000000000..3fd3b76a62
--- /dev/null
+++ b/test/pending/run/reify_timeofday.check
@@ -0,0 +1 @@
+DateError
diff --git a/test/pending/run/reify_timeofday.scala b/test/pending/run/reify_timeofday.scala
new file mode 100644
index 0000000000..6bd11b0d30
--- /dev/null
+++ b/test/pending/run/reify_timeofday.scala
@@ -0,0 +1,48 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ class DateError extends Exception
+
+ /** Simulating properties in Scala
+ * (example 4.2.1 in ScalaReference.pdf)
+ */
+ class TimeOfDayVar {
+ private var h, m, s: Int = 0
+
+ def hours = h
+
+ /** A method 'ident_=' is a setter for 'ident'. 'code.ident = ...' will
+ * be translated to a call to 'ident_='
+ */
+ def hours_= (h: Int) =
+ if (0 <= h && h < 24) this.h = h
+ else throw new DateError()
+
+ def minutes = m
+ def minutes_= (m: Int) =
+ if (0 <= m && m < 60) this.m = m
+ else throw new DateError()
+
+ def seconds = s
+ def seconds_= (s: Int) =
+ if (0 <= s && s < 60) this.s = s
+ else throw new DateError()
+ }
+
+ val d = new TimeOfDayVar
+ d.hours = 8; d.minutes = 30; d.seconds = 0
+ try { d.hours = 25 // throws a DateError exception
+ } catch {
+ case de: DateError => println("DateError")
+ case e: Exception => println("Exception")
+ }
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ toolbox.runExpr(ttree)
+}
diff --git a/test/pending/run/signals.scala b/test/pending/run/signals.scala
new file mode 100644
index 0000000000..608b3c7fd5
--- /dev/null
+++ b/test/pending/run/signals.scala
@@ -0,0 +1,22 @@
+// not exactly "pending", here as an example usage.
+//
+val manager = scala.tools.util.SignalManager
+
+manager.requireInterval(3, manager.INT) {
+ case true => Console.println("\nPress ctrl-C again to exit.")
+ case false => System.exit(1)
+}
+
+manager("HUP") = println("HUP 1!")
+manager("HUP").raise()
+
+manager("HUP") += println("HUP 2!")
+manager("HUP").raise()
+
+manager("HUP") += println("HUP 3!")
+manager("HUP").raise()
+
+manager("HUP") = println("Back to HUP 1!")
+manager("HUP").raise()
+
+manager.dump()
diff --git a/test/pending/run/sigtp.check b/test/pending/run/sigtp.check
new file mode 100644
index 0000000000..a4d0f55ece
--- /dev/null
+++ b/test/pending/run/sigtp.check
@@ -0,0 +1,11 @@
+BugBase
+ (m) public abstract A BugBase.key()
+ (m) public abstract E BugBase.next()
+ (m) public abstract void BugBase.next_$eq(E)
+Bug
+ (m) public Bug<A, B> Bug.foo()
+ (m) public A Bug.key()
+ (m) public Bug<A, B> Bug.next() (bridge)
+ (m) public void Bug.next_$eq(Bug<A, B>) (bridge)
+ (f) private final A Bug.key
+ (f) private java.lang.Object Bug.next
diff --git a/test/pending/run/sigtp.scala b/test/pending/run/sigtp.scala
new file mode 100644
index 0000000000..f8e050dbdc
--- /dev/null
+++ b/test/pending/run/sigtp.scala
@@ -0,0 +1,17 @@
+import scala.tools.partest._
+
+trait BugBase [A, E] {
+ val key: A
+ var next: E = _
+}
+
+final class Bug[A, B](val key: A) extends BugBase[A, Bug[A, B]] {
+ def foo = next
+}
+
+object Test extends SigTest {
+ def main(args: Array[String]): Unit = {
+ show[BugBase[_, _]]()
+ show[Bug[_, _]]()
+ }
+}
diff --git a/test/pending/run/string-reverse.scala b/test/pending/run/string-reverse.scala
new file mode 100644
index 0000000000..976a970dec
--- /dev/null
+++ b/test/pending/run/string-reverse.scala
@@ -0,0 +1,22 @@
+/** In case we ever feel like taking on unicode string reversal.
+ * See ticket #2565.
+ */
+object Test {
+ val xs = "Les Mise\u0301rables" // this is the tricky one to reverse
+ val ys = "Les Misérables"
+ val xs2 = new StringBuilder(xs)
+ val ys2 = new StringBuilder(ys)
+
+ def main(args: Array[String]): Unit = {
+ val out = new java.io.PrintStream(System.out, true, "UTF-8")
+
+ out.println("Strings")
+ List(xs, xs.reverse, ys, ys.reverse) foreach (out println _)
+
+ out.println("StringBuilder")
+ out.println(xs2.toString)
+ out.println(xs2.reverseContents().toString)
+ out.println(ys2.toString)
+ out.println(ys2.reverseContents().toString)
+ }
+} \ No newline at end of file
diff --git a/test/pending/run/structural-types-vs-anon-classes.scala b/test/pending/run/structural-types-vs-anon-classes.scala
new file mode 100644
index 0000000000..23410e3955
--- /dev/null
+++ b/test/pending/run/structural-types-vs-anon-classes.scala
@@ -0,0 +1,17 @@
+object Test {
+ class Arm
+ class Leg
+ class Tail
+ class Monkey(arms: List[Arm], legs :List[Leg], tail: Tail)
+
+ def makeAwesomeMonkey(arms: List[Arm], legs: List[Leg], tail: Tail) = {
+ object m extends Monkey(arms, legs, tail) {
+ def beAwesome () = "I can fly! I can fly!"
+ }
+ m
+ }
+
+ def main(args: Array[String]): Unit = {
+ println(makeAwesomeMonkey(Nil, Nil, new Tail) beAwesome)
+ }
+}
diff --git a/test/pending/run/t0446.scala b/test/pending/run/t0446.scala
deleted file mode 100644
index 0f74b32ba0..0000000000
--- a/test/pending/run/t0446.scala
+++ /dev/null
@@ -1,6 +0,0 @@
-object Test extends Application {
- val a = Array(1,3).takeWhile(_ < 2)
- val b = Array(1,3).dropWhile(_ < 2)
- println(a.toString)
- println(b.toString)
-}
diff --git a/test/pending/run/t0508x.scala b/test/pending/run/t0508x.scala
index 0c1ffde3ed..12d3d09711 100644
--- a/test/pending/run/t0508x.scala
+++ b/test/pending/run/t0508x.scala
@@ -4,12 +4,12 @@
};
def foo[A >: Nothing <: Any, B >: Nothing <: Any, C >: Nothing <: Any]
- (unapply1: (A) => Option[(B, C)], v: A): Unit =
+ (unapply1: (A) => Option[(B, C)], v: A): Unit =
unapply1.apply(v) match {
- case Some((fst @ _, snd @ _)) =>
+ case Some((fst @ _, snd @ _)) =>
scala.Predef.println(scala.Tuple2.apply[java.lang.String, java.lang.String]("first: ".+(fst), " second: ".+(snd)))
case _ => scala.Predef.println(":(")
- }
+ }
Test.this.foo[Test.Foo, String, Int]({
((eta$0$1: Test.Foo) => Test.this.Foo.unapply(eta$0$1))
}, Test.this.Foo.apply("this might be fun", 10));
diff --git a/test/pending/run/t0727.check b/test/pending/run/t0727.check
deleted file mode 100644
index bb101b641b..0000000000
--- a/test/pending/run/t0727.check
+++ /dev/null
@@ -1,2 +0,0 @@
-true
-true
diff --git a/test/pending/run/t0727.scala b/test/pending/run/t0727.scala
deleted file mode 100644
index 9f5be7c108..0000000000
--- a/test/pending/run/t0727.scala
+++ /dev/null
@@ -1,5 +0,0 @@
-object t0727 extends Application {
- val arr = Array("foo")
- println(arr.isInstanceOf[Array[String]])
- println(Array("foo").isInstanceOf[Array[String]])
-}
diff --git a/test/pending/run/t0732.check b/test/pending/run/t0732.check
deleted file mode 100644
index e4ec30754a..0000000000
--- a/test/pending/run/t0732.check
+++ /dev/null
@@ -1,3 +0,0 @@
-c
-
-c
diff --git a/test/pending/run/t0732.scala b/test/pending/run/t0732.scala
deleted file mode 100644
index 24fdba0017..0000000000
--- a/test/pending/run/t0732.scala
+++ /dev/null
@@ -1,8 +0,0 @@
-object t0732 extends Application {
- val x1 = <a b="c" />
- println(x1 \ "@b")
- val x2 = <a x:b="c" xmlns:x="uri" />
- println(x2 \ "@b")
- val x3 = <a x:b="c" xmlns:x="uri" />
- println(x3 \ "@x:b")
-}
diff --git a/test/pending/run/t0807.scala b/test/pending/run/t0807.scala
deleted file mode 100644
index e69aa1c71c..0000000000
--- a/test/pending/run/t0807.scala
+++ /dev/null
@@ -1,5 +0,0 @@
-trait A
-trait B extends A { val x = println("early") }
-object Test extends Application {
- new B {}
-}
diff --git a/test/pending/run/t0818.scala b/test/pending/run/t0818.scala
deleted file mode 100644
index 677b85d920..0000000000
--- a/test/pending/run/t0818.scala
+++ /dev/null
@@ -1,4 +0,0 @@
-object Seth extends Application {
- println(
- new java.util.ArrayList[String]().toArray(Array[String]()))
-}
diff --git a/test/pending/run/t0947.check b/test/pending/run/t0947.check
deleted file mode 100644
index e1431236cc..0000000000
--- a/test/pending/run/t0947.check
+++ /dev/null
@@ -1 +0,0 @@
-foo: test.Foo = Foo
diff --git a/test/pending/run/t0947.scala b/test/pending/run/t0947.scala
deleted file mode 100644
index f5daca3d30..0000000000
--- a/test/pending/run/t0947.scala
+++ /dev/null
@@ -1,8 +0,0 @@
-import scala.tools.nsc._
-
-object Test extends Application {
- class Foo { override def toString = "Foo" };
-
- val int = new Interpreter(new Settings());
- int.bind("foo", "Test.Foo", new Test.Foo());
-}
diff --git a/test/pending/run/t1044.scala b/test/pending/run/t1044.scala
deleted file mode 100644
index c521e5837b..0000000000
--- a/test/pending/run/t1044.scala
+++ /dev/null
@@ -1,5 +0,0 @@
-// looks OK
-object Main extends Application{
- val ducks = Array[AnyRef]("Huey", "Dewey", "Louie")
- ducks.iterator/*.asInstanceOf[Iterator[String]]*/
-}
diff --git a/test/files/run/bug1697.scala b/test/pending/run/t1697.scala
index 01590dd405..01590dd405 100644
--- a/test/files/run/bug1697.scala
+++ b/test/pending/run/t1697.scala
diff --git a/test/pending/run/t1939.scala b/test/pending/run/t1939.scala
deleted file mode 100644
index 44ab1769d2..0000000000
--- a/test/pending/run/t1939.scala
+++ /dev/null
@@ -1,41 +0,0 @@
-// works in trunk
-class Module {}
-
-abstract class T {
- type moduleType <: Module
- def module: moduleType
-}
-
-final class T1(val module: Module) extends T {
- type moduleType = Module
-}
-
-final class T2(_module: Module) extends T {
- type moduleType = Module
-
- def module = _module
-}
-
-object Main extends Application {
-
- type mType = Module
-
- type tType = T { type moduleType <: mType }
- // type tType = T { type moduleType <: Module } // runs successfully
- // type tType = T // runs successfully
-
- def f(ts: List[tType]): Unit = {
-
- for (t <- ts; m = t.module) {}
- ts.map(_.module).foreach { _ => () }
- // ts.map(t => (t : T).module).foreach { _ => () } // runs successfully
- }
-
- f(new T1(new Module) :: new T2(new Module) :: Nil)
-}
-
-/*
- * java.lang.AbstractMethodError
- at scala.List.foreach(List.scala:849)
- at Main$.f
-*/
diff --git a/test/pending/run/t1980.scala b/test/pending/run/t1980.scala
index 67cb3ada9e..71c178d634 100644
--- a/test/pending/run/t1980.scala
+++ b/test/pending/run/t1980.scala
@@ -1,9 +1,9 @@
-by-name argument incorrectly evaluated on :-ending operator
-Reported by: extempore Owned by: odersky
-Priority: normal Component: Compiler
-Keywords: Cc: paulp@…
-Fixed in version:
-Description
+// by-name argument incorrectly evaluated on :-ending operator
+// Reported by: extempore Owned by: odersky
+// Priority: normal Component: Compiler
+// Keywords: Cc: paulp@…
+// Fixed in version:
+// Description
scala> def foo() = { println("foo") ; 5 }
foo: ()Int
@@ -19,9 +19,9 @@ scala> c m1 foo()
scala> foo() m2_: c
foo
-But it is not evaluated if invoked directly:
+// But it is not evaluated if invoked directly:
scala> c.m2_:(foo())
-scala>
+// scala>
diff --git a/test/pending/run/t2318.check b/test/pending/run/t2318.check
new file mode 100644
index 0000000000..a486f1ac47
--- /dev/null
+++ b/test/pending/run/t2318.check
@@ -0,0 +1,2 @@
+bar
+bar
diff --git a/test/pending/run/t2318.scala b/test/pending/run/t2318.scala
new file mode 100644
index 0000000000..e42cbb9680
--- /dev/null
+++ b/test/pending/run/t2318.scala
@@ -0,0 +1,38 @@
+import java.security._
+
+object Test {
+ trait Bar { def bar: Unit }
+
+ object Mgr extends SecurityManager {
+ override def checkPermission(perm: Permission) = perm match {
+ case _: java.lang.RuntimePermission => ()
+ case _: java.io.FilePermission => ()
+ case x: java.security.AccessControlException if x.getName contains ".networkaddress." => () // generality ftw
+ case _ => super.checkPermission(perm)
+ }
+ }
+
+ def t1() = {
+ val p = Runtime.getRuntime().exec("ls");
+ type Destroyable = { def destroy() : Unit }
+ def doDestroy( obj : Destroyable ) : Unit = obj.destroy();
+ doDestroy( p );
+ }
+ def t2() = {
+ System.setSecurityManager(Mgr)
+
+ val b = new Bar { def bar = println("bar") }
+ b.bar
+
+ val structural = b.asInstanceOf[{ def bar: Unit }]
+ structural.bar
+ }
+
+ def main(args: Array[String]) {
+ // figuring this will otherwise break on windows
+ try t1()
+ catch { case _: java.io.IOException => () }
+
+ t2()
+ }
+}
diff --git a/test/pending/run/t2364.check b/test/pending/run/t2364.check
new file mode 100644
index 0000000000..219305e43a
--- /dev/null
+++ b/test/pending/run/t2364.check
@@ -0,0 +1 @@
+<test></test>
diff --git a/test/pending/run/t2364.scala b/test/pending/run/t2364.scala
new file mode 100644
index 0000000000..d5805a13b8
--- /dev/null
+++ b/test/pending/run/t2364.scala
@@ -0,0 +1,60 @@
+import java.io.ByteArrayInputStream
+import java.io.ByteArrayOutputStream
+import com.sun.xml.internal.fastinfoset._
+import com.sun.xml.internal.fastinfoset.sax._
+import scala.xml.parsing.NoBindingFactoryAdapter
+import scala.xml._
+
+// Note - this is in pending because com.sun.xml.etc is not standard,
+// and I don't have time to extract a smaller test.
+
+object Test {
+ def main(args: Array[String]) {
+ val node = <test/>
+ val bytes = new ByteArrayOutputStream
+ val serializer = new SAXDocumentSerializer()
+
+ serializer.setOutputStream(bytes)
+ serializer.startDocument()
+ serialize(node, serializer)
+ serializer.endDocument()
+ println(parse(new ByteArrayInputStream(bytes.toByteArray)))
+ }
+ def serialize(node: Node, serializer: SAXDocumentSerializer) {
+ node match {
+ case _ : ProcInstr | _ : Comment | _ : EntityRef =>
+ case x : Atom[_] =>
+ val chars = x.text.toCharArray
+ serializer.characters(chars, 0, chars.length)
+ case _ : Elem =>
+ serializer.startElement("", node.label.toLowerCase, node.label.toLowerCase, attributes(node.attributes))
+ for (m <- node.child) serialize(m, serializer)
+ serializer.endElement("", node.label.toLowerCase, node.label.toLowerCase)
+ }
+ }
+ def parse(str: ByteArrayInputStream) = {
+ val parser = new SAXDocumentParser
+ val fac = new NoBindingFactoryAdapter
+
+ parser.setContentHandler(fac)
+ try {
+ parser.parse(str)
+ } catch {
+ case x: Exception =>
+ x.printStackTrace
+ }
+ fac.rootElem
+ }
+ def attributes(d: MetaData) = {
+ val attrs = new AttributesHolder
+
+ if (d != null) {
+ for (attr <- d) {
+ val sb = new StringBuilder()
+ Utility.sequenceToXML(attr.value, TopScope, sb, true)
+ attrs.addAttribute(new QualifiedName("", "", attr.key.toLowerCase), sb.toString)
+ }
+ }
+ attrs
+ }
+}
diff --git a/test/pending/run/t2897.scala b/test/pending/run/t2897.scala
new file mode 100644
index 0000000000..40fd3c2b08
--- /dev/null
+++ b/test/pending/run/t2897.scala
@@ -0,0 +1,22 @@
+class A {
+ def f1(t: String) = {
+ trait T {
+ def xs = Nil map (_ => t)
+ }
+ }
+ def f2(t: String) = {
+ def xs = Nil map (_ => t)
+ }
+ def f3(t: String) = {
+ var t1 = 5
+ trait T {
+ def xs = { t1 = 10 ; t }
+ }
+ }
+ def f4() = {
+ var u = 5
+ trait T {
+ def xs = Nil map (_ => u = 10)
+ }
+ }
+}
diff --git a/test/pending/run/t3609.scala b/test/pending/run/t3609.scala
new file mode 100755
index 0000000000..eb25afd667
--- /dev/null
+++ b/test/pending/run/t3609.scala
@@ -0,0 +1,28 @@
+object Test extends Application {
+ class A
+ class B extends A
+ def foo(x: A, y: B) = print(1)
+ val foo = new {
+ // def apply(x: B, y: A) = print(3)
+ def apply = (x: B, z: B) => print(4)
+ }
+
+ foo(new B, new B)
+}
+
+// This code prints 1. If we remove comment, then it will print 4.
+// Moreover following code prints 3 (which is most strange thing):
+
+object Test2 extends Application {
+ class A
+ class B extends A
+ def foo(x: A, y: B) = print(1)
+ val foo = new {
+ def apply(x: B, y: A) = print(3)
+ def apply = new {
+ def apply = (x: B, z: B) => print(4)
+ }
+ }
+
+ foo(new B, new B)
+} \ No newline at end of file
diff --git a/test/pending/run/t3669.scala b/test/pending/run/t3669.scala
new file mode 100644
index 0000000000..c60ba98538
--- /dev/null
+++ b/test/pending/run/t3669.scala
@@ -0,0 +1,22 @@
+trait MyTrait[T <: { var id: U }, U] {
+ def test(t: T): T = {
+ val v: U = t.id
+ t.id = v
+ t
+ }
+}
+
+class C (var id: String){
+ // uncommenting this fixes it
+ // def id_=(x: AnyRef) { id = x.asInstanceOf[String] }
+}
+
+class Test extends MyTrait[C, String]
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ val t = new Test()
+ val c1 = new C("a")
+ val c2 = t.test(c1)
+ }
+}
diff --git a/test/pending/run/t3857.check b/test/pending/run/t3857.check
new file mode 100644
index 0000000000..520b350ff5
--- /dev/null
+++ b/test/pending/run/t3857.check
@@ -0,0 +1,11 @@
+ScalaGeneric
+ (m) public java.util.Set<java.lang.String> ScalaGeneric.s()
+ (m) public void ScalaGeneric.s_$eq(java.util.Set<java.lang.String>)
+ (f) private java.util.Set<java.lang.String> ScalaGeneric.s
+ScalaGeneric2Trait
+ (m) public abstract java.util.Set<java.lang.String> ScalaGeneric2Trait.s()
+ (m) public abstract void ScalaGeneric2Trait.s_$eq(java.util.Set<java.lang.String>)
+ScalaGeneric2
+ (m) public java.util.Set<java.lang.String> ScalaGeneric2.s() (bridge)
+ (m) public void ScalaGeneric2.s_$eq(java.util.Set<java.lang.String>) (bridge)
+ (f) private java.util.Set<java.lang.String> ScalaGeneric2.s
diff --git a/test/pending/run/t3857.scala b/test/pending/run/t3857.scala
new file mode 100644
index 0000000000..62bdc39da9
--- /dev/null
+++ b/test/pending/run/t3857.scala
@@ -0,0 +1,13 @@
+import scala.tools.partest._
+
+class ScalaGeneric { var s: java.util.Set[String] = _ }
+trait ScalaGeneric2Trait { var s: java.util.Set[String] = _ }
+class ScalaGeneric2 extends ScalaGeneric2Trait { }
+
+object Test extends SigTest {
+ def main(args: Array[String]): Unit = {
+ show[ScalaGeneric]()
+ show[ScalaGeneric2Trait]()
+ show[ScalaGeneric2]()
+ }
+}
diff --git a/test/pending/run/t4283/AbstractFoo.java b/test/pending/run/t4283/AbstractFoo.java
new file mode 100644
index 0000000000..0403271b74
--- /dev/null
+++ b/test/pending/run/t4283/AbstractFoo.java
@@ -0,0 +1,6 @@
+package test;
+
+/* package private */ class AbstractFoo {
+ public int t = 1;
+ public int f() { return 2; }
+} \ No newline at end of file
diff --git a/test/pending/run/t4283/IllegalAccess.scala b/test/pending/run/t4283/IllegalAccess.scala
new file mode 100644
index 0000000000..33039c9350
--- /dev/null
+++ b/test/pending/run/t4283/IllegalAccess.scala
@@ -0,0 +1,17 @@
+package other
+
+object IllegalAccess {
+ def main(args: Array[String]) {
+ val x = (new test.ScalaBipp).make.get.asInstanceOf[test.ScalaBipp].f()
+ println(x)
+ val y = (new test.ScalaBipp).make.get.f()
+ println(y)
+ val u = (new test.ScalaBipp).make.get.asInstanceOf[test.ScalaBipp].t
+ println(u)
+ val v = (new test.ScalaBipp).make.get.t
+ println(v)
+ val sb: test.ScalaBipp = (new test.ScalaBipp).make.get
+ val z = sb.t
+ println(z)
+ }
+}
diff --git a/test/pending/run/t4283/ScalaBipp.scala b/test/pending/run/t4283/ScalaBipp.scala
new file mode 100644
index 0000000000..36dea9f4de
--- /dev/null
+++ b/test/pending/run/t4283/ScalaBipp.scala
@@ -0,0 +1,5 @@
+package test
+
+class ScalaBipp extends AbstractFoo {
+ def make: Option[ScalaBipp] = Option(this)
+}
diff --git a/test/pending/run/t4291.check b/test/pending/run/t4291.check
new file mode 100644
index 0000000000..30bacfac28
--- /dev/null
+++ b/test/pending/run/t4291.check
@@ -0,0 +1,87 @@
+scala.collection.immutable.List
+ (m) public java.lang.Object scala.collection.immutable.List.apply(java.lang.Object) (bridge)
+ (m) public A scala.collection.immutable.List.apply(int) (bridge)
+scala.Option
+ (m) public abstract A scala.Option.get()
+scala.Function1
+ (m) public abstract R scala.Function1.apply(T1)
+scala.collection.Traversable
+ (m) public abstract <B,That> That scala.collection.TraversableLike.map(scala.Function1<A, B>,scala.collection.generic.CanBuildFrom<Repr, B, That>)
+scala.collection.Iterable
+ (m) public abstract <B,That> That scala.collection.TraversableLike.map(scala.Function1<A, B>,scala.collection.generic.CanBuildFrom<Repr, B, That>)
+scala.collection.Seq
+ (m) public abstract <B,That> That scala.collection.TraversableLike.map(scala.Function1<A, B>,scala.collection.generic.CanBuildFrom<Repr, B, That>)
+scala.collection.immutable.Set
+ (m) public abstract <B,That> That scala.collection.TraversableLike.map(scala.Function1<A, B>,scala.collection.generic.CanBuildFrom<Repr, B, That>)
+ (m) public abstract <B,That> That scala.collection.SetLike.map(scala.Function1<A, B>,scala.collection.generic.CanBuildFrom<This, B, That>)
+scala.collection.immutable.Map
+ (m) public abstract <B,That> That scala.collection.TraversableLike.map(scala.Function1<A, B>,scala.collection.generic.CanBuildFrom<Repr, B, That>)
+scala.collection.immutable.Vector
+ (m) public <B,That> That scala.collection.immutable.Vector.map(scala.Function1<A, B>,scala.collection.generic.CanBuildFrom<scala.collection.immutable.Vector<A>, B, That>) (bridge)
+scala.collection.immutable.Range
+ (m) public <B,That> That scala.collection.immutable.Range.map(scala.Function1<java.lang.Object, B>,scala.collection.generic.CanBuildFrom<scala.collection.immutable.IndexedSeq<java.lang.Object>, B, That>) (bridge)
+scala.collection.Traversable
+ (m) public abstract <B,That> That scala.collection.TraversableLike.flatMap(scala.Function1<A, scala.collection.TraversableOnce<B>>,scala.collection.generic.CanBuildFrom<Repr, B, That>)
+scala.collection.Iterable
+ (m) public abstract <B,That> That scala.collection.TraversableLike.flatMap(scala.Function1<A, scala.collection.TraversableOnce<B>>,scala.collection.generic.CanBuildFrom<Repr, B, That>)
+scala.collection.Seq
+ (m) public abstract <B,That> That scala.collection.TraversableLike.flatMap(scala.Function1<A, scala.collection.TraversableOnce<B>>,scala.collection.generic.CanBuildFrom<Repr, B, That>)
+scala.collection.immutable.Set
+ (m) public abstract <B,That> That scala.collection.TraversableLike.flatMap(scala.Function1<A, scala.collection.TraversableOnce<B>>,scala.collection.generic.CanBuildFrom<Repr, B, That>)
+scala.collection.immutable.Map
+ (m) public abstract <B,That> That scala.collection.TraversableLike.flatMap(scala.Function1<A, scala.collection.TraversableOnce<B>>,scala.collection.generic.CanBuildFrom<Repr, B, That>)
+scala.collection.immutable.Vector
+ (m) public <B,That> That scala.collection.immutable.Vector.flatMap(scala.Function1<A, scala.collection.TraversableOnce<B>>,scala.collection.generic.CanBuildFrom<scala.collection.immutable.Vector<A>, B, That>) (bridge)
+scala.collection.immutable.Range
+ (m) public <B,That> That scala.collection.immutable.Range.flatMap(scala.Function1<java.lang.Object, scala.collection.TraversableOnce<B>>,scala.collection.generic.CanBuildFrom<scala.collection.immutable.IndexedSeq<java.lang.Object>, B, That>) (bridge)
+scala.collection.Traversable
+ (m) public abstract Repr scala.collection.TraversableLike.filter(scala.Function1<A, java.lang.Object>)
+scala.collection.Iterable
+ (m) public abstract Repr scala.collection.TraversableLike.filter(scala.Function1<A, java.lang.Object>)
+scala.collection.Seq
+ (m) public abstract Repr scala.collection.TraversableLike.filter(scala.Function1<A, java.lang.Object>)
+scala.collection.immutable.Set
+ (m) public abstract Repr scala.collection.TraversableLike.filter(scala.Function1<A, java.lang.Object>)
+scala.collection.immutable.Map
+ (m) public abstract Repr scala.collection.TraversableLike.filter(scala.Function1<A, java.lang.Object>)
+scala.collection.immutable.Vector
+ (m) public scala.collection.immutable.Vector<A> scala.collection.immutable.Vector.filter(scala.Function1<A, java.lang.Object>) (bridge)
+scala.collection.immutable.Range
+ (m) public scala.collection.immutable.IndexedSeq<java.lang.Object> scala.collection.immutable.Range.filter(scala.Function1<java.lang.Object, java.lang.Object>) (bridge)
+scala.collection.Traversable
+ (m) public abstract A scala.collection.TraversableLike.head()
+ (m) public abstract A scala.collection.generic.GenericTraversableTemplate.head()
+scala.collection.Iterable
+ (m) public abstract A scala.collection.TraversableLike.head()
+ (m) public abstract A scala.collection.generic.GenericTraversableTemplate.head()
+ (m) public abstract A scala.collection.IterableLike.head()
+scala.collection.Seq
+ (m) public abstract A scala.collection.TraversableLike.head()
+ (m) public abstract A scala.collection.generic.GenericTraversableTemplate.head()
+ (m) public abstract A scala.collection.IterableLike.head()
+scala.collection.immutable.Set
+ (m) public abstract A scala.collection.TraversableLike.head()
+ (m) public abstract A scala.collection.generic.GenericTraversableTemplate.head()
+ (m) public abstract A scala.collection.IterableLike.head()
+scala.collection.immutable.Map
+ (m) public abstract A scala.collection.TraversableLike.head()
+ (m) public abstract A scala.collection.generic.GenericTraversableTemplate.head()
+ (m) public abstract A scala.collection.IterableLike.head()
+scala.collection.immutable.Vector
+ (m) public A scala.collection.immutable.Vector.head()
+scala.collection.immutable.Range
+ (m) public java.lang.Object scala.collection.immutable.Range.head() (bridge)
+scala.collection.Traversable
+ (m) public abstract <K> scala.collection.immutable.Map<K, Repr> scala.collection.TraversableLike.groupBy(scala.Function1<A, K>)
+scala.collection.Iterable
+ (m) public abstract <K> scala.collection.immutable.Map<K, Repr> scala.collection.TraversableLike.groupBy(scala.Function1<A, K>)
+scala.collection.Seq
+ (m) public abstract <K> scala.collection.immutable.Map<K, Repr> scala.collection.TraversableLike.groupBy(scala.Function1<A, K>)
+scala.collection.immutable.Set
+ (m) public abstract <K> scala.collection.immutable.Map<K, Repr> scala.collection.TraversableLike.groupBy(scala.Function1<A, K>)
+scala.collection.immutable.Map
+ (m) public abstract <K> scala.collection.immutable.Map<K, Repr> scala.collection.TraversableLike.groupBy(scala.Function1<A, K>)
+scala.collection.immutable.Vector
+ (m) public <K> scala.collection.immutable.Map<K, scala.collection.immutable.Vector<A>> scala.collection.immutable.Vector.groupBy(scala.Function1<A, K>) (bridge)
+scala.collection.immutable.Range
+ (m) public <K> scala.collection.immutable.Map<K, scala.collection.immutable.IndexedSeq<java.lang.Object>> scala.collection.immutable.Range.groupBy(scala.Function1<java.lang.Object, K>) (bridge)
diff --git a/test/pending/run/t4291.scala b/test/pending/run/t4291.scala
new file mode 100644
index 0000000000..0213bb2c20
--- /dev/null
+++ b/test/pending/run/t4291.scala
@@ -0,0 +1,19 @@
+import scala.tools.partest._
+
+object Test extends SigTest {
+ def main(args: Array[String]): Unit = {
+ show[List[_]]("apply")
+ show[Option[_]]("get")
+ show[Function1[_, _]]("apply")
+
+ for (name <- List("map", "flatMap", "filter", "head", "groupBy")) {
+ show[Traversable[_]](name)
+ show[Iterable[_]](name)
+ show[Seq[_]](name)
+ show[Set[_]](name)
+ show[Map[_,_]](name)
+ show[Vector[_]](name)
+ show[Range](name)
+ }
+ }
+}
diff --git a/test/pending/run/t4713/JavaAnnots.java b/test/pending/run/t4713/JavaAnnots.java
new file mode 100644
index 0000000000..29541b1ee0
--- /dev/null
+++ b/test/pending/run/t4713/JavaAnnots.java
@@ -0,0 +1,14 @@
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.util.List;
+
+public abstract class JavaAnnots {
+ @Retention(RetentionPolicy.RUNTIME)
+ @Target(ElementType.FIELD)
+ public @interface Book {
+ }
+
+ public static final List<String> Book = null;
+} \ No newline at end of file
diff --git a/test/pending/run/t4713/Problem.scala b/test/pending/run/t4713/Problem.scala
new file mode 100644
index 0000000000..e87f657d2e
--- /dev/null
+++ b/test/pending/run/t4713/Problem.scala
@@ -0,0 +1,5 @@
+object Problem {
+ def d() {
+ val v: java.util.List[String] = JavaAnnots.Book
+ }
+}
diff --git a/test/pending/run/t5224.check b/test/pending/run/t5224.check
new file mode 100644
index 0000000000..2b920773c0
--- /dev/null
+++ b/test/pending/run/t5224.check
@@ -0,0 +1,9 @@
+{
+ @serializable class C extends Object with ScalaObject {
+ def <init>() = {
+ super.<init>();
+ ()
+ }
+ };
+ ()
+} \ No newline at end of file
diff --git a/test/pending/run/t5224.scala b/test/pending/run/t5224.scala
new file mode 100644
index 0000000000..865ce4bfe9
--- /dev/null
+++ b/test/pending/run/t5224.scala
@@ -0,0 +1,8 @@
+import scala.reflect._
+import scala.reflect.api._
+
+object Test extends App {
+ println(scala.reflect.Code.lift{
+ @serializable class C
+ }.tree.toString)
+} \ No newline at end of file
diff --git a/test/pending/run/t5225_1.check b/test/pending/run/t5225_1.check
new file mode 100644
index 0000000000..b29cd9c365
--- /dev/null
+++ b/test/pending/run/t5225_1.check
@@ -0,0 +1,4 @@
+{
+ @transient @volatile var x: Int = 2;
+ ()
+} \ No newline at end of file
diff --git a/test/pending/run/t5225_1.scala b/test/pending/run/t5225_1.scala
new file mode 100644
index 0000000000..454502e810
--- /dev/null
+++ b/test/pending/run/t5225_1.scala
@@ -0,0 +1,8 @@
+import scala.reflect._
+import scala.reflect.api._
+
+object Test extends App {
+ println(scala.reflect.Code.lift{
+ @transient @volatile var x = 2
+ }.tree.toString)
+} \ No newline at end of file
diff --git a/test/pending/run/t5225_2.check b/test/pending/run/t5225_2.check
new file mode 100644
index 0000000000..88972fd27f
--- /dev/null
+++ b/test/pending/run/t5225_2.check
@@ -0,0 +1,4 @@
+{
+ def foo(@cloneable x: Int): String = "";
+ ()
+}
diff --git a/test/pending/run/t5225_2.scala b/test/pending/run/t5225_2.scala
new file mode 100644
index 0000000000..82bad0f353
--- /dev/null
+++ b/test/pending/run/t5225_2.scala
@@ -0,0 +1,8 @@
+import scala.reflect._
+import scala.reflect.api._
+
+object Test extends App {
+ println(scala.reflect.Code.lift{
+ def foo(@cloneable x: Int) = ""
+ }.tree.toString)
+} \ No newline at end of file
diff --git a/test/pending/run/t5229_1.check b/test/pending/run/t5229_1.check
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/test/pending/run/t5229_1.check
diff --git a/test/pending/run/t5229_1.scala b/test/pending/run/t5229_1.scala
new file mode 100644
index 0000000000..1d7bf0590b
--- /dev/null
+++ b/test/pending/run/t5229_1.scala
@@ -0,0 +1,14 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ object C
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ toolbox.runExpr(ttree)
+}
diff --git a/test/pending/run/t5229_1_nolift.scala b/test/pending/run/t5229_1_nolift.scala
new file mode 100644
index 0000000000..33855d2e4f
--- /dev/null
+++ b/test/pending/run/t5229_1_nolift.scala
@@ -0,0 +1 @@
+object C
diff --git a/test/pending/run/t5229_2.check b/test/pending/run/t5229_2.check
new file mode 100644
index 0000000000..5db6ec9b38
--- /dev/null
+++ b/test/pending/run/t5229_2.check
@@ -0,0 +1,2 @@
+2
+evaluated = null
diff --git a/test/pending/run/t5229_2.scala b/test/pending/run/t5229_2.scala
new file mode 100644
index 0000000000..67be7328a6
--- /dev/null
+++ b/test/pending/run/t5229_2.scala
@@ -0,0 +1,19 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ object C {
+ val x = 2
+ }
+
+ println(C.x)
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ val evaluated = toolbox.runExpr(ttree)
+ println("evaluated = " + evaluated)
+}
diff --git a/test/pending/run/t5269.check b/test/pending/run/t5269.check
new file mode 100644
index 0000000000..0cfbf08886
--- /dev/null
+++ b/test/pending/run/t5269.check
@@ -0,0 +1 @@
+2
diff --git a/test/pending/run/t5269.scala b/test/pending/run/t5269.scala
new file mode 100644
index 0000000000..a30509f3fe
--- /dev/null
+++ b/test/pending/run/t5269.scala
@@ -0,0 +1,22 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ trait Z {
+ val z = 2
+ }
+
+ class X extends Z {
+ def println() = Predef.println(z)
+ }
+
+ new X().println()
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ toolbox.runExpr(ttree)
+}
diff --git a/test/pending/run/t5270.check b/test/pending/run/t5270.check
new file mode 100644
index 0000000000..08839f6bb2
--- /dev/null
+++ b/test/pending/run/t5270.check
@@ -0,0 +1 @@
+200
diff --git a/test/pending/run/t5270.scala b/test/pending/run/t5270.scala
new file mode 100644
index 0000000000..10f79790b0
--- /dev/null
+++ b/test/pending/run/t5270.scala
@@ -0,0 +1,26 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ class Y {
+ def y = 100
+ }
+
+ trait Z { this: Y =>
+ val z = 2 * y
+ }
+
+ class X extends Y with Z {
+ def println() = Predef.println(z)
+ }
+
+ new X().println()
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ toolbox.runExpr(ttree)
+}
diff --git a/test/pending/run/t5271_1.check b/test/pending/run/t5271_1.check
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/test/pending/run/t5271_1.check
diff --git a/test/pending/run/t5271_1.scala b/test/pending/run/t5271_1.scala
new file mode 100644
index 0000000000..5f10e64528
--- /dev/null
+++ b/test/pending/run/t5271_1.scala
@@ -0,0 +1,14 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ case class C(foo: Int, bar: Int)
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ toolbox.runExpr(ttree)
+}
diff --git a/test/pending/run/t5271_2.check b/test/pending/run/t5271_2.check
new file mode 100644
index 0000000000..b8626c4cff
--- /dev/null
+++ b/test/pending/run/t5271_2.check
@@ -0,0 +1 @@
+4
diff --git a/test/pending/run/t5271_2.scala b/test/pending/run/t5271_2.scala
new file mode 100644
index 0000000000..71967c04ed
--- /dev/null
+++ b/test/pending/run/t5271_2.scala
@@ -0,0 +1,16 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ case class C(foo: Int, bar: Int)
+ val c = C(2, 2)
+ println(c.foo * c.bar)
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ toolbox.runExpr(ttree)
+}
diff --git a/test/pending/run/t5272.check b/test/pending/run/t5272.check
new file mode 100644
index 0000000000..dcf02b2fb6
--- /dev/null
+++ b/test/pending/run/t5272.check
@@ -0,0 +1 @@
+okay
diff --git a/test/pending/run/t5272.scala b/test/pending/run/t5272.scala
new file mode 100644
index 0000000000..3f44d05fb3
--- /dev/null
+++ b/test/pending/run/t5272.scala
@@ -0,0 +1,17 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ 2 match {
+ case 2 => println("okay")
+ case _ => println("not okay")
+ }
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ toolbox.runExpr(ttree)
+}
diff --git a/test/pending/run/t5273_1.check b/test/pending/run/t5273_1.check
new file mode 100644
index 0000000000..c551774ca5
--- /dev/null
+++ b/test/pending/run/t5273_1.check
@@ -0,0 +1 @@
+name = American Dollar, shortname = USD, value = 2,8567
diff --git a/test/pending/run/t5273_1.scala b/test/pending/run/t5273_1.scala
new file mode 100644
index 0000000000..8b75084463
--- /dev/null
+++ b/test/pending/run/t5273_1.scala
@@ -0,0 +1,16 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ val RegexParser = """(.*) \d+([A-Z]+) \| (.*) \|.*""".r
+ val RegexParser(name, shortname, value) = "American Dollar 1USD | 2,8567 | sometext"
+ println("name = %s, shortname = %s, value = %s".format(name, shortname, value))
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ toolbox.runExpr(ttree)
+}
diff --git a/test/pending/run/t5273_2.check b/test/pending/run/t5273_2.check
new file mode 100644
index 0000000000..0cfbf08886
--- /dev/null
+++ b/test/pending/run/t5273_2.check
@@ -0,0 +1 @@
+2
diff --git a/test/pending/run/t5273_2.scala b/test/pending/run/t5273_2.scala
new file mode 100644
index 0000000000..1175881c9f
--- /dev/null
+++ b/test/pending/run/t5273_2.scala
@@ -0,0 +1,17 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ List(1, 2, 3) match {
+ case foo :: bar :: _ => println(foo * bar)
+ case _ => println("this is getting out of hand!")
+ }
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ toolbox.runExpr(ttree)
+}
diff --git a/test/pending/run/t5274_1.check b/test/pending/run/t5274_1.check
new file mode 100644
index 0000000000..fca8bc3d3e
--- /dev/null
+++ b/test/pending/run/t5274_1.check
@@ -0,0 +1,3 @@
+50! = 30414093201713378043612608166064768844377641568960512000000000000
+49! = 608281864034267560872252163321295376887552831379210240000000000
+50!/49! = 50
diff --git a/test/pending/run/t5274_1.scala b/test/pending/run/t5274_1.scala
new file mode 100644
index 0000000000..c501172518
--- /dev/null
+++ b/test/pending/run/t5274_1.scala
@@ -0,0 +1,20 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ def factorial(n: BigInt): BigInt =
+ if (n == 0) 1 else n * factorial(n-1)
+
+ val f50 = factorial(50); val f49 = factorial(49)
+ println("50! = " + f50)
+ println("49! = " + f49)
+ println("50!/49! = " + (f50 / f49))
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ toolbox.runExpr(ttree)
+}
diff --git a/test/pending/run/t5274_2.check b/test/pending/run/t5274_2.check
new file mode 100644
index 0000000000..375536cc29
--- /dev/null
+++ b/test/pending/run/t5274_2.check
@@ -0,0 +1,2 @@
+[6,2,8,5,1]
+[1,2,5,6,8]
diff --git a/test/pending/run/t5274_2.scala b/test/pending/run/t5274_2.scala
new file mode 100644
index 0000000000..42991fe5d2
--- /dev/null
+++ b/test/pending/run/t5274_2.scala
@@ -0,0 +1,57 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ /** Nested methods can use and even update everything
+ * visible in their scope (including local variables or
+ * arguments of enclosing methods).
+ */
+ def sort(a: Array[Int]) {
+
+ def swap(i: Int, j: Int) {
+ val t = a(i); a(i) = a(j); a(j) = t
+ }
+
+ def sort1(l: Int, r: Int) {
+ val pivot = a((l + r) / 2)
+ var i = l
+ var j = r
+ while (i <= j) {
+ while (a(i) < pivot) i += 1
+ while (a(j) > pivot) j -= 1
+ if (i <= j) {
+ swap(i, j)
+ i += 1
+ j -= 1
+ }
+ }
+ if (l < j) sort1(l, j)
+ if (j < r) sort1(i, r)
+ }
+
+ if (a.length > 0)
+ sort1(0, a.length - 1)
+ }
+
+ def println(ar: Array[Int]) {
+ def print1 = {
+ def iter(i: Int): String =
+ ar(i) + (if (i < ar.length-1) "," + iter(i+1) else "")
+ if (ar.length == 0) "" else iter(0)
+ }
+ Console.println("[" + print1 + "]")
+ }
+
+ val ar = Array(6, 2, 8, 5, 1)
+ println(ar)
+ sort(ar)
+ println(ar)
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ toolbox.runExpr(ttree)
+}
diff --git a/test/pending/run/t5275.check b/test/pending/run/t5275.check
new file mode 100644
index 0000000000..0cfbf08886
--- /dev/null
+++ b/test/pending/run/t5275.check
@@ -0,0 +1 @@
+2
diff --git a/test/pending/run/t5275.scala b/test/pending/run/t5275.scala
new file mode 100644
index 0000000000..d419834ded
--- /dev/null
+++ b/test/pending/run/t5275.scala
@@ -0,0 +1,15 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ class C(val foo: Int)
+ println(new C(2).foo)
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ toolbox.runExpr(ttree)
+}
diff --git a/test/pending/run/t5276.check b/test/pending/run/t5276.check
new file mode 100644
index 0000000000..0cfbf08886
--- /dev/null
+++ b/test/pending/run/t5276.check
@@ -0,0 +1 @@
+2
diff --git a/test/pending/run/t5276.scala b/test/pending/run/t5276.scala
new file mode 100644
index 0000000000..432fdb91e4
--- /dev/null
+++ b/test/pending/run/t5276.scala
@@ -0,0 +1,15 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ lazy x = 2
+ println(x)
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ toolbox.runExpr(ttree)
+}
diff --git a/test/pending/run/t5277_1.check b/test/pending/run/t5277_1.check
new file mode 100644
index 0000000000..a48033a30d
--- /dev/null
+++ b/test/pending/run/t5277_1.check
@@ -0,0 +1 @@
+10! = 3628800
diff --git a/test/pending/run/t5277_1.scala b/test/pending/run/t5277_1.scala
new file mode 100644
index 0000000000..57acd699ff
--- /dev/null
+++ b/test/pending/run/t5277_1.scala
@@ -0,0 +1,21 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ def fact(n: Int): BigInt =
+ if (n == 0) 1 else fact(n-1) * n
+ class Factorizer(n: Int) {
+ def ! = fact(n)
+ }
+ implicit def int2fact(n: Int) = new Factorizer(n)
+
+ println("10! = " + (10!))
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ toolbox.runExpr(ttree)
+}
diff --git a/test/pending/run/t5277_2.check b/test/pending/run/t5277_2.check
new file mode 100644
index 0000000000..5f1d0ecea5
--- /dev/null
+++ b/test/pending/run/t5277_2.check
@@ -0,0 +1,2 @@
+2
+1
diff --git a/test/pending/run/t5277_2.scala b/test/pending/run/t5277_2.scala
new file mode 100644
index 0000000000..67b6b000bc
--- /dev/null
+++ b/test/pending/run/t5277_2.scala
@@ -0,0 +1,18 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ def p(implicit i: Int) = print(i)
+ implicit val v = 2
+
+ println(p)
+ println(p(1))
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ toolbox.runExpr(ttree)
+}
diff --git a/test/pending/run/t5279.check b/test/pending/run/t5279.check
new file mode 100644
index 0000000000..f599e28b8a
--- /dev/null
+++ b/test/pending/run/t5279.check
@@ -0,0 +1 @@
+10
diff --git a/test/pending/run/t5279.scala b/test/pending/run/t5279.scala
new file mode 100644
index 0000000000..39e7dd2c66
--- /dev/null
+++ b/test/pending/run/t5279.scala
@@ -0,0 +1,14 @@
+import scala.tools.nsc.reporters._
+import scala.tools.nsc.Settings
+import reflect.runtime.Mirror.ToolBox
+
+object Test extends App {
+ val code = scala.reflect.Code.lift{
+ println(new Integer(10))
+ };
+
+ val reporter = new ConsoleReporter(new Settings)
+ val toolbox = new ToolBox(reporter)
+ val ttree = toolbox.typeCheck(code.tree)
+ toolbox.runExpr(ttree)
+}
diff --git a/test/pending/run/treesetmap.check b/test/pending/run/treesetmap.check
deleted file mode 100644
index c55dc061db..0000000000
--- a/test/pending/run/treesetmap.check
+++ /dev/null
@@ -1 +0,0 @@
-class scala.collection.immutable.TreeMap
diff --git a/test/pending/run/treesetmap.scala b/test/pending/run/treesetmap.scala
deleted file mode 100644
index 60902d2b90..0000000000
--- a/test/pending/run/treesetmap.scala
+++ /dev/null
@@ -1,5 +0,0 @@
-object Test{
- def main(args : Array[String]){
- println(scala.collection.immutable.TreeSet(1, 2, 3).map(x => x).getClass);
- }
-}
diff --git a/test/pending/scalacheck/CheckEither.scala b/test/pending/scalacheck/CheckEither.scala
deleted file mode 100644
index a6c728451b..0000000000
--- a/test/pending/scalacheck/CheckEither.scala
+++ /dev/null
@@ -1,253 +0,0 @@
-
-// To run these tests:
-// 1) wget http://scalacheck.googlecode.com/files/ScalaCheck-1.2.jar
-// 2) scalac -classpath ScalaCheck-1.2.jar Either.scala
-// 3) scala -classpath .:ScalaCheck-1.2.jar scala.CheckEither
-// 4) observe passing tests
-
-import org.scalacheck.Arbitrary
-import org.scalacheck.Arbitrary.{arbitrary, arbThrowable}
-import org.scalacheck.Gen.oneOf
-import org.scalacheck.{Prop, StdRand}
-import org.scalacheck.Prop._
-import org.scalacheck.ConsoleReporter.{testReport, propReport}
-import org.scalacheck.Test.{Params, check}
-import org.scalacheck.ConsoleReporter.testStatsEx
-import Function.tupled
-
-object CheckEither {
- implicit def arbitraryEither[X, Y](implicit xa: Arbitrary[X], ya: Arbitrary[Y]): Arbitrary[Either[X, Y]] =
- Arbitrary[Either[X, Y]](oneOf(arbitrary[X].map(Left(_)), arbitrary[Y].map(Right(_))))
-
- val prop_either1 = property((n: Int) => Left(n).either(x => x, b => error("fail")) == n)
-
- val prop_either2 = property((n: Int) => Right(n).either(a => error("fail"), x => x) == n)
-
- val prop_swap = property((e: Either[Int, Int]) => e match {
- case Left(a) => e.swap.right.value == a
- case Right(b) => e.swap.left.value == b
- })
-
- val prop_isLeftRight = property((e: Either[Int, Int]) => e.isLeft != e.isRight)
-
- object CheckLeftProjection {
- val prop_valueE = property((n: Int, s: String) => Left(n).left.valueE(s) == n)
-
- val prop_value = property((n: Int) => Left(n).left.value == n)
-
- val prop_on = property((e: Either[Int, Int]) => e.left.on((_: Int) + 1) == (e match {
- case Left(a) => a
- case Right(b) => b + 1
- }))
-
- val prop_getOrElse = property((e: Either[Int, Int], or: Int) => e.left.getOrElse(or) == (e match {
- case Left(a) => a
- case Right(_) => or
- }))
-
- val prop_forall = property((e: Either[Int, Int]) =>
- e.left.forall(_ % 2 == 0) == (e.isRight || e.left.value % 2 == 0))
-
- val prop_exists = property((e: Either[Int, Int]) =>
- e.left.exists(_ % 2 == 0) == (e.isLeft && e.left.value % 2 == 0))
-
- val prop_flatMapLeftIdentity = property((e: Either[Int, Int], n: Int, s: String) => {
- def f(x: Int) = if(x % 2 == 0) Left(s) else Right(s)
- Left(n).left.flatMap(f(_)) == f(n)})
-
- val prop_flatMapRightIdentity = property((e: Either[Int, Int]) => e.left.flatMap(Left(_)) == e)
-
- val prop_flatMapComposition = property((e: Either[Int, Int]) => {
- def f(x: Int) = if(x % 2 == 0) Left(x) else Right(x)
- def g(x: Int) = if(x % 7 == 0) Right(x) else Left(x)
- e.left.flatMap(f(_)).left.flatMap(g(_)) == e.left.flatMap(f(_).left.flatMap(g(_)))})
-
- val prop_mapIdentity = property((e: Either[Int, Int]) => e.left.map(x => x) == e)
-
- val prop_mapComposition = property((e: Either[String, Int]) => {
- def f(s: String) = s.toLowerCase
- def g(s: String) = s.reverse
- e.left.map(x => f(g(x))) == e.left.map(x => g(x)).left.map(f(_))})
-
- val prop_filter = property((e: Either[Int, Int], x: Int) => e.left.filter(_ % 2 == 0) ==
- (if(e.isRight || e.left.value % 2 != 0) None else Some(e)))
-
- val prop_ap = property((e1: Either[Int, Int], e2: Either[Int, Int]) => {
- val ee2 = e2.left map (n => (x: Int) => x + n)
- e1.left.ap(ee2) == (ee2 match {
- case Left(f) => e1 match {
- case Left(a) => Left(f(a))
- case Right(b) => Right(b)
- }
- case Right(b) => Right(b)
- })
- })
-
- val prop_seq = property((e: Either[Int, Int]) => e.left.seq == (e match {
- case Left(a) => Seq.singleton(a)
- case Right(_) => Seq.empty
- }))
-
- val prop_option = property((e: Either[Int, Int]) => e.left.option == (e match {
- case Left(a) => Some(a)
- case Right(_) => None
- }))
- }
-
- object CheckRightProjection {
- val prop_valueE = property((n: Int, s: String) => Right(n).right.valueE(s) == n)
-
- val prop_value = property((n: Int) => Right(n).right.value == n)
-
- val prop_on = property((e: Either[Int, Int]) => e.right.on((_: Int) + 1) == (e match {
- case Left(a) => a + 1
- case Right(b) => b
- }))
-
- val prop_getOrElse = property((e: Either[Int, Int], or: Int) => e.right.getOrElse(or) == (e match {
- case Left(_) => or
- case Right(b) => b
- }))
-
- val prop_forall = property((e: Either[Int, Int]) =>
- e.right.forall(_ % 2 == 0) == (e.isLeft || e.right.value % 2 == 0))
-
- val prop_exists = property((e: Either[Int, Int]) =>
- e.right.exists(_ % 2 == 0) == (e.isRight && e.right.value % 2 == 0))
-
- val prop_flatMapLeftIdentity = property((e: Either[Int, Int], n: Int, s: String) => {
- def f(x: Int) = if(x % 2 == 0) Left(s) else Right(s)
- Right(n).right.flatMap(f(_)) == f(n)})
-
- val prop_flatMapRightIdentity = property((e: Either[Int, Int]) => e.right.flatMap(Right(_)) == e)
-
- val prop_flatMapComposition = property((e: Either[Int, Int]) => {
- def f(x: Int) = if(x % 2 == 0) Left(x) else Right(x)
- def g(x: Int) = if(x % 7 == 0) Right(x) else Left(x)
- e.right.flatMap(f(_)).right.flatMap(g(_)) == e.right.flatMap(f(_).right.flatMap(g(_)))})
-
- val prop_mapIdentity = property((e: Either[Int, Int]) => e.right.map(x => x) == e)
-
- val prop_mapComposition = property((e: Either[Int, String]) => {
- def f(s: String) = s.toLowerCase
- def g(s: String) = s.reverse
- e.right.map(x => f(g(x))) == e.right.map(x => g(x)).right.map(f(_))})
-
- val prop_filter = property((e: Either[Int, Int], x: Int) => e.right.filter(_ % 2 == 0) ==
- (if(e.isLeft || e.right.value % 2 != 0) None else Some(e)))
-
- val prop_ap = property((e1: Either[Int, Int], e2: Either[Int, Int]) => {
- val ee2 = e2.right map (n => (x: Int) => x + n)
- e1.right.ap(ee2) == (ee2 match {
- case Left(a) => Left(a)
- case Right(f) => e1 match {
- case Left(a) => Left(a)
- case Right(b) => Right(f(b))
- }
- })
- })
-
- val prop_seq = property((e: Either[Int, Int]) => e.right.seq == (e match {
- case Left(_) => Seq.empty
- case Right(b) => Seq.singleton(b)
- }))
-
- val prop_option = property((e: Either[Int, Int]) => e.right.option == (e match {
- case Left(_) => None
- case Right(b) => Some(b)
- }))
- }
-
- val prop_Either_left = property((n: Int) => Either.left(n).left.value == n)
-
- val prop_Either_right = property((n: Int) => Either.right(n).right.value == n)
-
- val prop_Either_joinLeft = property((e: Either[Either[Int, Int], Int]) => e match {
- case Left(ee) => Either.joinLeft(e) == ee
- case Right(n) => Either.joinLeft(e) == Right(n)
- })
-
- val prop_Either_joinRight = property((e: Either[Int, Either[Int, Int]]) => e match {
- case Left(n) => Either.joinRight(e) == Left(n)
- case Right(ee) => Either.joinRight(e) == ee
- })
-
- val prop_Either_lefts = property((es: List[Either[Int, Int]]) =>
- Either.lefts(es) == es.filter(_.isLeft).map(_.left.value))
-
- val prop_Either_rights = property((es: List[Either[Int, Int]]) =>
- Either.rights(es) == es.filter(_.isRight).map(_.right.value))
-
- val prop_Either_leftRights = property((es: List[Either[Int, Int]]) =>
- Either.rights(es) == es.filter(_.isRight).map(_.right.value))
-
- val prop_Either_throws = property((n: Int) =>
- Either.throws(n) == Right(n) && Either.throws(error("error")).isLeft)
-
- val prop_Either_throwIt = property((e: Either[Throwable, Int]) =>
- try {
- Either.throwIt(e) == e.right.value
- } catch {
- case (t) => e.isLeft && e.left.value == t
- })
-
- val prop_Either_reduce = property((e: Either[Int, Int]) =>
- Either.reduce(e) == (e match {
- case Left(a) => a
- case Right(a) => a
- }))
-
- val prop_Either_iif = property((c: Boolean, a: Int, b: Int) =>
- Either.iif(c, a, b) == (if(c) Right(b) else Left(a)))
-
- val tests = List(
- ("prop_either1", prop_either1),
- ("prop_either2", prop_either2),
- ("prop_swap", prop_swap),
- ("prop_isLeftRight", prop_isLeftRight),
- ("Left.prop_valueE", CheckLeftProjection.prop_valueE),
- ("Left.prop_value", CheckLeftProjection.prop_value),
- ("Left.prop_getOrElse", CheckLeftProjection.prop_getOrElse),
- ("Left.prop_forall", CheckLeftProjection.prop_forall),
- ("Left.prop_exists", CheckLeftProjection.prop_exists),
- ("Left.prop_flatMapLeftIdentity", CheckLeftProjection.prop_flatMapLeftIdentity),
- ("Left.prop_flatMapRightIdentity", CheckLeftProjection.prop_flatMapRightIdentity),
- ("Left.prop_flatMapComposition", CheckLeftProjection.prop_flatMapComposition),
- ("Left.prop_mapIdentity", CheckLeftProjection.prop_mapIdentity),
- ("Left.prop_mapComposition", CheckLeftProjection.prop_mapComposition),
- ("Left.prop_filter", CheckLeftProjection.prop_filter),
- ("Left.prop_ap", CheckLeftProjection.prop_ap),
- ("Left.prop_seq", CheckLeftProjection.prop_seq),
- ("Left.prop_option", CheckLeftProjection.prop_option),
- ("Right.prop_valueE", CheckRightProjection.prop_valueE),
- ("Right.prop_value", CheckRightProjection.prop_value),
- ("Right.prop_getOrElse", CheckRightProjection.prop_getOrElse),
- ("Right.prop_forall", CheckRightProjection.prop_forall),
- ("Right.prop_exists", CheckRightProjection.prop_exists),
- ("Right.prop_flatMapLeftIdentity", CheckRightProjection.prop_flatMapLeftIdentity),
- ("Right.prop_flatMapRightIdentity", CheckRightProjection.prop_flatMapRightIdentity),
- ("Right.prop_flatMapComposition", CheckRightProjection.prop_flatMapComposition),
- ("Right.prop_mapIdentity", CheckRightProjection.prop_mapIdentity),
- ("Right.prop_mapComposition", CheckRightProjection.prop_mapComposition),
- ("Right.prop_filter", CheckRightProjection.prop_filter),
- ("Right.prop_ap", CheckRightProjection.prop_ap),
- ("Right.prop_seq", CheckRightProjection.prop_seq),
- ("Right.prop_option", CheckRightProjection.prop_option),
- ("prop_Either_left", prop_Either_left),
- ("prop_Either_right", prop_Either_right),
- ("prop_Either_joinLeft", prop_Either_joinLeft),
- ("prop_Either_joinRight", prop_Either_joinRight),
- ("prop_Either_lefts", prop_Either_lefts),
- ("prop_Either_rights", prop_Either_rights),
- ("prop_Either_leftRights", prop_Either_leftRights),
- ("prop_Either_throws", prop_Either_throws),
- ("prop_Either_throwIt", prop_Either_throwIt),
- ("prop_Either_reduce", prop_Either_reduce),
- ("prop_Either_iif", prop_Either_iif)
- )
-
- def main(args: Array[String]) =
- tests foreach (tupled((name, prop) =>
- testStatsEx(name, testReport(check(Params(500, 0, 0, 500, StdRand), prop, propReport)))))
-}
-
diff --git a/test/pending/scalacheck/process.scala b/test/pending/scalacheck/process.scala
new file mode 100644
index 0000000000..f3aa872361
--- /dev/null
+++ b/test/pending/scalacheck/process.scala
@@ -0,0 +1,160 @@
+/** process tests.
+ */
+
+import java.io.{ File, FileNotFoundException, IOException, InputStream, OutputStream, FileInputStream }
+import java.net.{ URI, URISyntaxException, URL }
+import org.scalacheck._
+import Prop._
+import sys.process._
+import scala.tools.nsc.io.{ File => SFile }
+
+/** This has scrounged bits of sbt to flesh it out enough to run.
+ */
+package processtest {
+
+ object exit
+ {
+ def fn(code: Int) = System.exit(code)
+ def main(args: Array[String]) = exit.fn(java.lang.Integer.parseInt(args(0)))
+ }
+ object cat
+ {
+ def main(args: Array[String])
+ {
+ try {
+ if (args.length == 0)
+ IO.transfer(System.in, System.out)
+ else
+ catFiles(args.toList)
+ exit.fn(0)
+ } catch {
+ case e =>
+ e.printStackTrace()
+ System.err.println("Error: " + e.toString)
+ exit.fn(1)
+ }
+ }
+ private def catFiles(filenames: List[String]): Option[String] = filenames match {
+ case head :: tail =>
+ val file = new File(head)
+ if (file.isDirectory)
+ throw new IOException("Is directory: " + file)
+ else if (file.exists) {
+ IO.transfer(file, System.out)
+ catFiles(tail)
+ }
+ else
+ throw new FileNotFoundException("No such file or directory: " + file)
+ case Nil => None
+ }
+ }
+ object echo
+ {
+ def main(args: Array[String])
+ {
+ System.out.println(args.mkString(" "))
+ }
+ }
+}
+
+object IO {
+ def transfer(in: InputStream, out: OutputStream): Unit = BasicIO.transferFully(in, out)
+ def transfer(in: File, out: OutputStream): Unit = BasicIO.transferFully(new FileInputStream(in), out)
+
+ def classLocation(cl: Class[_]): URL = {
+ val codeSource = cl.getProtectionDomain.getCodeSource
+ if(codeSource == null) sys.error("No class location for " + cl)
+ else codeSource.getLocation
+ }
+ def classLocationFile(cl: Class[_]): File = toFile(classLocation(cl))
+ def classLocation[T](implicit mf: Manifest[T]): URL = classLocation(mf.erasure)
+ def classLocationFile[T](implicit mf: Manifest[T]): File = classLocationFile(mf.erasure)
+
+ def toFile(url: URL) =
+ try { new File(url.toURI) }
+ catch { case _: URISyntaxException => new File(url.getPath) }
+}
+
+class ProcessSpecification extends Properties("Process I/O") {
+ implicit val exitCodeArb: Arbitrary[Array[Byte]] = Arbitrary(Gen.choose(0, 10) flatMap { size =>
+ Gen.resize(size, Arbitrary.arbArray[Byte].arbitrary)
+ })
+
+ /*property("Correct exit code") = forAll( (exitCode: Byte) => checkExit(exitCode))
+ property("#&& correct") = forAll( (exitCodes: Array[Byte]) => checkBinary(exitCodes)(_ #&& _)(_ && _))
+ property("#|| correct") = forAll( (exitCodes: Array[Byte]) => checkBinary(exitCodes)(_ #|| _)(_ || _))
+ property("### correct") = forAll( (exitCodes: Array[Byte]) => checkBinary(exitCodes)(_ ### _)( (x,latest) => latest))*/
+ property("Pipe to output file") = forAll( (data: Array[Byte]) => checkFileOut(data))
+ property("Pipe to input file") = forAll( (data: Array[Byte]) => checkFileIn(data))
+ property("Pipe to process") = forAll( (data: Array[Byte]) => checkPipe(data))
+
+ private def checkBinary(codes: Array[Byte])(reduceProcesses: (ProcessBuilder, ProcessBuilder) => ProcessBuilder)(reduceExit: (Boolean, Boolean) => Boolean) =
+ {
+ (codes.length > 1) ==>
+ {
+ val unsignedCodes = codes.map(unsigned)
+ val exitCode = unsignedCodes.map(code => Process(process("processtest.exit " + code))).reduceLeft(reduceProcesses) !
+ val expectedExitCode = unsignedCodes.map(toBoolean).reduceLeft(reduceExit)
+ toBoolean(exitCode) == expectedExitCode
+ }
+ }
+ private def toBoolean(exitCode: Int) = exitCode == 0
+ private def checkExit(code: Byte) =
+ {
+ val exitCode = unsigned(code)
+ (process("processtest.exit " + exitCode) !) == exitCode
+ }
+ private def checkFileOut(data: Array[Byte]) =
+ {
+ withData(data) { (temporaryFile, temporaryFile2) =>
+ val catCommand = process("processtest.cat " + temporaryFile.getAbsolutePath)
+ catCommand #> temporaryFile2
+ }
+ }
+ private def checkFileIn(data: Array[Byte]) =
+ {
+ withData(data) { (temporaryFile, temporaryFile2) =>
+ val catCommand = process("processtest.cat")
+ temporaryFile #> catCommand #> temporaryFile2
+ }
+ }
+ private def checkPipe(data: Array[Byte]) =
+ {
+ withData(data) { (temporaryFile, temporaryFile2) =>
+ val catCommand = process("processtest.cat")
+ temporaryFile #> catCommand #| catCommand #> temporaryFile2
+ }
+ }
+ private def temp() = SFile(File.createTempFile("processtest", ""))
+ private def withData(data: Array[Byte])(f: (File, File) => ProcessBuilder) =
+ {
+ val temporaryFile1 = temp()
+ val temporaryFile2 = temp()
+ try {
+ temporaryFile1 writeBytes data
+ val process = f(temporaryFile1.jfile, temporaryFile2.jfile)
+ ( process ! ) == 0 &&
+ {
+ val b1 = temporaryFile1.slurp()
+ val b2 = temporaryFile2.slurp()
+ b1 == b2
+ }
+ }
+ finally
+ {
+ temporaryFile1.delete()
+ temporaryFile2.delete()
+ }
+ }
+ private def unsigned(b: Byte): Int = ((b: Int) +256) % 256
+ private def process(command: String) = {
+ val thisClasspath = List(getSource[ScalaObject], getSource[IO.type], getSource[SourceTag]).mkString(File.pathSeparator)
+ "java -cp " + thisClasspath + " " + command
+ }
+ private def getSource[T : Manifest]: String =
+ IO.classLocationFile[T].getAbsolutePath
+}
+private trait SourceTag
+
+
+object Test extends ProcessSpecification { }
diff --git a/test/pending/script/errors.check b/test/pending/script/error-messages.check
index 1aee1fb44a..1aee1fb44a 100644
--- a/test/pending/script/errors.check
+++ b/test/pending/script/error-messages.check
diff --git a/test/pending/script/errors.scala b/test/pending/script/error-messages.scala
index 2e2025b203..2e2025b203 100644
--- a/test/pending/script/errors.scala
+++ b/test/pending/script/error-messages.scala
diff --git a/test/pending/script/t2365.javaopts b/test/pending/script/t2365.javaopts
new file mode 100644
index 0000000000..357e033c1c
--- /dev/null
+++ b/test/pending/script/t2365.javaopts
@@ -0,0 +1 @@
+-XX:MaxPermSize=25M
diff --git a/test/pending/script/t2365.sh b/test/pending/script/t2365.sh
new file mode 100755
index 0000000000..f3c44ad086
--- /dev/null
+++ b/test/pending/script/t2365.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+#
+# This script should fail with any build of scala where #2365
+# is not fixed, and otherwise succeed. Failure means running out
+# of PermGen space.
+
+CP=.:/local/lib/java/ivy.jar
+# SCALAC=/scala/inst/28/bin/scalac
+SCALAC=scalac
+RUN_OPTS="-XX:MaxPermSize=25M -verbose:gc"
+
+$SCALAC -cp $CP *.scala
+JAVA_OPTS="${RUN_OPTS}" scala -cp $CP Test
diff --git a/test/pending/script/t2365/Test.scala b/test/pending/script/t2365/Test.scala
new file mode 100644
index 0000000000..110dea2ab6
--- /dev/null
+++ b/test/pending/script/t2365/Test.scala
@@ -0,0 +1,35 @@
+import scala.tools.nsc.io._
+import java.net.URL
+
+object A { def apply(d: { def apply(): Int}) = d.apply() }
+object A2 { def apply(d: { def apply(): Int}) = d.apply() }
+object A3 { def apply(d: { def apply(): Int}) = d.apply() }
+object A4 { def apply(d: { def apply(): Int}) = d.apply() }
+
+class B extends Function0[Int] {
+ def apply() = 3
+}
+
+object Test
+{
+ type StructF0 = { def apply(): Int }
+ def main(args: Array[String]) {
+ for(i <- 0 until 150)
+ println(i + " " + test(A.apply) + " " + test(A2.apply) + " " + test(A3.apply) + " " + test(A3.apply))
+ }
+
+ def test(withF0: StructF0 => Int): Int = {
+ // Some large jar
+ val jar = File("../../../../lib/scalacheck.jar").toURL
+ // load a class in a separate loader that will be passed to A
+ val loader = new java.net.URLClassLoader(Array(File(".").toURL, jar))
+ // load a real class to fill perm gen space
+ Class.forName("org.scalacheck.Properties", true, loader).newInstance
+ // create a class from another class loader with an apply: Int method
+ val b = Class.forName("B", true, loader).newInstance
+
+ // pass instance to a, which will call apply using structural type reflection.
+ // This should hold on to the class for B, which means bLoader will not get collected
+ withF0(b.asInstanceOf[StructF0])
+ }
+}
diff --git a/test/pending/script/t2365/runner.scala b/test/pending/script/t2365/runner.scala
new file mode 100755
index 0000000000..b5e05325cf
--- /dev/null
+++ b/test/pending/script/t2365/runner.scala
@@ -0,0 +1,9 @@
+#!/bin/sh
+#
+# This script should fail with any build of scala where #2365
+# is not fixed, and otherwise succeed. Failure means running out
+# of PermGen space.
+#
+
+scalac -cp .:/local/lib/java/ivy.jar Test.scala
+JAVA_OPTS="-XX:MaxPermSize=25M -verbose:gc" scalac -cp $CP Test
diff --git a/test/pending/shootout/fasta.check b/test/pending/shootout/fasta.check
new file mode 100644
index 0000000000..f1caba0d62
--- /dev/null
+++ b/test/pending/shootout/fasta.check
@@ -0,0 +1,171 @@
+>ONE Homo sapiens alu
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
+GGCGACAGAGCGAGACTCCG
+>TWO IUB ambiguity codes
+cttBtatcatatgctaKggNcataaaSatgtaaaDcDRtBggDtctttataattcBgtcg
+tactDtDagcctatttSVHtHttKtgtHMaSattgWaHKHttttagacatWatgtRgaaa
+NtactMcSMtYtcMgRtacttctWBacgaaatatagScDtttgaagacacatagtVgYgt
+cattHWtMMWcStgttaggKtSgaYaaccWStcgBttgcgaMttBYatcWtgacaYcaga
+gtaBDtRacttttcWatMttDBcatWtatcttactaBgaYtcttgttttttttYaaScYa
+HgtgttNtSatcMtcVaaaStccRcctDaataataStcYtRDSaMtDttgttSagtRRca
+tttHatSttMtWgtcgtatSSagactYaaattcaMtWatttaSgYttaRgKaRtccactt
+tattRggaMcDaWaWagttttgacatgttctacaaaRaatataataaMttcgDacgaSSt
+acaStYRctVaNMtMgtaggcKatcttttattaaaaagVWaHKYagtttttatttaacct
+tacgtVtcVaattVMBcttaMtttaStgacttagattWWacVtgWYagWVRctDattBYt
+gtttaagaagattattgacVatMaacattVctgtBSgaVtgWWggaKHaatKWcBScSWa
+accRVacacaaactaccScattRatatKVtactatatttHttaagtttSKtRtacaaagt
+RDttcaaaaWgcacatWaDgtDKacgaacaattacaRNWaatHtttStgttattaaMtgt
+tgDcgtMgcatBtgcttcgcgaDWgagctgcgaggggVtaaScNatttacttaatgacag
+cccccacatYScaMgtaggtYaNgttctgaMaacNaMRaacaaacaKctacatagYWctg
+ttWaaataaaataRattagHacacaagcgKatacBttRttaagtatttccgatctHSaat
+actcNttMaagtattMtgRtgaMgcataatHcMtaBSaRattagttgatHtMttaaKagg
+YtaaBataSaVatactWtataVWgKgttaaaacagtgcgRatatacatVtHRtVYataSa
+KtWaStVcNKHKttactatccctcatgWHatWaRcttactaggatctataDtDHBttata
+aaaHgtacVtagaYttYaKcctattcttcttaataNDaaggaaaDYgcggctaaWSctBa
+aNtgctggMBaKctaMVKagBaactaWaDaMaccYVtNtaHtVWtKgRtcaaNtYaNacg
+gtttNattgVtttctgtBaWgtaattcaagtcaVWtactNggattctttaYtaaagccgc
+tcttagHVggaYtgtNcDaVagctctctKgacgtatagYcctRYHDtgBattDaaDgccK
+tcHaaStttMcctagtattgcRgWBaVatHaaaataYtgtttagMDMRtaataaggatMt
+ttctWgtNtgtgaaaaMaatatRtttMtDgHHtgtcattttcWattRSHcVagaagtacg
+ggtaKVattKYagactNaatgtttgKMMgYNtcccgSKttctaStatatNVataYHgtNa
+BKRgNacaactgatttcctttaNcgatttctctataScaHtataRagtcRVttacDSDtt
+aRtSatacHgtSKacYagttMHtWataggatgactNtatSaNctataVtttRNKtgRacc
+tttYtatgttactttttcctttaaacatacaHactMacacggtWataMtBVacRaSaatc
+cgtaBVttccagccBcttaRKtgtgcctttttRtgtcagcRttKtaaacKtaaatctcac
+aattgcaNtSBaaccgggttattaaBcKatDagttactcttcattVtttHaaggctKKga
+tacatcBggScagtVcacattttgaHaDSgHatRMaHWggtatatRgccDttcgtatcga
+aacaHtaagttaRatgaVacttagattVKtaaYttaaatcaNatccRttRRaMScNaaaD
+gttVHWgtcHaaHgacVaWtgttScactaagSgttatcttagggDtaccagWattWtRtg
+ttHWHacgattBtgVcaYatcggttgagKcWtKKcaVtgaYgWctgYggVctgtHgaNcV
+taBtWaaYatcDRaaRtSctgaHaYRttagatMatgcatttNattaDttaattgttctaa
+ccctcccctagaWBtttHtBccttagaVaatMcBHagaVcWcagBVttcBtaYMccagat
+gaaaaHctctaacgttagNWRtcggattNatcRaNHttcagtKttttgWatWttcSaNgg
+gaWtactKKMaacatKatacNattgctWtatctaVgagctatgtRaHtYcWcttagccaa
+tYttWttaWSSttaHcaaaaagVacVgtaVaRMgattaVcDactttcHHggHRtgNcctt
+tYatcatKgctcctctatVcaaaaKaaaagtatatctgMtWtaaaacaStttMtcgactt
+taSatcgDataaactaaacaagtaaVctaggaSccaatMVtaaSKNVattttgHccatca
+cBVctgcaVatVttRtactgtVcaattHgtaaattaaattttYtatattaaRSgYtgBag
+aHSBDgtagcacRHtYcBgtcacttacactaYcgctWtattgSHtSatcataaatataHt
+cgtYaaMNgBaatttaRgaMaatatttBtttaaaHHKaatctgatWatYaacttMctctt
+ttVctagctDaaagtaVaKaKRtaacBgtatccaaccactHHaagaagaaggaNaaatBW
+attccgStaMSaMatBttgcatgRSacgttVVtaaDMtcSgVatWcaSatcttttVatag
+ttactttacgatcaccNtaDVgSRcgVcgtgaacgaNtaNatatagtHtMgtHcMtagaa
+attBgtataRaaaacaYKgtRccYtatgaagtaataKgtaaMttgaaRVatgcagaKStc
+tHNaaatctBBtcttaYaBWHgtVtgacagcaRcataWctcaBcYacYgatDgtDHccta
+>THREE Homo sapiens frequency
+aacacttcaccaggtatcgtgaaggctcaagattacccagagaacctttgcaatataaga
+atatgtatgcagcattaccctaagtaattatattctttttctgactcaaagtgacaagcc
+ctagtgtatattaaatcggtatatttgggaaattcctcaaactatcctaatcaggtagcc
+atgaaagtgatcaaaaaagttcgtacttataccatacatgaattctggccaagtaaaaaa
+tagattgcgcaaaattcgtaccttaagtctctcgccaagatattaggatcctattactca
+tatcgtgtttttctttattgccgccatccccggagtatctcacccatccttctcttaaag
+gcctaatattacctatgcaaataaacatatattgttgaaaattgagaacctgatcgtgat
+tcttatgtgtaccatatgtatagtaatcacgcgactatatagtgctttagtatcgcccgt
+gggtgagtgaatattctgggctagcgtgagatagtttcttgtcctaatatttttcagatc
+gaatagcttctatttttgtgtttattgacatatgtcgaaactccttactcagtgaaagtc
+atgaccagatccacgaacaatcttcggaatcagtctcgttttacggcggaatcttgagtc
+taacttatatcccgtcgcttactttctaacaccccttatgtatttttaaaattacgttta
+ttcgaacgtacttggcggaagcgttattttttgaagtaagttacattgggcagactcttg
+acattttcgatacgactttctttcatccatcacaggactcgttcgtattgatatcagaag
+ctcgtgatgattagttgtcttctttaccaatactttgaggcctattctgcgaaatttttg
+ttgccctgcgaacttcacataccaaggaacacctcgcaacatgccttcatatccatcgtt
+cattgtaattcttacacaatgaatcctaagtaattacatccctgcgtaaaagatggtagg
+ggcactgaggatatattaccaagcatttagttatgagtaatcagcaatgtttcttgtatt
+aagttctctaaaatagttacatcgtaatgttatctcgggttccgcgaataaacgagatag
+attcattatatatggccctaagcaaaaacctcctcgtattctgttggtaattagaatcac
+acaatacgggttgagatattaattatttgtagtacgaagagatataaaaagatgaacaat
+tactcaagtcaagatgtatacgggatttataataaaaatcgggtagagatctgctttgca
+attcagacgtgccactaaatcgtaatatgtcgcgttacatcagaaagggtaactattatt
+aattaataaagggcttaatcactacatattagatcttatccgatagtcttatctattcgt
+tgtatttttaagcggttctaattcagtcattatatcagtgctccgagttctttattattg
+ttttaaggatgacaaaatgcctcttgttataacgctgggagaagcagactaagagtcgga
+gcagttggtagaatgaggctgcaaaagacggtctcgacgaatggacagactttactaaac
+caatgaaagacagaagtagagcaaagtctgaagtggtatcagcttaattatgacaaccct
+taatacttccctttcgccgaatactggcgtggaaaggttttaaaagtcgaagtagttaga
+ggcatctctcgctcataaataggtagactactcgcaatccaatgtgactatgtaatactg
+ggaacatcagtccgcgatgcagcgtgtttatcaaccgtccccactcgcctggggagacat
+gagaccacccccgtggggattattagtccgcagtaatcgactcttgacaatccttttcga
+ttatgtcatagcaatttacgacagttcagcgaagtgactactcggcgaaatggtattact
+aaagcattcgaacccacatgaatgtgattcttggcaatttctaatccactaaagcttttc
+cgttgaatctggttgtagatatttatataagttcactaattaagatcacggtagtatatt
+gatagtgatgtctttgcaagaggttggccgaggaatttacggattctctattgatacaat
+ttgtctggcttataactcttaaggctgaaccaggcgtttttagacgacttgatcagctgt
+tagaatggtttggactccctctttcatgtcagtaacatttcagccgttattgttacgata
+tgcttgaacaatattgatctaccacacacccatagtatattttataggtcatgctgttac
+ctacgagcatggtattccacttcccattcaatgagtattcaacatcactagcctcagaga
+tgatgacccacctctaataacgtcacgttgcggccatgtgaaacctgaacttgagtagac
+gatatcaagcgctttaaattgcatataacatttgagggtaaagctaagcggatgctttat
+ataatcaatactcaataataagatttgattgcattttagagttatgacacgacatagttc
+actaacgagttactattcccagatctagactgaagtactgatcgagacgatccttacgtc
+gatgatcgttagttatcgacttaggtcgggtctctagcggtattggtacttaaccggaca
+ctatactaataacccatgatcaaagcataacagaatacagacgataatttcgccaacata
+tatgtacagaccccaagcatgagaagctcattgaaagctatcattgaagtcccgctcaca
+atgtgtcttttccagacggtttaactggttcccgggagtcctggagtttcgacttacata
+aatggaaacaatgtattttgctaatttatctatagcgtcatttggaccaatacagaatat
+tatgttgcctagtaatccactataacccgcaagtgctgatagaaaatttttagacgattt
+ataaatgccccaagtatccctcccgtgaatcctccgttatactaattagtattcgttcat
+acgtataccgcgcatatatgaacatttggcgataaggcgcgtgaattgttacgtgacaga
+gatagcagtttcttgtgatatggttaacagacgtacatgaagggaaactttatatctata
+gtgatgcttccgtagaaataccgccactggtctgccaatgatgaagtatgtagctttagg
+tttgtactatgaggctttcgtttgtttgcagagtataacagttgcgagtgaaaaaccgac
+gaatttatactaatacgctttcactattggctacaaaatagggaagagtttcaatcatga
+gagggagtatatggatgctttgtagctaaaggtagaacgtatgtatatgctgccgttcat
+tcttgaaagatacataagcgataagttacgacaattataagcaacatccctaccttcgta
+acgatttcactgttactgcgcttgaaatacactatggggctattggcggagagaagcaga
+tcgcgccgagcatatacgagacctataatgttgatgatagagaaggcgtctgaattgata
+catcgaagtacactttctttcgtagtatctctcgtcctctttctatctccggacacaaga
+attaagttatatatatagagtcttaccaatcatgttgaatcctgattctcagagttcttt
+ggcgggccttgtgatgactgagaaacaatgcaatattgctccaaatttcctaagcaaatt
+ctcggttatgttatgttatcagcaaagcgttacgttatgttatttaaatctggaatgacg
+gagcgaagttcttatgtcggtgtgggaataattcttttgaagacagcactccttaaataa
+tatcgctccgtgtttgtatttatcgaatgggtctgtaaccttgcacaagcaaatcggtgg
+tgtatatatcggataacaattaatacgatgttcatagtgacagtatactgatcgagtcct
+ctaaagtcaattacctcacttaacaatctcattgatgttgtgtcattcccggtatcgccc
+gtagtatgtgctctgattgaccgagtgtgaaccaaggaacatctactaatgcctttgtta
+ggtaagatctctctgaattccttcgtgccaacttaaaacattatcaaaatttcttctact
+tggattaactacttttacgagcatggcaaattcccctgtggaagacggttcattattatc
+ggaaaccttatagaaattgcgtgttgactgaaattagatttttattgtaagagttgcatc
+tttgcgattcctctggtctagcttccaatgaacagtcctcccttctattcgacatcgggt
+ccttcgtacatgtctttgcgatgtaataattaggttcggagtgtggccttaatgggtgca
+actaggaatacaacgcaaatttgctgacatgatagcaaatcggtatgccggcaccaaaac
+gtgctccttgcttagcttgtgaatgagactcagtagttaaataaatccatatctgcaatc
+gattccacaggtattgtccactatctttgaactactctaagagatacaagcttagctgag
+accgaggtgtatatgactacgctgatatctgtaaggtaccaatgcaggcaaagtatgcga
+gaagctaataccggctgtttccagctttataagattaaaatttggctgtcctggcggcct
+cagaattgttctatcgtaatcagttggttcattaattagctaagtacgaggtacaactta
+tctgtcccagaacagctccacaagtttttttacagccgaaacccctgtgtgaatcttaat
+atccaagcgcgttatctgattagagtttacaactcagtattttatcagtacgttttgttt
+ccaacattacccggtatgacaaaatgacgccacgtgtcgaataatggtctgaccaatgta
+ggaagtgaaaagataaatat
diff --git a/test/pending/shootout/fasta.scala b/test/pending/shootout/fasta.scala
new file mode 100644
index 0000000000..8b711083a5
--- /dev/null
+++ b/test/pending/shootout/fasta.scala
@@ -0,0 +1,162 @@
+/* The Computer Language Shootout
+ http://shootout.alioth.debian.org/
+ contributed by Isaac Gouy
+*/
+
+import java.io._
+
+object fasta {
+ def main(args: Array[String]) = {
+
+ val ALU =
+ "GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG" +
+ "GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA" +
+ "CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT" +
+ "ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA" +
+ "GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG" +
+ "AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC" +
+ "AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA"
+
+ val _IUB = Array(
+ Pair('a', 0.27),
+ Pair('c', 0.12),
+ Pair('g', 0.12),
+ Pair('t', 0.27),
+
+ Pair('B', 0.02),
+ Pair('D', 0.02),
+ Pair('H', 0.02),
+ Pair('K', 0.02),
+ Pair('M', 0.02),
+ Pair('N', 0.02),
+ Pair('R', 0.02),
+ Pair('S', 0.02),
+ Pair('V', 0.02),
+ Pair('W', 0.02),
+ Pair('Y', 0.02)
+ )
+
+ val IUB = makeCumulative(_IUB)
+
+ val _HomoSapiens = Array(
+ Pair('a', 0.3029549426680),
+ Pair('c', 0.1979883004921),
+ Pair('g', 0.1975473066391),
+ Pair('t', 0.3015094502008)
+ )
+
+ val HomoSapiens = makeCumulative(_HomoSapiens)
+
+
+ val n = Integer parseInt(args(0))
+ val s = new FastaOutputStream(System.out)
+
+ s.writeDescription("ONE Homo sapiens alu")
+ s.writeRepeatingSequence(ALU,n*2)
+
+ s.writeDescription("TWO IUB ambiguity codes")
+ s.writeRandomSequence(IUB,n*3)
+
+ s.writeDescription("THREE Homo sapiens frequency")
+ s.writeRandomSequence(HomoSapiens,n*5)
+
+ s.close
+ }
+
+ def makeCumulative(a: Array[Pair[Char,Double]]) = {
+ var cp = 0.0
+ a map (frequency =>
+ frequency match {
+ case Pair(code,percent) =>
+ cp = cp + percent; new Frequency(code.toByte,cp)
+ }
+ )
+ }
+
+}
+
+
+// We could use instances of Pair or Tuple2 but specific labels
+// make the code more readable than index numbers
+
+class Frequency(_code: Byte, _percent: Double){
+ var code = _code; var percent = _percent;
+}
+
+
+// extend the Java BufferedOutputStream class
+
+class FastaOutputStream(out: OutputStream) extends BufferedOutputStream(out) {
+
+ private val LineLength = 60
+ private val nl = '\n'.toByte
+
+ def writeDescription(desc: String) = { write( (">" + desc + "\n").getBytes ) }
+
+ def writeRepeatingSequence(_alu: String, length: Int) = {
+ val alu = _alu.getBytes
+ var n = length; var k = 0; val kn = alu.length;
+
+ while (n > 0) {
+ val m = if (n < LineLength) n else LineLength
+
+ var i = 0
+ while (i < m){
+ if (k == kn) k = 0
+ val b = alu(k)
+ if (count < buf.length){ buf(count) = b; count = count + 1 }
+ else { write(b) } // flush buffer
+ k = k+1
+ i = i+1
+ }
+
+ write(nl)
+ n = n - LineLength
+ }
+
+ }
+
+ def writeRandomSequence(distribution: Array[Frequency], length: Int) = {
+ var n = length
+ while (n > 0) {
+ val m = if (n < LineLength) n else LineLength
+
+ var i = 0
+ while (i < m){
+ val b = selectRandom(distribution)
+ if (count < buf.length){ buf(count) = b; count = count + 1 }
+ else { write(b) } // flush buffer
+ i = i+1
+ }
+
+ if (count < buf.length){ buf(count) = nl; count = count + 1 }
+ else { write(nl) } // flush buffer
+ n = n - LineLength
+ }
+ }
+
+ private def selectRandom(distribution: Array[Frequency]): Byte = {
+ val n = distribution.length
+ val r = RandomNumber scaledTo(1.0)
+
+ var i = 0
+ while (i < n) {
+ if (r < distribution(i).percent) return distribution(i).code
+ i = i+1
+ }
+ return distribution(n-1).code
+ }
+}
+
+
+object RandomNumber {
+ private val IM = 139968
+ private val IA = 3877
+ private val IC = 29573
+ private var seed = 42
+
+ def scaledTo(max: Double) = {
+ seed = (seed * IA + IC) % IM
+ max * seed / IM
+ }
+}
diff --git a/test/pending/shootout/fasta.scala.runner b/test/pending/shootout/fasta.scala.runner
new file mode 100644
index 0000000000..e95a749cf2
--- /dev/null
+++ b/test/pending/shootout/fasta.scala.runner
@@ -0,0 +1,3 @@
+object Test extends Application {
+ for(n <- List(25000,250000,2500000)) fasta.main(Array(n.toString))
+}
diff --git a/test/pending/shootout/harmonic.scala-2.scala b/test/pending/shootout/harmonic.scala-2.scala
new file mode 100644
index 0000000000..a55e164e50
--- /dev/null
+++ b/test/pending/shootout/harmonic.scala-2.scala
@@ -0,0 +1,14 @@
+/* The Computer Language Shootout
+ http://shootout.alioth.debian.org/
+ contributed by Isaac Gouy (Scala novice)
+*/
+
+object harmonic {
+ def main(args: Array[String]) = {
+ val n = Integer.parseInt(args(0));
+ var partialSum = 0.0;
+
+ for (i <- Iterator.range(1,n+1)) partialSum = partialSum + 1.0/i;
+ Console.printf("{0,number,#.000000000}\n")(partialSum);
+ }
+}
diff --git a/test/pending/shootout/harmonic.scala-2.scala.runner b/test/pending/shootout/harmonic.scala-2.scala.runner
new file mode 100644
index 0000000000..d0ea85742a
--- /dev/null
+++ b/test/pending/shootout/harmonic.scala-2.scala.runner
@@ -0,0 +1,16 @@
+/* The Computer Language Shootout
+ http://shootout.alioth.debian.org/
+ contributed by Isaac Gouy (Scala novice)
+*/
+object Test extends Application {
+ for(n <- List(6000000,8000000,10000000)) harmonic.main(Array(n.toString))
+}
+object harmonic {
+ def main(args: Array[String]) = {
+ val n = Integer.parseInt(args(0));
+ var partialSum = 0.0;
+
+ for (i <- Iterator.range(1,n+1)) partialSum = partialSum + 1.0/i;
+ Console.printf("{0,number,#.000000000}\n")(partialSum);
+ }
+}
diff --git a/test/pending/shootout/harmonic.scala-3.scala b/test/pending/shootout/harmonic.scala-3.scala
new file mode 100644
index 0000000000..dc631fcf12
--- /dev/null
+++ b/test/pending/shootout/harmonic.scala-3.scala
@@ -0,0 +1,15 @@
+/* The Computer Language Shootout
+ http://shootout.alioth.debian.org/
+ contributed by Isaac Gouy (Scala novice)
+*/
+
+object harmonic {
+ def main(args: Array[String]) = {
+ val n = Integer.parseInt(args(0));
+ var partialSum = 0.0;
+ var i = 1;
+
+ while (i < n){ partialSum = partialSum + 1.0/i; i = i + 1; }
+ Console.printf("{0,number,#.000000000}\n", partialSum);
+ }
+}
diff --git a/test/pending/shootout/harmonic.scala-3.scala.runner b/test/pending/shootout/harmonic.scala-3.scala.runner
new file mode 100644
index 0000000000..b5eda3f034
--- /dev/null
+++ b/test/pending/shootout/harmonic.scala-3.scala.runner
@@ -0,0 +1,3 @@
+object Test extends Application {
+ for(n <- List(6000000,8000000,10000000)) harmonic.main(Array(n.toString))
+}
diff --git a/test/pending/shootout/heapsort.scala b/test/pending/shootout/heapsort.scala
new file mode 100644
index 0000000000..59b1fe27cb
--- /dev/null
+++ b/test/pending/shootout/heapsort.scala
@@ -0,0 +1,72 @@
+/* The Computer Language Shootout
+ http://shootout.alioth.debian.org/
+ contributed by Isaac Gouy (Scala novice)
+*/
+
+object heapsort {
+ def main(args: Array[String]) = {
+ val n = toPositiveInt(args);
+
+ val numbers = new Array[Double](n+1);
+ for (i <- Iterator.range(1,n+1))
+ numbers(i) = generate(100.0);
+
+ heapsort(n, numbers);
+
+ Console.printf("{0,number,#.000000000}\n", numbers(n));
+ }
+
+
+ def heapsort(n: Int, ra: Array[Double]): Unit = {
+ var l = 0; var j = 0; var ir = 0; var i = 0;
+ var rra = 0.0d;
+
+ if (n < 2) return;
+ l = (n >> 1) + 1;
+ ir = n;
+ while (true) {
+ if (l > 1) { l = l-1; rra = ra(l); }
+ else {
+ rra = ra(ir);
+ ra(ir) = ra(1);
+ ir = ir-1;
+ if (ir == 1) {
+ ra(1) = rra;
+ return;
+ }
+ }
+ i = l;
+ j = l << 1;
+ while (j <= ir) {
+ if (j < ir && ra(j) < ra(j+1)) { j = j+1; }
+ if (rra < ra(j)) {
+ ra(i) = ra(j);
+ i = j;
+ j = j + i;
+ }
+ else j = ir + 1;
+ }
+ ra(i) = rra;
+ }
+ }
+
+
+ private val IM = 139968;
+ private val IA = 3877;
+ private val IC = 29573;
+ private var seed = 42;
+
+ private def generate(max: Double) = {
+ seed = (seed * IA + IC) % IM;
+ max * seed / IM;
+ }
+
+
+ private def toPositiveInt(s: Array[String]) = {
+ val i =
+ try { Integer.parseInt(s(0)); }
+ catch { case _ => 1 }
+ if (i>0) i; else 1;
+ }
+
+}
diff --git a/test/pending/shootout/heapsort.scala.runner b/test/pending/shootout/heapsort.scala.runner
new file mode 100644
index 0000000000..07e4ec7fbd
--- /dev/null
+++ b/test/pending/shootout/heapsort.scala.runner
@@ -0,0 +1,3 @@
+object Test extends Application {
+ for(n <- List(20000,40000,60000,80000,100000)) heapsort.main(Array(n.toString))
+}
diff --git a/test/pending/shootout/mandelbrot.scala-2.check b/test/pending/shootout/mandelbrot.scala-2.check
new file mode 100644
index 0000000000..2f7bbbc6b0
--- /dev/null
+++ b/test/pending/shootout/mandelbrot.scala-2.check
Binary files differ
diff --git a/test/pending/shootout/mandelbrot.scala-2.scala b/test/pending/shootout/mandelbrot.scala-2.scala
new file mode 100644
index 0000000000..dffdc354a0
--- /dev/null
+++ b/test/pending/shootout/mandelbrot.scala-2.scala
@@ -0,0 +1,79 @@
+/* The Computer Language Shootout
+ http://shootout.alioth.debian.org/
+ contributed by Isaac Gouy
+*/
+
+// This test is in pending because it fails on windows only,
+// but partest's output and the fact that this test outputs in
+// binary makes it a challenge to debug remotely. However,
+// it's easy to guess that it has to do with the BufferedOutputStream
+// and some kind of windows-specific damage that requires an extra
+// flush, or different line-ending characters, or any of the various
+// write-once-know-quirks-everywhere aspects of java i/o.
+//
+// [partest] testing: [...]\files\shootout\mandelbrot.scala-2.scala [FAILED]
+// [partest] P4
+// [partest] 200 200
+// [partest]
+// ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^B^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
+// ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
+// [etc]
+
+import java.io.BufferedOutputStream
+
+object mandelbrot {
+ def main(args: Array[String]) = {
+ val side = Integer.parseInt(args(0))
+ val limitSquared = 4.0
+ val max = 50
+ var bits = 0
+ var bitnum = 0
+ val w = new BufferedOutputStream(System.out)
+
+ Console.println("P4\n" + side + " " + side)
+
+ var y = 0
+ while (y < side){
+
+ var x = 0
+ while (x < side){
+
+ val cr = 2.0 * x / side - 1.5
+ val ci = 2.0 * y / side - 1.0
+
+ var zr = 0.0; var zi = 0.0
+ var tr = 0.0; var ti = 0.0
+
+ var j = max
+ do {
+ zi = 2.0 * zr * zi + ci
+ zr = tr - ti + cr
+ ti = zi*zi
+ tr = zr*zr
+
+ j = j - 1
+ } while (!(tr + ti > limitSquared) && j > 0)
+
+
+ bits = bits << 1
+ if (!(tr + ti > limitSquared)) bits = bits + 1
+ bitnum = bitnum + 1
+
+ if (x == side - 1){
+ bits = bits << (8 - bitnum)
+ bitnum = 8
+ }
+
+ if (bitnum == 8){
+ w.write(bits.toByte)
+ bits = 0
+ bitnum = 0
+ }
+
+ x = x + 1
+ }
+ y = y + 1
+ }
+ w.close
+ }
+}
diff --git a/test/pending/shootout/mandelbrot.scala-2.scala.runner b/test/pending/shootout/mandelbrot.scala-2.scala.runner
new file mode 100644
index 0000000000..27f69f6aec
--- /dev/null
+++ b/test/pending/shootout/mandelbrot.scala-2.scala.runner
@@ -0,0 +1,3 @@
+object Test extends Application {
+ for(n <- List(200,400,600)) mandelbrot.main(Array(n.toString))
+}
diff --git a/test/pending/shootout/message.check b/test/pending/shootout/message.check
new file mode 100644
index 0000000000..354b2529b2
--- /dev/null
+++ b/test/pending/shootout/message.check
@@ -0,0 +1 @@
+500000
diff --git a/test/pending/shootout/message.javaopts b/test/pending/shootout/message.javaopts
new file mode 100644
index 0000000000..1879c77427
--- /dev/null
+++ b/test/pending/shootout/message.javaopts
@@ -0,0 +1 @@
+-Xss128k
diff --git a/test/pending/shootout/message.scala b/test/pending/shootout/message.scala
new file mode 100644
index 0000000000..a7a1dacc9d
--- /dev/null
+++ b/test/pending/shootout/message.scala
@@ -0,0 +1,47 @@
+/* The Computer Language Shootout
+ http://shootout.alioth.debian.org/
+ contributed by Isaac Gouy
+*/
+
+
+import scala.concurrent._
+
+object message {
+ def main(args: Array[String]) = {
+ val n = Integer.parseInt(args(0))
+ val nActors = 500
+ val finalSum = n * nActors
+
+ case class Message(value: Int)
+
+ class Incrementor(next: Pid) extends Actor {
+ var sum = 0
+
+ override def run() = {
+ while (true) {
+ receive {
+ case Message(value) =>
+ val j = value + 1
+ if (null != next){
+ next ! Message(j)
+ } else {
+ sum = sum + j
+ if (sum >= finalSum){
+ Console.println(sum);
+ System.exit(0) // exit without cleaning up
+ }
+ }
+ }
+ }
+ }
+
+ def pid() = { this.start; this.self }
+ }
+
+ def actorChain(i: Int, a: Pid): Pid =
+ if (i > 0) actorChain(i-1, new Incrementor(a).pid ) else a
+
+ val firstActor = actorChain(nActors, null)
+ var i = n; while (i > 0){ firstActor ! Message(0); i = i-1 }
+ }
+}
diff --git a/test/pending/shootout/message.scala.runner b/test/pending/shootout/message.scala.runner
new file mode 100644
index 0000000000..ffbee1640b
--- /dev/null
+++ b/test/pending/shootout/message.scala.runner
@@ -0,0 +1,3 @@
+object Test extends Application {
+ for(n <- List(1000,2000,3000)) message.main(Array(n.toString))
+}
diff --git a/test/pending/shootout/meteor.scala b/test/pending/shootout/meteor.scala
new file mode 100644
index 0000000000..2fd702753a
--- /dev/null
+++ b/test/pending/shootout/meteor.scala
@@ -0,0 +1,496 @@
+/* The Computer Language Shootout
+ http://shootout.alioth.debian.org/
+ contributed by Isaac Gouy
+*/
+
+// This is an un-optimised example implementation
+
+
+import scala.collection.mutable._
+
+object meteor {
+ def main(args: Array[String]) = {
+ val solver = new Solver( Integer.parseInt(args(0)) )
+ solver.findSolutions
+ solver.printSolutions
+ }
+}
+
+
+
+
+// Solver.scala
+// import scala.collection.mutable._
+
+final class Solver (n: Int) {
+ private var countdown = n
+ private var first: String = _
+ private var last: String = _
+
+ private val board = new Board()
+
+ val pieces = Array(
+ new Piece(0), new Piece(1), new Piece(2), new Piece(3), new Piece(4),
+ new Piece(5), new Piece(6), new Piece(7), new Piece(8), new Piece(9) )
+
+ val unplaced = new BitSet(pieces.length)
+
+ { unplaced ++= (0 until pieces.length) }
+
+
+ def findSolutions(): Unit = {
+ if (countdown == 0) return
+
+ if (unplaced.size > 0){
+ val emptyCellIndex = board.firstEmptyCellIndex
+
+ for (k <- Iterator.range(0,pieces.length)){
+ if (unplaced.contains(k)){
+ unplaced -= k
+
+ for (i <- Iterator.range(0,Piece.orientations)){
+ val piece = pieces(k).nextOrientation
+
+ for (j <- Iterator.range(0,Piece.size)){
+ if (board.add(j,emptyCellIndex,piece)) {
+
+ if (!shouldPrune) findSolutions
+
+ board.remove(piece)
+ }
+ }
+ }
+ unplaced += k
+ }
+ }
+ }
+ else {
+ puzzleSolved
+ }
+ }
+
+ private def puzzleSolved() = {
+ val b = board.asString
+ if (first == null){
+ first = b; last = b
+ } else {
+ if (b < first){ first = b } else { if (b > last){ last = b } }
+ }
+ countdown = countdown - 1
+ }
+
+ private def shouldPrune() = {
+ board.unmark
+ !board.cells.forall(c => c.contiguousEmptyCells % Piece.size == 0)
+ }
+
+
+ def printSolutions() = {
+
+ def printBoard(s: String) = {
+ var indent = false
+ var i = 0
+ while (i < s.length){
+ if (indent) Console.print(' ')
+ for (j <- Iterator.range(0,Board.cols)){
+ Console.print(s.charAt(i)); Console.print(' ')
+ i = i + 1
+ }
+ Console.print('\n')
+ indent = !indent
+ }
+ Console.print('\n')
+ }
+
+ Console.print(n + " solutions found\n\n")
+ printBoard(first)
+ printBoard(last)
+ }
+
+/*
+ def printPieces() =
+ for (i <- Iterator.range(0,Board.pieces)) pieces(i).print
+*/
+
+}
+
+
+
+
+// Board.scala
+// import scala.collection.mutable._
+
+object Board {
+ val cols = 5
+ val rows = 10
+ val size = rows * cols
+}
+
+final class Board {
+ val cells = boardCells()
+
+ val cellsPieceWillFill = new Array[BoardCell](Piece.size)
+ var cellCount = 0
+
+ def unmark() = for (c <- cells) c.unmark
+
+ def asString() =
+ new String( cells map(
+ c => if (c.piece == null) '-'.toByte
+ else (c.piece.number + 48).toByte ))
+
+ def firstEmptyCellIndex() = cells.findIndexOf(c => c.isEmpty)
+
+ def add(pieceIndex: Int, boardIndex: Int, p: Piece) = {
+ cellCount = 0
+ p.unmark
+
+ find( p.cells(pieceIndex), cells(boardIndex))
+
+ val boardHasSpace = cellCount == Piece.size &&
+ cellsPieceWillFill.forall(c => c.isEmpty)
+
+ if (boardHasSpace) cellsPieceWillFill.foreach(c => c.piece = p)
+
+ boardHasSpace
+ }
+
+ def remove(piece: Piece) = for (c <- cells; if c.piece == piece) c.empty
+
+
+ private def find(p: PieceCell, b: BoardCell): Unit = {
+ if (p != null && !p.marked && b != null){
+ cellsPieceWillFill(cellCount) = b
+ cellCount = cellCount + 1
+ p.mark
+ for (i <- Iterator.range(0,Cell.sides)) find(p.next(i), b.next(i))
+ }
+ }
+
+
+ private def boardCells() = {
+ val a = for (i <- Array.range(0,Board.size)) yield new BoardCell(i)
+ val m = (Board.size / Board.cols) - 1
+
+ for (i <- Iterator.range(0,a.length)){
+ val row = i / Board.cols
+ val isFirst = i % Board.cols == 0
+ val isLast = (i+1) % Board.cols == 0
+ val c = a(i)
+
+ if (row % 2 == 1) {
+ if (!isLast) c.next(Cell.NE) = a(i-(Board.cols-1))
+ c.next(Cell.NW) = a(i-Board.cols)
+ if (row != m) {
+ if (!isLast) c.next(Cell.SE) = a(i+(Board.cols+1))
+ c.next(Cell.SW) = a(i+Board.cols)
+ }
+ } else {
+ if (row != 0) {
+ if (!isFirst) c.next(Cell.NW) = a(i-(Board.cols+1))
+ c.next(Cell.NE) = a(i-Board.cols)
+ }
+ if (row != m) {
+ if (!isFirst) c.next(Cell.SW) = a(i+(Board.cols-1))
+ c.next(Cell.SE) = a(i+Board.cols)
+ }
+ }
+ if (!isFirst) c.next(Cell.W) = a(i-1)
+ if (!isLast) c.next(Cell.E) = a(i+1)
+ }
+ a
+ }
+
+
+/*
+// Printing all the board cells and their neighbours
+// helps check that they are connected properly
+
+ def printBoardCellsAndNeighbours() = {
+ Console.println("cell\tNW NE W E SW SE")
+ for (i <- Iterator.range(0,Board.size)){
+ Console.print(i + "\t")
+ for (j <- Iterator.range(0,Cell.sides)){
+ val c = cells(i).next(j)
+ if (c == null)
+ Console.print("-- ")
+ else
+ Console.printf("{0,number,00} ")(c.number)
+ }
+ Console.println("")
+ }
+ Console.println("")
+ }
+*/
+
+}
+
+
+
+
+// Piece.scala
+
+object Piece {
+ val size = 5
+ val rotations = Cell.sides
+ val flips = 2
+ val orientations = rotations * flips
+}
+
+final class Piece(_number: Int) {
+ val number = _number
+ val cells = for (i <- Array.range(0,Piece.size)) yield new PieceCell()
+
+ {
+ number match {
+ case 0 => make0
+ case 1 => make1
+ case 2 => make2
+ case 3 => make3
+ case 4 => make4
+ case 5 => make5
+ case 6 => make6
+ case 7 => make7
+ case 8 => make8
+ case 9 => make9
+ }
+ }
+
+ def flip() = for (c <- cells) c.flip
+ def rotate() = for (c <- cells) c.rotate
+ def unmark() = for (c <- cells) c.unmark
+
+
+ private var orientation = 0
+
+ def nextOrientation() = {
+ if (orientation == Piece.orientations) orientation = 0
+ if (orientation % Piece.rotations == 0) flip else rotate
+ orientation = orientation + 1
+ this
+ }
+
+
+ private def make0() = {
+ cells(0).next(Cell.E) = cells(1)
+ cells(1).next(Cell.W) = cells(0)
+ cells(1).next(Cell.E) = cells(2)
+ cells(2).next(Cell.W) = cells(1)
+ cells(2).next(Cell.E) = cells(3)
+ cells(3).next(Cell.W) = cells(2)
+ cells(3).next(Cell.SE) = cells(4)
+ cells(4).next(Cell.NW) = cells(3)
+ }
+
+ private def make1() = {
+ cells(0).next(Cell.SE) = cells(1)
+ cells(1).next(Cell.NW) = cells(0)
+ cells(1).next(Cell.SW) = cells(2)
+ cells(2).next(Cell.NE) = cells(1)
+ cells(2).next(Cell.W) = cells(3)
+ cells(3).next(Cell.E) = cells(2)
+ cells(3).next(Cell.SW) = cells(4)
+ cells(4).next(Cell.NE) = cells(3)
+ }
+
+ private def make2() = {
+ cells(0).next(Cell.W) = cells(1)
+ cells(1).next(Cell.E) = cells(0)
+ cells(1).next(Cell.SW) = cells(2)
+ cells(2).next(Cell.NE) = cells(1)
+ cells(2).next(Cell.SE) = cells(3)
+ cells(3).next(Cell.NW) = cells(2)
+ cells(3).next(Cell.SE) = cells(4)
+ cells(4).next(Cell.NW) = cells(3)
+ }
+
+ private def make3() = {
+ cells(0).next(Cell.SW) = cells(1)
+ cells(1).next(Cell.NE) = cells(0)
+ cells(1).next(Cell.W) = cells(2)
+ cells(2).next(Cell.E) = cells(1)
+ cells(1).next(Cell.SW) = cells(3)
+ cells(3).next(Cell.NE) = cells(1)
+ cells(2).next(Cell.SE) = cells(3)
+ cells(3).next(Cell.NW) = cells(2)
+ cells(3).next(Cell.SE) = cells(4)
+ cells(4).next(Cell.NW) = cells(3)
+ }
+
+ private def make4() = {
+ cells(0).next(Cell.SE) = cells(1)
+ cells(1).next(Cell.NW) = cells(0)
+ cells(1).next(Cell.SW) = cells(2)
+ cells(2).next(Cell.NE) = cells(1)
+ cells(1).next(Cell.E) = cells(3)
+ cells(3).next(Cell.W) = cells(1)
+ cells(3).next(Cell.SE) = cells(4)
+ cells(4).next(Cell.NW) = cells(3)
+ }
+
+ private def make5() = {
+ cells(0).next(Cell.SW) = cells(1)
+ cells(1).next(Cell.NE) = cells(0)
+ cells(0).next(Cell.SE) = cells(2)
+ cells(2).next(Cell.NW) = cells(0)
+ cells(1).next(Cell.SE) = cells(3)
+ cells(3).next(Cell.NW) = cells(1)
+ cells(2).next(Cell.SW) = cells(3)
+ cells(3).next(Cell.NE) = cells(2)
+ cells(3).next(Cell.SW) = cells(4)
+ cells(4).next(Cell.NE) = cells(3)
+ }
+
+ private def make6() = {
+ cells(0).next(Cell.SW) = cells(1)
+ cells(1).next(Cell.NE) = cells(0)
+ cells(2).next(Cell.SE) = cells(1)
+ cells(1).next(Cell.NW) = cells(2)
+ cells(1).next(Cell.SE) = cells(3)
+ cells(3).next(Cell.NW) = cells(1)
+ cells(3).next(Cell.SW) = cells(4)
+ cells(4).next(Cell.NE) = cells(3)
+ }
+
+ private def make7() = {
+ cells(0).next(Cell.SE) = cells(1)
+ cells(1).next(Cell.NW) = cells(0)
+ cells(0).next(Cell.SW) = cells(2)
+ cells(2).next(Cell.NE) = cells(0)
+ cells(2).next(Cell.SW) = cells(3)
+ cells(3).next(Cell.NE) = cells(2)
+ cells(3).next(Cell.SE) = cells(4)
+ cells(4).next(Cell.NW) = cells(3)
+ }
+
+ private def make8() = {
+ cells(0).next(Cell.E) = cells(1)
+ cells(1).next(Cell.W) = cells(0)
+ cells(1).next(Cell.E) = cells(2)
+ cells(2).next(Cell.W) = cells(1)
+ cells(2).next(Cell.NE) = cells(3)
+ cells(3).next(Cell.SW) = cells(2)
+ cells(3).next(Cell.E) = cells(4)
+ cells(4).next(Cell.W) = cells(3)
+ }
+
+ private def make9() = {
+ cells(0).next(Cell.E) = cells(1)
+ cells(1).next(Cell.W) = cells(0)
+ cells(1).next(Cell.E) = cells(2)
+ cells(2).next(Cell.W) = cells(1)
+ cells(2).next(Cell.NE) = cells(3)
+ cells(3).next(Cell.SW) = cells(2)
+ cells(2).next(Cell.E) = cells(4)
+ cells(4).next(Cell.W) = cells(2)
+ cells(4).next(Cell.NW) = cells(3)
+ cells(3).next(Cell.SE) = cells(4)
+ }
+
+/*
+ def print() = {
+ Console.println("Piece # " + number)
+ Console.println("cell\tNW NE W E SW SE")
+ for (i <- Iterator.range(0,Piece.size)){
+ Console.print(i + "\t")
+ for (j <- Iterator.range(0,Cell.sides)){
+ val c = cells(i).next(j)
+ if (c == null)
+ Console.print("-- ")
+ else
+ for (k <- Iterator.range(0,Piece.size)){
+ if (cells(k) == c) Console.printf(" {0,number,0} ")(k)
+ }
+ }
+ Console.println("")
+ }
+ Console.println("")
+ }
+*/
+
+}
+
+
+
+
+// Cell.scala
+
+object Cell {
+ val NW = 0; val NE = 1
+ val W = 2; val E = 3
+ val SW = 4; val SE = 5
+
+ val sides = 6
+}
+
+abstract class Cell {
+ implicit def m: Manifest[T]
+ type T
+ val next = new Array[T](Cell.sides)
+ var marked = false
+
+ def mark() = marked = true
+ def unmark() = marked = false
+}
+
+// BoardCell.scala
+
+final class BoardCell(_number: Int) extends {
+ type T = BoardCell
+ implicit val m = manifest[BoardCell]
+} with Cell {
+ val number = _number
+ var piece: Piece = _
+
+ def isEmpty() = piece == null
+ def empty() = piece = null
+
+ def contiguousEmptyCells(): Int = {
+ if (!marked && isEmpty){
+ mark
+ var count = 1
+
+ for (neighbour <- next)
+ if (neighbour != null && neighbour.isEmpty)
+ count = count + neighbour.contiguousEmptyCells
+
+ count } else { 0 }
+ }
+}
+
+
+
+
+// PieceCell.scala
+
+final class PieceCell extends Cell {
+ type T = PieceCell
+
+ def flip = {
+ var swap = next(Cell.NE)
+ next(Cell.NE) = next(Cell.NW)
+ next(Cell.NW) = swap
+
+ swap = next(Cell.E)
+ next(Cell.E) = next(Cell.W)
+ next(Cell.W) = swap
+
+ swap = next(Cell.SE)
+ next(Cell.SE) = next(Cell.SW)
+ next(Cell.SW) = swap
+ }
+
+ def rotate = {
+ var swap = next(Cell.E)
+ next(Cell.E) = next(Cell.NE)
+ next(Cell.NE) = next(Cell.NW)
+ next(Cell.NW) = next(Cell.W)
+ next(Cell.W) = next(Cell.SW)
+ next(Cell.SW) = next(Cell.SE)
+ next(Cell.SE) = swap
+ }
+}
+
+
+
+
diff --git a/test/pending/shootout/meteor.scala-2.scala b/test/pending/shootout/meteor.scala-2.scala
new file mode 100644
index 0000000000..2b42c19260
--- /dev/null
+++ b/test/pending/shootout/meteor.scala-2.scala
@@ -0,0 +1,496 @@
+/* The Computer Language Shootout
+ http://shootout.alioth.debian.org/
+ contributed by Isaac Gouy
+*/
+
+// This is an un-optimised example implementation
+// classes BoardCell and PieceCell have Array
+
+
+import scala.collection.mutable._
+
+object meteor {
+ def main(args: Array[String]) = {
+ val solver = new Solver( Integer.parseInt(args(0)) )
+ solver.findSolutions
+ solver.printSolutions
+ }
+}
+
+
+
+
+// Solver.scala
+// import scala.collection.mutable._
+
+final class Solver (n: Int) {
+ private var countdown = n
+ private var first: String = _
+ private var last: String = _
+
+ private val board = new Board()
+
+ val pieces = Array(
+ new Piece(0), new Piece(1), new Piece(2), new Piece(3), new Piece(4),
+ new Piece(5), new Piece(6), new Piece(7), new Piece(8), new Piece(9) )
+
+ val unplaced = new BitSet(pieces.length)
+
+ { unplaced ++= (0 until pieces.length) }
+
+
+ def findSolutions(): Unit = {
+ if (countdown == 0) return
+
+ if (unplaced.size > 0){
+ val emptyCellIndex = board.firstEmptyCellIndex
+
+ for (k <- Iterator.range(0,pieces.length)){
+ if (unplaced.contains(k)){
+ unplaced -= k
+
+ for (i <- Iterator.range(0,Piece.orientations)){
+ val piece = pieces(k).nextOrientation
+
+ for (j <- Iterator.range(0,Piece.size)){
+ if (board.add(j,emptyCellIndex,piece)) {
+
+ if (!shouldPrune) findSolutions
+
+ board.remove(piece)
+ }
+ }
+ }
+ unplaced += k
+ }
+ }
+ }
+ else {
+ puzzleSolved
+ }
+ }
+
+ private def puzzleSolved() = {
+ val b = board.asString
+ if (first == null){
+ first = b; last = b
+ } else {
+ if (b < first){ first = b } else { if (b > last){ last = b } }
+ }
+ countdown = countdown - 1
+ }
+
+ private def shouldPrune() = {
+ board.unmark
+ !board.cells.forall(c => c.contiguousEmptyCells % Piece.size == 0)
+ }
+
+
+ def printSolutions() = {
+
+ def printBoard(s: String) = {
+ var indent = false
+ var i = 0
+ while (i < s.length){
+ if (indent) Console.print(' ')
+ for (j <- Iterator.range(0,Board.cols)){
+ Console.print(s.charAt(i)); Console.print(' ')
+ i = i + 1
+ }
+ Console.print('\n')
+ indent = !indent
+ }
+ Console.print('\n')
+ }
+
+ Console.print(n + " solutions found\n\n")
+ printBoard(first)
+ printBoard(last)
+ }
+
+/*
+ def printPieces() =
+ for (i <- Iterator.range(0,Board.pieces)) pieces(i).print
+*/
+
+}
+
+
+
+
+// Board.scala
+// import scala.collection.mutable._
+
+object Board {
+ val cols = 5
+ val rows = 10
+ val size = rows * cols
+}
+
+final class Board {
+ val cells = boardCells()
+
+ val cellsPieceWillFill = new Array[BoardCell](Piece.size)
+ var cellCount = 0
+
+ def unmark() = for (c <- cells) c.unmark
+
+ def asString() =
+ new String( cells map(
+ c => if (c.piece == null) '-'.toByte
+ else (c.piece.number + 48).toByte ))
+
+ def firstEmptyCellIndex() = cells.findIndexOf(c => c.isEmpty)
+
+
+ def add(pieceIndex: Int, boardIndex: Int, p: Piece) = {
+ cellCount = 0
+ p.unmark
+
+ find( p.cells(pieceIndex), cells(boardIndex))
+
+ val boardHasSpace = cellCount == Piece.size &&
+ cellsPieceWillFill.forall(c => c.isEmpty)
+
+ if (boardHasSpace) cellsPieceWillFill.foreach(c => c.piece = p)
+
+ boardHasSpace
+ }
+
+ def remove(piece: Piece) = for (c <- cells; if c.piece == piece) c.empty
+
+
+ private def find(p: PieceCell, b: BoardCell): Unit = {
+ if (p != null && !p.marked && b != null){
+ cellsPieceWillFill(cellCount) = b
+ cellCount = cellCount + 1
+ p.mark
+ for (i <- Iterator.range(0,Cell.sides)) find(p.next(i), b.next(i))
+ }
+ }
+
+
+ private def boardCells() = {
+ val a = for (i <- Array.range(0,Board.size)) yield new BoardCell(i)
+ val m = (Board.size / Board.cols) - 1
+
+ for (i <- Iterator.range(0,a.length)){
+ val row = i / Board.cols
+ val isFirst = i % Board.cols == 0
+ val isLast = (i+1) % Board.cols == 0
+ val c = a(i)
+
+ if (row % 2 == 1) {
+ if (!isLast) c.next(Cell.NE) = a(i-(Board.cols-1))
+ c.next(Cell.NW) = a(i-Board.cols)
+ if (row != m) {
+ if (!isLast) c.next(Cell.SE) = a(i+(Board.cols+1))
+ c.next(Cell.SW) = a(i+Board.cols)
+ }
+ } else {
+ if (row != 0) {
+ if (!isFirst) c.next(Cell.NW) = a(i-(Board.cols+1))
+ c.next(Cell.NE) = a(i-Board.cols)
+ }
+ if (row != m) {
+ if (!isFirst) c.next(Cell.SW) = a(i+(Board.cols-1))
+ c.next(Cell.SE) = a(i+Board.cols)
+ }
+ }
+ if (!isFirst) c.next(Cell.W) = a(i-1)
+ if (!isLast) c.next(Cell.E) = a(i+1)
+ }
+ a
+ }
+
+
+/*
+// Printing all the board cells and their neighbours
+// helps check that they are connected properly
+
+ def printBoardCellsAndNeighbours() = {
+ Console.println("cell\tNW NE W E SW SE")
+ for (i <- Iterator.range(0,Board.size)){
+ Console.print(i + "\t")
+ for (j <- Iterator.range(0,Cell.sides)){
+ val c = cells(i).next(j)
+ if (c == null)
+ Console.print("-- ")
+ else
+ Console.printf("{0,number,00} ")(c.number)
+ }
+ Console.println("")
+ }
+ Console.println("")
+ }
+*/
+
+}
+
+
+
+
+// Piece.scala
+
+object Piece {
+ val size = 5
+ val rotations = Cell.sides
+ val flips = 2
+ val orientations = rotations * flips
+}
+
+final class Piece(_number: Int) {
+ val number = _number
+ val cells = for (i <- Array.range(0,Piece.size)) yield new PieceCell()
+
+ {
+ number match {
+ case 0 => make0
+ case 1 => make1
+ case 2 => make2
+ case 3 => make3
+ case 4 => make4
+ case 5 => make5
+ case 6 => make6
+ case 7 => make7
+ case 8 => make8
+ case 9 => make9
+ }
+ }
+
+ def flip() = for (c <- cells) c.flip
+ def rotate() = for (c <- cells) c.rotate
+ def unmark() = for (c <- cells) c.unmark
+
+
+ private var orientation = 0
+
+ def nextOrientation() = {
+ if (orientation == Piece.orientations) orientation = 0
+ if (orientation % Piece.rotations == 0) flip else rotate
+ orientation = orientation + 1
+ this
+ }
+
+
+ private def make0() = {
+ cells(0).next(Cell.E) = cells(1)
+ cells(1).next(Cell.W) = cells(0)
+ cells(1).next(Cell.E) = cells(2)
+ cells(2).next(Cell.W) = cells(1)
+ cells(2).next(Cell.E) = cells(3)
+ cells(3).next(Cell.W) = cells(2)
+ cells(3).next(Cell.SE) = cells(4)
+ cells(4).next(Cell.NW) = cells(3)
+ }
+
+ private def make1() = {
+ cells(0).next(Cell.SE) = cells(1)
+ cells(1).next(Cell.NW) = cells(0)
+ cells(1).next(Cell.SW) = cells(2)
+ cells(2).next(Cell.NE) = cells(1)
+ cells(2).next(Cell.W) = cells(3)
+ cells(3).next(Cell.E) = cells(2)
+ cells(3).next(Cell.SW) = cells(4)
+ cells(4).next(Cell.NE) = cells(3)
+ }
+
+ private def make2() = {
+ cells(0).next(Cell.W) = cells(1)
+ cells(1).next(Cell.E) = cells(0)
+ cells(1).next(Cell.SW) = cells(2)
+ cells(2).next(Cell.NE) = cells(1)
+ cells(2).next(Cell.SE) = cells(3)
+ cells(3).next(Cell.NW) = cells(2)
+ cells(3).next(Cell.SE) = cells(4)
+ cells(4).next(Cell.NW) = cells(3)
+ }
+
+ private def make3() = {
+ cells(0).next(Cell.SW) = cells(1)
+ cells(1).next(Cell.NE) = cells(0)
+ cells(1).next(Cell.W) = cells(2)
+ cells(2).next(Cell.E) = cells(1)
+ cells(1).next(Cell.SW) = cells(3)
+ cells(3).next(Cell.NE) = cells(1)
+ cells(2).next(Cell.SE) = cells(3)
+ cells(3).next(Cell.NW) = cells(2)
+ cells(3).next(Cell.SE) = cells(4)
+ cells(4).next(Cell.NW) = cells(3)
+ }
+
+ private def make4() = {
+ cells(0).next(Cell.SE) = cells(1)
+ cells(1).next(Cell.NW) = cells(0)
+ cells(1).next(Cell.SW) = cells(2)
+ cells(2).next(Cell.NE) = cells(1)
+ cells(1).next(Cell.E) = cells(3)
+ cells(3).next(Cell.W) = cells(1)
+ cells(3).next(Cell.SE) = cells(4)
+ cells(4).next(Cell.NW) = cells(3)
+ }
+
+ private def make5() = {
+ cells(0).next(Cell.SW) = cells(1)
+ cells(1).next(Cell.NE) = cells(0)
+ cells(0).next(Cell.SE) = cells(2)
+ cells(2).next(Cell.NW) = cells(0)
+ cells(1).next(Cell.SE) = cells(3)
+ cells(3).next(Cell.NW) = cells(1)
+ cells(2).next(Cell.SW) = cells(3)
+ cells(3).next(Cell.NE) = cells(2)
+ cells(3).next(Cell.SW) = cells(4)
+ cells(4).next(Cell.NE) = cells(3)
+ }
+
+ private def make6() = {
+ cells(0).next(Cell.SW) = cells(1)
+ cells(1).next(Cell.NE) = cells(0)
+ cells(2).next(Cell.SE) = cells(1)
+ cells(1).next(Cell.NW) = cells(2)
+ cells(1).next(Cell.SE) = cells(3)
+ cells(3).next(Cell.NW) = cells(1)
+ cells(3).next(Cell.SW) = cells(4)
+ cells(4).next(Cell.NE) = cells(3)
+ }
+
+ private def make7() = {
+ cells(0).next(Cell.SE) = cells(1)
+ cells(1).next(Cell.NW) = cells(0)
+ cells(0).next(Cell.SW) = cells(2)
+ cells(2).next(Cell.NE) = cells(0)
+ cells(2).next(Cell.SW) = cells(3)
+ cells(3).next(Cell.NE) = cells(2)
+ cells(3).next(Cell.SE) = cells(4)
+ cells(4).next(Cell.NW) = cells(3)
+ }
+
+ private def make8() = {
+ cells(0).next(Cell.E) = cells(1)
+ cells(1).next(Cell.W) = cells(0)
+ cells(1).next(Cell.E) = cells(2)
+ cells(2).next(Cell.W) = cells(1)
+ cells(2).next(Cell.NE) = cells(3)
+ cells(3).next(Cell.SW) = cells(2)
+ cells(3).next(Cell.E) = cells(4)
+ cells(4).next(Cell.W) = cells(3)
+ }
+
+ private def make9() = {
+ cells(0).next(Cell.E) = cells(1)
+ cells(1).next(Cell.W) = cells(0)
+ cells(1).next(Cell.E) = cells(2)
+ cells(2).next(Cell.W) = cells(1)
+ cells(2).next(Cell.NE) = cells(3)
+ cells(3).next(Cell.SW) = cells(2)
+ cells(2).next(Cell.E) = cells(4)
+ cells(4).next(Cell.W) = cells(2)
+ cells(4).next(Cell.NW) = cells(3)
+ cells(3).next(Cell.SE) = cells(4)
+ }
+
+/*
+ def print() = {
+ Console.println("Piece # " + number)
+ Console.println("cell\tNW NE W E SW SE")
+ for (i <- Iterator.range(0,Piece.size)){
+ Console.print(i + "\t")
+ for (j <- Iterator.range(0,Cell.sides)){
+ val c = cells(i).next(j)
+ if (c == null)
+ Console.print("-- ")
+ else
+ for (k <- Iterator.range(0,Piece.size)){
+ if (cells(k) == c) Console.printf(" {0,number,0} ")(k)
+ }
+ }
+ Console.println("")
+ }
+ Console.println("")
+ }
+*/
+
+}
+
+
+
+
+// Cell.scala
+
+object Cell {
+ val NW = 0; val NE = 1
+ val W = 2; val E = 3
+ val SW = 4; val SE = 5
+
+ val sides = 6
+}
+
+abstract class Cell {
+ var marked = false
+
+ def mark() = marked = true
+ def unmark() = marked = false
+}
+
+
+
+
+// BoardCell.scala
+
+final class BoardCell(_number: Int) extends Cell {
+ val next = new Array[BoardCell](Cell.sides)
+ val number = _number
+ var piece: Piece = _
+
+ def isEmpty() = piece == null
+ def empty() = piece = null
+
+ def contiguousEmptyCells(): Int = {
+ if (!marked && isEmpty){
+ mark
+ var count = 1
+
+ for (neighbour <- next)
+ if (neighbour != null && neighbour.isEmpty)
+ count = count + neighbour.contiguousEmptyCells
+
+ count } else { 0 }
+ }
+}
+
+
+
+
+// PieceCell.scala
+
+final class PieceCell extends Cell {
+ val next = new Array[PieceCell](Cell.sides)
+
+ def flip = {
+ var swap = next(Cell.NE)
+ next(Cell.NE) = next(Cell.NW)
+ next(Cell.NW) = swap
+
+ swap = next(Cell.E)
+ next(Cell.E) = next(Cell.W)
+ next(Cell.W) = swap
+
+ swap = next(Cell.SE)
+ next(Cell.SE) = next(Cell.SW)
+ next(Cell.SW) = swap
+ }
+
+ def rotate = {
+ var swap = next(Cell.E)
+ next(Cell.E) = next(Cell.NE)
+ next(Cell.NE) = next(Cell.NW)
+ next(Cell.NW) = next(Cell.W)
+ next(Cell.W) = next(Cell.SW)
+ next(Cell.SW) = next(Cell.SE)
+ next(Cell.SE) = swap
+ }
+}
+
+
+
+
diff --git a/test/pending/shootout/meteor.scala-2.scala.runner b/test/pending/shootout/meteor.scala-2.scala.runner
new file mode 100644
index 0000000000..dae384311f
--- /dev/null
+++ b/test/pending/shootout/meteor.scala-2.scala.runner
@@ -0,0 +1,3 @@
+object Test extends Application {
+ for(n <- List(0)) meteor.main(Array(n.toString))
+}
diff --git a/test/pending/shootout/meteor.scala-3.scala b/test/pending/shootout/meteor.scala-3.scala
new file mode 100644
index 0000000000..01dacf90c6
--- /dev/null
+++ b/test/pending/shootout/meteor.scala-3.scala
@@ -0,0 +1,557 @@
+/* The Computer Language Shootout
+ http://shootout.alioth.debian.org/
+ contributed by Isaac Gouy
+*/
+
+// Most for-comprehension replaced by while loops
+
+
+
+import scala.collection.mutable._
+
+object meteor {
+ def main(args: Array[String]) = {
+ val solver = new Solver( Integer.parseInt(args(0)) )
+ solver.findSolutions
+ solver.printSolutions
+ }
+}
+
+
+
+
+// Solver.scala
+// import scala.collection.mutable._
+
+final class Solver (n: Int) {
+ private var countdown = n
+ private var first: String = _
+ private var last: String = _
+
+ private val board = new Board()
+
+ val pieces = Array(
+ new Piece(0), new Piece(1), new Piece(2), new Piece(3), new Piece(4),
+ new Piece(5), new Piece(6), new Piece(7), new Piece(8), new Piece(9) )
+
+ val unplaced = new BitSet(pieces.length)
+
+ { unplaced ++= (0 until pieces.length) }
+
+
+ def findSolutions(): Unit = {
+ if (countdown == 0) return
+
+ if (unplaced.size > 0){
+ val emptyCellIndex = board.firstEmptyCellIndex
+
+ var k = 0
+ while (k < pieces.length){
+ if (unplaced.contains(k)){
+ unplaced -= k
+
+ var i = 0
+ while (i < Piece.orientations){
+ val piece = pieces(k).nextOrientation
+
+ var j = 0
+ while (j < Piece.size){
+ if (board.add(j,emptyCellIndex,piece)) {
+
+ if (!shouldPrune) findSolutions
+
+ board.remove(piece)
+ }
+ j = j + 1
+ }
+ i = i + 1
+ }
+ unplaced += k
+ }
+ k = k + 1
+ }
+ }
+ else {
+ puzzleSolved
+ }
+ }
+
+ private def puzzleSolved() = {
+ val b = board.asString
+ if (first == null){
+ first = b; last = b
+ } else {
+ if (b < first){ first = b } else { if (b > last){ last = b } }
+ }
+ countdown = countdown - 1
+ }
+
+ private def shouldPrune(): Boolean = {
+ board.unmark
+ var i = 0
+ while (i < board.cells.length){
+ if (board.cells(i).contiguousEmptyCells % Piece.size != 0) return true
+ i = i + 1
+ }
+ false
+ }
+
+
+ def printSolutions() = {
+
+ def printBoard(s: String) = {
+ var indent = false
+ var i = 0
+ while (i < s.length){
+ if (indent) Console.print(' ')
+ var j = 0
+ while (j < Board.cols){
+ Console.print(s.charAt(i)); Console.print(' ')
+ j = j + 1
+ i = i + 1
+ }
+ Console.print('\n')
+ indent = !indent
+ }
+ Console.print('\n')
+ }
+
+ Console.print(n + " solutions found\n\n")
+ printBoard(first)
+ printBoard(last)
+ }
+
+/*
+ def printPieces() =
+ for (i <- Iterator.range(0,Board.pieces)) pieces(i).print
+*/
+
+}
+
+
+
+
+
+// Board.scala
+// import scala.collection.mutable._
+
+object Board {
+ val cols = 5
+ val rows = 10
+ val size = rows * cols
+}
+
+final class Board {
+ val cells = boardCells()
+
+ val cellsPieceWillFill = new Array[BoardCell](Piece.size)
+ var cellCount = 0
+
+ def unmark() = {
+ var i = 0
+ while (i < cells.length){
+ cells(i).unmark
+ i = i + 1
+ }
+ }
+
+ def asString() =
+ new String( cells map(
+ c => if (c.piece == null) '-'.toByte
+ else (c.piece.number + 48).toByte ))
+
+ def firstEmptyCellIndex() = cells.findIndexOf(c => c.isEmpty)
+
+
+ def add(pieceIndex: Int, boardIndex: Int, p: Piece): Boolean = {
+ cellCount = 0
+ p.unmark
+
+ find(p.cells(pieceIndex), cells(boardIndex))
+
+ if (cellCount != Piece.size) return false
+
+ var i = 0
+ while (i < cellCount){
+ if (!cellsPieceWillFill(i).isEmpty) return false
+ i = i + 1
+ }
+
+ i = 0
+ while (i < cellCount){
+ cellsPieceWillFill(i).piece = p
+ i = i + 1
+ }
+
+ true
+ }
+
+ def remove(piece: Piece) = {
+ var i = 0
+ while (i < cells.length){
+ if (cells(i).piece == piece) cells(i).empty
+ i = i + 1
+ }
+ }
+
+ private def find(p: PieceCell, b: BoardCell): Unit = {
+ if (p != null && !p.marked && b != null){
+ cellsPieceWillFill(cellCount) = b
+ cellCount = cellCount + 1
+ p.mark
+
+ var i = 0
+ while (i < Cell.sides){
+ find(p.next(i), b.next(i))
+ i = i + 1
+ }
+ }
+ }
+
+
+ private def boardCells() = {
+ val a = for (i <- Array.range(0,Board.size)) yield new BoardCell(i)
+ val m = (Board.size / Board.cols) - 1
+
+ for (i <- Iterator.range(0,a.length)){
+ val row = i / Board.cols
+ val isFirst = i % Board.cols == 0
+ val isLast = (i+1) % Board.cols == 0
+ val c = a(i)
+
+ if (row % 2 == 1) {
+ if (!isLast) c.next(Cell.NE) = a(i-(Board.cols-1))
+ c.next(Cell.NW) = a(i-Board.cols)
+ if (row != m) {
+ if (!isLast) c.next(Cell.SE) = a(i+(Board.cols+1))
+ c.next(Cell.SW) = a(i+Board.cols)
+ }
+ } else {
+ if (row != 0) {
+ if (!isFirst) c.next(Cell.NW) = a(i-(Board.cols+1))
+ c.next(Cell.NE) = a(i-Board.cols)
+ }
+ if (row != m) {
+ if (!isFirst) c.next(Cell.SW) = a(i+(Board.cols-1))
+ c.next(Cell.SE) = a(i+Board.cols)
+ }
+ }
+ if (!isFirst) c.next(Cell.W) = a(i-1)
+ if (!isLast) c.next(Cell.E) = a(i+1)
+ }
+ a
+ }
+
+/*
+// Printing all the board cells and their neighbours
+// helps check that they are connected properly
+
+ def printBoardCellsAndNeighbours() = {
+ Console.println("cell\tNW NE W E SW SE")
+ for (i <- Iterator.range(0,Board.size)){
+ Console.print(i + "\t")
+ for (j <- Iterator.range(0,Cell.sides)){
+ val c = cells(i).next(j)
+ if (c == null)
+ Console.print("-- ")
+ else
+ Console.printf("{0,number,00} ")(c.number)
+ }
+ Console.println("")
+ }
+ Console.println("")
+ }
+*/
+
+}
+
+
+
+
+// Piece.scala
+
+object Piece {
+ val size = 5
+ val rotations = Cell.sides
+ val flips = 2
+ val orientations = rotations * flips
+}
+
+final class Piece(_number: Int) {
+ val number = _number
+ val cells = for (i <- Array.range(0,Piece.size)) yield new PieceCell()
+
+ {
+ number match {
+ case 0 => make0
+ case 1 => make1
+ case 2 => make2
+ case 3 => make3
+ case 4 => make4
+ case 5 => make5
+ case 6 => make6
+ case 7 => make7
+ case 8 => make8
+ case 9 => make9
+ }
+ }
+
+ def flip() = {
+ var i = 0
+ while (i < cells.length){
+ cells(i).flip
+ i = i + 1
+ }
+ }
+
+ def rotate() = {
+ var i = 0
+ while (i < cells.length){
+ cells(i).rotate
+ i = i + 1
+ }
+ }
+
+ def unmark() = {
+ var i = 0
+ while (i < cells.length){
+ cells(i).unmark
+ i = i + 1
+ }
+ }
+
+
+ private var orientation = 0
+
+ def nextOrientation() = {
+ if (orientation == Piece.orientations) orientation = 0
+ if (orientation % Piece.rotations == 0) flip else rotate
+ orientation = orientation + 1
+ this
+ }
+
+
+ private def make0() = {
+ cells(0).next(Cell.E) = cells(1)
+ cells(1).next(Cell.W) = cells(0)
+ cells(1).next(Cell.E) = cells(2)
+ cells(2).next(Cell.W) = cells(1)
+ cells(2).next(Cell.E) = cells(3)
+ cells(3).next(Cell.W) = cells(2)
+ cells(3).next(Cell.SE) = cells(4)
+ cells(4).next(Cell.NW) = cells(3)
+ }
+
+ private def make1() = {
+ cells(0).next(Cell.SE) = cells(1)
+ cells(1).next(Cell.NW) = cells(0)
+ cells(1).next(Cell.SW) = cells(2)
+ cells(2).next(Cell.NE) = cells(1)
+ cells(2).next(Cell.W) = cells(3)
+ cells(3).next(Cell.E) = cells(2)
+ cells(3).next(Cell.SW) = cells(4)
+ cells(4).next(Cell.NE) = cells(3)
+ }
+
+ private def make2() = {
+ cells(0).next(Cell.W) = cells(1)
+ cells(1).next(Cell.E) = cells(0)
+ cells(1).next(Cell.SW) = cells(2)
+ cells(2).next(Cell.NE) = cells(1)
+ cells(2).next(Cell.SE) = cells(3)
+ cells(3).next(Cell.NW) = cells(2)
+ cells(3).next(Cell.SE) = cells(4)
+ cells(4).next(Cell.NW) = cells(3)
+ }
+
+ private def make3() = {
+ cells(0).next(Cell.SW) = cells(1)
+ cells(1).next(Cell.NE) = cells(0)
+ cells(1).next(Cell.W) = cells(2)
+ cells(2).next(Cell.E) = cells(1)
+ cells(1).next(Cell.SW) = cells(3)
+ cells(3).next(Cell.NE) = cells(1)
+ cells(2).next(Cell.SE) = cells(3)
+ cells(3).next(Cell.NW) = cells(2)
+ cells(3).next(Cell.SE) = cells(4)
+ cells(4).next(Cell.NW) = cells(3)
+ }
+
+ private def make4() = {
+ cells(0).next(Cell.SE) = cells(1)
+ cells(1).next(Cell.NW) = cells(0)
+ cells(1).next(Cell.SW) = cells(2)
+ cells(2).next(Cell.NE) = cells(1)
+ cells(1).next(Cell.E) = cells(3)
+ cells(3).next(Cell.W) = cells(1)
+ cells(3).next(Cell.SE) = cells(4)
+ cells(4).next(Cell.NW) = cells(3)
+ }
+
+ private def make5() = {
+ cells(0).next(Cell.SW) = cells(1)
+ cells(1).next(Cell.NE) = cells(0)
+ cells(0).next(Cell.SE) = cells(2)
+ cells(2).next(Cell.NW) = cells(0)
+ cells(1).next(Cell.SE) = cells(3)
+ cells(3).next(Cell.NW) = cells(1)
+ cells(2).next(Cell.SW) = cells(3)
+ cells(3).next(Cell.NE) = cells(2)
+ cells(3).next(Cell.SW) = cells(4)
+ cells(4).next(Cell.NE) = cells(3)
+ }
+
+ private def make6() = {
+ cells(0).next(Cell.SW) = cells(1)
+ cells(1).next(Cell.NE) = cells(0)
+ cells(2).next(Cell.SE) = cells(1)
+ cells(1).next(Cell.NW) = cells(2)
+ cells(1).next(Cell.SE) = cells(3)
+ cells(3).next(Cell.NW) = cells(1)
+ cells(3).next(Cell.SW) = cells(4)
+ cells(4).next(Cell.NE) = cells(3)
+ }
+
+ private def make7() = {
+ cells(0).next(Cell.SE) = cells(1)
+ cells(1).next(Cell.NW) = cells(0)
+ cells(0).next(Cell.SW) = cells(2)
+ cells(2).next(Cell.NE) = cells(0)
+ cells(2).next(Cell.SW) = cells(3)
+ cells(3).next(Cell.NE) = cells(2)
+ cells(3).next(Cell.SE) = cells(4)
+ cells(4).next(Cell.NW) = cells(3)
+ }
+
+ private def make8() = {
+ cells(0).next(Cell.E) = cells(1)
+ cells(1).next(Cell.W) = cells(0)
+ cells(1).next(Cell.E) = cells(2)
+ cells(2).next(Cell.W) = cells(1)
+ cells(2).next(Cell.NE) = cells(3)
+ cells(3).next(Cell.SW) = cells(2)
+ cells(3).next(Cell.E) = cells(4)
+ cells(4).next(Cell.W) = cells(3)
+ }
+
+ private def make9() = {
+ cells(0).next(Cell.E) = cells(1)
+ cells(1).next(Cell.W) = cells(0)
+ cells(1).next(Cell.E) = cells(2)
+ cells(2).next(Cell.W) = cells(1)
+ cells(2).next(Cell.NE) = cells(3)
+ cells(3).next(Cell.SW) = cells(2)
+ cells(2).next(Cell.E) = cells(4)
+ cells(4).next(Cell.W) = cells(2)
+ cells(4).next(Cell.NW) = cells(3)
+ cells(3).next(Cell.SE) = cells(4)
+ }
+
+/*
+ def print() = {
+ Console.println("Piece # " + number)
+ Console.println("cell\tNW NE W E SW SE")
+ for (i <- Iterator.range(0,Piece.size)){
+ Console.print(i + "\t")
+ for (j <- Iterator.range(0,Cell.sides)){
+ val c = cells(i).next(j)
+ if (c == null)
+ Console.print("-- ")
+ else
+ for (k <- Iterator.range(0,Piece.size)){
+ if (cells(k) == c) Console.printf(" {0,number,0} ")(k)
+ }
+ }
+ Console.println("")
+ }
+ Console.println("")
+ }
+*/
+
+}
+
+
+
+
+// Cell.scala
+
+object Cell {
+ val NW = 0; val NE = 1
+ val W = 2; val E = 3
+ val SW = 4; val SE = 5
+
+ val sides = 6
+}
+
+abstract class Cell {
+ var marked = false
+
+ def mark() = marked = true
+ def unmark() = marked = false
+}
+
+
+
+
+// BoardCell.scala
+
+final class BoardCell(_number: Int) extends Cell {
+ val next = new Array[BoardCell](Cell.sides)
+ val number = _number
+ var piece: Piece = _
+
+ def isEmpty() = piece == null
+ def empty() = piece = null
+
+ def contiguousEmptyCells(): Int = {
+ if (!marked && isEmpty){
+ mark
+ var count = 1
+
+ var i = 0
+ while (i < next.length){
+ if (next(i) != null && next(i).isEmpty)
+ count = count + next(i).contiguousEmptyCells
+ i = i + 1
+ }
+
+ count } else { 0 }
+ }
+}
+
+
+
+
+// PieceCell.scala
+
+final class PieceCell extends Cell {
+ val next = new Array[PieceCell](Cell.sides)
+
+ def flip = {
+ var swap = next(Cell.NE)
+ next(Cell.NE) = next(Cell.NW)
+ next(Cell.NW) = swap
+
+ swap = next(Cell.E)
+ next(Cell.E) = next(Cell.W)
+ next(Cell.W) = swap
+
+ swap = next(Cell.SE)
+ next(Cell.SE) = next(Cell.SW)
+ next(Cell.SW) = swap
+ }
+
+ def rotate = {
+ var swap = next(Cell.E)
+ next(Cell.E) = next(Cell.NE)
+ next(Cell.NE) = next(Cell.NW)
+ next(Cell.NW) = next(Cell.W)
+ next(Cell.W) = next(Cell.SW)
+ next(Cell.SW) = next(Cell.SE)
+ next(Cell.SE) = swap
+ }
+}
+
+
+
+
diff --git a/test/pending/shootout/meteor.scala-3.scala.runner b/test/pending/shootout/meteor.scala-3.scala.runner
new file mode 100644
index 0000000000..dae384311f
--- /dev/null
+++ b/test/pending/shootout/meteor.scala-3.scala.runner
@@ -0,0 +1,3 @@
+object Test extends Application {
+ for(n <- List(0)) meteor.main(Array(n.toString))
+}
diff --git a/test/pending/shootout/meteor.scala-4.scala b/test/pending/shootout/meteor.scala-4.scala
new file mode 100644
index 0000000000..ee036f7fab
--- /dev/null
+++ b/test/pending/shootout/meteor.scala-4.scala
@@ -0,0 +1,587 @@
+/* The Computer Language Shootout
+ http://shootout.alioth.debian.org/
+ contributed by Isaac Gouy
+*/
+
+// Most for-comprehension replaced by while loops
+// BoardCells occupied by each Piece orientation are cached
+// Piece orientations are cached
+
+import scala.collection.mutable._
+
+object meteor {
+ def main(args: Array[String]) = {
+ val solver = new Solver( Integer.parseInt(args(0)) )
+ solver.findSolutions
+ solver.printSolutions
+ }
+}
+
+
+
+
+// Solver.scala
+// import scala.collection.mutable._
+
+final class Solver (n: Int) {
+ private var countdown = n
+ private var first: String = _
+ private var last: String = _
+
+ private val board = new Board()
+
+ val pieces = Array(
+ new Piece(0), new Piece(1), new Piece(2), new Piece(3), new Piece(4),
+ new Piece(5), new Piece(6), new Piece(7), new Piece(8), new Piece(9) )
+
+ val unplaced = new BitSet(pieces.length)
+
+ { unplaced ++= (0 until pieces.length) }
+
+
+ def findSolutions(): Unit = {
+ if (countdown == 0) return
+
+ if (unplaced.size > 0){
+ val emptyCellIndex = board.firstEmptyCellIndex
+
+ var k = 0
+ while (k < pieces.length){
+ if (unplaced.contains(k)){
+ unplaced -= k
+
+ var i = 0
+ while (i < Piece.orientations){
+ val piece = pieces(k).nextOrientation
+
+ var j = 0
+ while (j < Piece.size){
+ if (board.add(j,emptyCellIndex,piece)) {
+
+ if (!shouldPrune) findSolutions
+
+ board.remove(piece)
+ }
+ j = j + 1
+ }
+ i = i + 1
+ }
+ unplaced += k
+ }
+ k = k + 1
+ }
+ }
+ else {
+ puzzleSolved
+ }
+ }
+
+ private def puzzleSolved() = {
+ val b = board.asString
+ if (first == null){
+ first = b; last = b
+ } else {
+ if (b < first){ first = b } else { if (b > last){ last = b } }
+ }
+ countdown = countdown - 1
+ }
+
+ private def shouldPrune(): Boolean = {
+ board.unmark
+ var i = 0
+ while (i < board.cells.length){
+ if (board.cells(i).contiguousEmptyCells % Piece.size != 0) return true
+ i = i + 1
+ }
+ false
+ }
+
+
+ def printSolutions() = {
+
+ def printBoard(s: String) = {
+ var indent = false
+ var i = 0
+ while (i < s.length){
+ if (indent) Console.print(' ')
+ var j = 0
+ while (j < Board.cols){
+ Console.print(s.charAt(i)); Console.print(' ')
+ j = j + 1
+ i = i + 1
+ }
+ Console.print('\n')
+ indent = !indent
+ }
+ Console.print('\n')
+ }
+
+ Console.print(n + " solutions found\n\n")
+ printBoard(first)
+ printBoard(last)
+ }
+
+/*
+ def printPieces() =
+ for (i <- Iterator.range(0,Board.pieces)) pieces(i).print
+*/
+
+}
+
+
+
+// Board.scala
+// import scala.collection.mutable._
+
+object Board {
+ val cols = 5
+ val rows = 10
+ val size = rows * cols
+ val pieces = 10
+ val noFit = new Array[BoardCell](0)
+}
+
+final class Board {
+ val cells = boardCells()
+
+ val cellsPieceWillFill = new Array[BoardCell](Piece.size)
+ var cellCount = 0
+
+ def unmark() = {
+ var i = 0
+ while (i < cells.length){
+ cells(i).unmark
+ i = i + 1
+ }
+ }
+
+ def asString() =
+ new String( cells map(
+ c => if (c.piece == null) '-'.toByte
+ else (c.piece.number + 48).toByte ))
+
+ def firstEmptyCellIndex() = cells.findIndexOf(c => c.isEmpty)
+
+
+ private val cache: Array[Array[Array[Array[ Array[BoardCell] ]]]] =
+ for (i <- Array.range(0,Board.pieces))
+ yield
+ for (j <- Array.range(0,Piece.orientations))
+ yield
+ for (k <- Array.range(0,Piece.size)) // piece cell index
+ yield
+ for (m <- Array.range(0,Board.size)) // board cell index
+ yield (null: BoardCell)
+
+
+ def add(pieceIndex: Int, boardIndex: Int, p: Piece): Boolean = {
+ var a = cache(p.number)(p.orientation)(pieceIndex)(boardIndex)
+
+ cellCount = 0
+ p.unmark
+
+ if (a == null){
+ find(p.cells(pieceIndex), cells(boardIndex))
+
+ if (cellCount != Piece.size){
+ cache(p.number)(p.orientation)(pieceIndex)(boardIndex) = Board.noFit
+ return false
+ }
+
+ a = cellsPieceWillFill .filter(c => true)
+ cache(p.number)(p.orientation)(pieceIndex)(boardIndex) = a
+ }
+ else {
+ if (a == Board.noFit) return false
+ }
+
+ var i = 0
+ while (i < a.length){
+ if (!a(i).isEmpty) return false
+ i = i + 1
+ }
+
+ i = 0
+ while (i < a.length){
+ a(i).piece = p
+ i = i + 1
+ }
+
+ true
+ }
+
+
+ def remove(piece: Piece) = {
+ var i = 0
+ while (i < cells.length){
+ if (cells(i).piece == piece) cells(i).empty
+ i = i + 1
+ }
+ }
+
+
+ private def find(p: PieceCell, b: BoardCell): Unit = {
+ if (p != null && !p.marked && b != null){
+ cellsPieceWillFill(cellCount) = b
+ cellCount = cellCount + 1
+ p.mark
+
+ var i = 0
+ while (i < Cell.sides){
+ find(p.next(i), b.next(i))
+ i = i + 1
+ }
+ }
+ }
+
+
+ private def boardCells() = {
+ val a = for (i <- Array.range(0,Board.size)) yield new BoardCell(i)
+ val m = (Board.size / Board.cols) - 1
+
+ for (i <- Iterator.range(0,a.length)){
+ val row = i / Board.cols
+ val isFirst = i % Board.cols == 0
+ val isLast = (i+1) % Board.cols == 0
+ val c = a(i)
+
+ if (row % 2 == 1) {
+ if (!isLast) c.next(Cell.NE) = a(i-(Board.cols-1))
+ c.next(Cell.NW) = a(i-Board.cols)
+ if (row != m) {
+ if (!isLast) c.next(Cell.SE) = a(i+(Board.cols+1))
+ c.next(Cell.SW) = a(i+Board.cols)
+ }
+ } else {
+ if (row != 0) {
+ if (!isFirst) c.next(Cell.NW) = a(i-(Board.cols+1))
+ c.next(Cell.NE) = a(i-Board.cols)
+ }
+ if (row != m) {
+ if (!isFirst) c.next(Cell.SW) = a(i+(Board.cols-1))
+ c.next(Cell.SE) = a(i+Board.cols)
+ }
+ }
+ if (!isFirst) c.next(Cell.W) = a(i-1)
+ if (!isLast) c.next(Cell.E) = a(i+1)
+ }
+ a
+ }
+
+
+/*
+// Printing all the board cells and their neighbours
+// helps check that they are connected properly
+
+ def printBoardCellsAndNeighbours() = {
+ Console.println("cell\tNW NE W E SW SE")
+ for (i <- Iterator.range(0,Board.size)){
+ Console.print(i + "\t")
+ for (j <- Iterator.range(0,Cell.sides)){
+ val c = cells(i).next(j)
+ if (c == null)
+ Console.print("-- ")
+ else
+ Console.printf("{0,number,00} ")(c.number)
+ }
+ Console.println("")
+ }
+ Console.println("")
+ }
+*/
+
+}
+
+
+
+
+// Piece.scala
+
+object Piece {
+ val size = 5
+ val rotations = Cell.sides
+ val flips = 2
+ val orientations = rotations * flips
+}
+
+final class Piece(_number: Int) {
+ val number = _number
+
+ def unmark() = {
+ val c = cache(orientation)
+ var i = 0
+ while (i < c.length){
+ c(i).unmark
+ i = i + 1
+ }
+ }
+
+ def cells = cache(orientation)
+
+ private val cache =
+ for (i <- Array.range(0,Piece.orientations))
+ yield pieceOrientation(i)
+
+ var orientation = 0
+
+ def nextOrientation() = {
+ orientation = (orientation + 1) % Piece.orientations
+ this
+ }
+
+
+ private def pieceOrientation(k: Int) = {
+ val cells = for (i <- Array.range(0,Piece.size)) yield new PieceCell()
+ makePiece(number,cells)
+
+ var i = 0
+ while (i < k){
+ if (i % Piece.rotations == 0)
+ for (c <- cells) c.flip
+ else
+ for (c <- cells) c.rotate
+
+ i = i + 1
+ }
+ cells
+ }
+
+ private def makePiece(number: Int, cells: Array[PieceCell]) = {
+ number match {
+ case 0 => make0(cells)
+ case 1 => make1(cells)
+ case 2 => make2(cells)
+ case 3 => make3(cells)
+ case 4 => make4(cells)
+ case 5 => make5(cells)
+ case 6 => make6(cells)
+ case 7 => make7(cells)
+ case 8 => make8(cells)
+ case 9 => make9(cells)
+ }
+ }
+
+ private def make0(a: Array[PieceCell]) = {
+ a(0).next(Cell.E) = a(1)
+ a(1).next(Cell.W) = a(0)
+ a(1).next(Cell.E) = a(2)
+ a(2).next(Cell.W) = a(1)
+ a(2).next(Cell.E) = a(3)
+ a(3).next(Cell.W) = a(2)
+ a(3).next(Cell.SE) = a(4)
+ a(4).next(Cell.NW) = a(3)
+ }
+
+ private def make1(a: Array[PieceCell]) = {
+ a(0).next(Cell.SE) = a(1)
+ a(1).next(Cell.NW) = a(0)
+ a(1).next(Cell.SW) = a(2)
+ a(2).next(Cell.NE) = a(1)
+ a(2).next(Cell.W) = a(3)
+ a(3).next(Cell.E) = a(2)
+ a(3).next(Cell.SW) = a(4)
+ a(4).next(Cell.NE) = a(3)
+ }
+
+ private def make2(a: Array[PieceCell]) = {
+ a(0).next(Cell.W) = a(1)
+ a(1).next(Cell.E) = a(0)
+ a(1).next(Cell.SW) = a(2)
+ a(2).next(Cell.NE) = a(1)
+ a(2).next(Cell.SE) = a(3)
+ a(3).next(Cell.NW) = a(2)
+ a(3).next(Cell.SE) = a(4)
+ a(4).next(Cell.NW) = a(3)
+ }
+
+ private def make3(a: Array[PieceCell]) = {
+ a(0).next(Cell.SW) = a(1)
+ a(1).next(Cell.NE) = a(0)
+ a(1).next(Cell.W) = a(2)
+ a(2).next(Cell.E) = a(1)
+ a(1).next(Cell.SW) = a(3)
+ a(3).next(Cell.NE) = a(1)
+ a(2).next(Cell.SE) = a(3)
+ a(3).next(Cell.NW) = a(2)
+ a(3).next(Cell.SE) = a(4)
+ a(4).next(Cell.NW) = a(3)
+ }
+
+ private def make4(a: Array[PieceCell]) = {
+ a(0).next(Cell.SE) = a(1)
+ a(1).next(Cell.NW) = a(0)
+ a(1).next(Cell.SW) = a(2)
+ a(2).next(Cell.NE) = a(1)
+ a(1).next(Cell.E) = a(3)
+ a(3).next(Cell.W) = a(1)
+ a(3).next(Cell.SE) = a(4)
+ a(4).next(Cell.NW) = a(3)
+ }
+
+ private def make5(a: Array[PieceCell]) = {
+ a(0).next(Cell.SW) = a(1)
+ a(1).next(Cell.NE) = a(0)
+ a(0).next(Cell.SE) = a(2)
+ a(2).next(Cell.NW) = a(0)
+ a(1).next(Cell.SE) = a(3)
+ a(3).next(Cell.NW) = a(1)
+ a(2).next(Cell.SW) = a(3)
+ a(3).next(Cell.NE) = a(2)
+ a(3).next(Cell.SW) = a(4)
+ a(4).next(Cell.NE) = a(3)
+ }
+
+ private def make6(a: Array[PieceCell]) = {
+ a(0).next(Cell.SW) = a(1)
+ a(1).next(Cell.NE) = a(0)
+ a(2).next(Cell.SE) = a(1)
+ a(1).next(Cell.NW) = a(2)
+ a(1).next(Cell.SE) = a(3)
+ a(3).next(Cell.NW) = a(1)
+ a(3).next(Cell.SW) = a(4)
+ a(4).next(Cell.NE) = a(3)
+ }
+
+ private def make7(a: Array[PieceCell]) = {
+ a(0).next(Cell.SE) = a(1)
+ a(1).next(Cell.NW) = a(0)
+ a(0).next(Cell.SW) = a(2)
+ a(2).next(Cell.NE) = a(0)
+ a(2).next(Cell.SW) = a(3)
+ a(3).next(Cell.NE) = a(2)
+ a(3).next(Cell.SE) = a(4)
+ a(4).next(Cell.NW) = a(3)
+ }
+
+ private def make8(a: Array[PieceCell]) = {
+ a(0).next(Cell.E) = a(1)
+ a(1).next(Cell.W) = a(0)
+ a(1).next(Cell.E) = a(2)
+ a(2).next(Cell.W) = a(1)
+ a(2).next(Cell.NE) = a(3)
+ a(3).next(Cell.SW) = a(2)
+ a(3).next(Cell.E) = a(4)
+ a(4).next(Cell.W) = a(3)
+ }
+
+ private def make9(a: Array[PieceCell]) = {
+ a(0).next(Cell.E) = a(1)
+ a(1).next(Cell.W) = a(0)
+ a(1).next(Cell.E) = a(2)
+ a(2).next(Cell.W) = a(1)
+ a(2).next(Cell.NE) = a(3)
+ a(3).next(Cell.SW) = a(2)
+ a(2).next(Cell.E) = a(4)
+ a(4).next(Cell.W) = a(2)
+ a(4).next(Cell.NW) = a(3)
+ a(3).next(Cell.SE) = a(4)
+ }
+
+/*
+ def print() = {
+ Console.println("Piece # " + number)
+ Console.println("cell\tNW NE W E SW SE")
+ for (i <- Iterator.range(0,Piece.size)){
+ Console.print(i + "\t")
+ for (j <- Iterator.range(0,Cell.sides)){
+ val c = cells(i).next(j)
+ if (c == null)
+ Console.print("-- ")
+ else
+ for (k <- Iterator.range(0,Piece.size)){
+ if (cells(k) == c) Console.printf(" {0,number,0} ")(k)
+ }
+ }
+ Console.println("")
+ }
+ Console.println("")
+ }
+*/
+}
+
+
+
+
+
+// Cell.scala
+
+object Cell {
+ val NW = 0; val NE = 1
+ val W = 2; val E = 3
+ val SW = 4; val SE = 5
+
+ val sides = 6
+}
+
+abstract class Cell {
+ var marked = false
+
+ def mark() = marked = true
+ def unmark() = marked = false
+}
+
+
+
+
+// BoardCell.scala
+
+final class BoardCell(_number: Int) extends Cell {
+ val next = new Array[BoardCell](Cell.sides)
+ val number = _number
+ var piece: Piece = _
+
+ def isEmpty() = piece == null
+ def empty() = piece = null
+
+ def contiguousEmptyCells(): Int = {
+ if (!marked && isEmpty){
+ mark
+ var count = 1
+
+ var i = 0
+ while (i < next.length){
+ if (next(i) != null && next(i).isEmpty)
+ count = count + next(i).contiguousEmptyCells
+ i = i + 1
+ }
+
+ count } else { 0 }
+ }
+}
+
+
+
+
+// PieceCell.scala
+
+final class PieceCell extends Cell {
+ val next = new Array[PieceCell](Cell.sides)
+
+ def flip = {
+ var swap = next(Cell.NE)
+ next(Cell.NE) = next(Cell.NW)
+ next(Cell.NW) = swap
+
+ swap = next(Cell.E)
+ next(Cell.E) = next(Cell.W)
+ next(Cell.W) = swap
+
+ swap = next(Cell.SE)
+ next(Cell.SE) = next(Cell.SW)
+ next(Cell.SW) = swap
+ }
+
+ def rotate = {
+ var swap = next(Cell.E)
+ next(Cell.E) = next(Cell.NE)
+ next(Cell.NE) = next(Cell.NW)
+ next(Cell.NW) = next(Cell.W)
+ next(Cell.W) = next(Cell.SW)
+ next(Cell.SW) = next(Cell.SE)
+ next(Cell.SE) = swap
+ }
+}
+
+
+
+
diff --git a/test/pending/shootout/meteor.scala-4.scala.runner b/test/pending/shootout/meteor.scala-4.scala.runner
new file mode 100644
index 0000000000..dae384311f
--- /dev/null
+++ b/test/pending/shootout/meteor.scala-4.scala.runner
@@ -0,0 +1,3 @@
+object Test extends Application {
+ for(n <- List(0)) meteor.main(Array(n.toString))
+}
diff --git a/test/pending/shootout/meteor.scala.runner b/test/pending/shootout/meteor.scala.runner
new file mode 100644
index 0000000000..dae384311f
--- /dev/null
+++ b/test/pending/shootout/meteor.scala.runner
@@ -0,0 +1,3 @@
+object Test extends Application {
+ for(n <- List(0)) meteor.main(Array(n.toString))
+}
diff --git a/test/pending/shootout/methcall.scala b/test/pending/shootout/methcall.scala
new file mode 100644
index 0000000000..9f7234c72d
--- /dev/null
+++ b/test/pending/shootout/methcall.scala
@@ -0,0 +1,58 @@
+/* The Computer Language Shootout
+ http://shootout.alioth.debian.org/
+ contributed by Isaac Gouy (Scala novice)
+*/
+
+object methcall {
+ def main(args: Array[String]) = {
+ var n = toPositiveInt(args);
+ var v: Boolean = false
+
+ val toggle = new Toggle(true);
+ for (i <- Iterator.range(1,n)) v = toggle.activate.value;
+
+ Console println( toggle.activate.value );
+
+ val ntoggle = new NToggle(true,3);
+ for (i <- Iterator.range(1,n)) v = ntoggle.activate.value;
+
+ Console println( ntoggle.activate.value );
+ }
+
+
+ private def toPositiveInt(s: Array[String]) = {
+ val i =
+ try { Integer.parseInt(s(0)); }
+ catch { case _ => 1 }
+ if (i>0) i; else 1;
+ }
+}
+
+
+private class Toggle(b: Boolean) {
+ var state = b;
+
+ def value = state;
+
+ def activate = {
+ state = !state;
+ this
+ }
+}
+
+
+private class NToggle(b: Boolean, trigger: Int)
+extends Toggle(b) {
+
+ val toggleTrigger = trigger;
+ var count = 0;
+
+ override def activate = {
+ count = count + 1;
+ if (count >= toggleTrigger) {
+ state = !state;
+ count = 0;
+ }
+ this
+ }
+}
diff --git a/test/pending/shootout/methcall.scala.runner b/test/pending/shootout/methcall.scala.runner
new file mode 100644
index 0000000000..555413cc6c
--- /dev/null
+++ b/test/pending/shootout/methcall.scala.runner
@@ -0,0 +1,3 @@
+object Test extends Application {
+ for(n <- List(100000,400000,700000,1000000)) methcall.main(Array(n.toString))
+}
diff --git a/test/pending/shootout/nsieve.scala-4.check b/test/pending/shootout/nsieve.scala-4.check
new file mode 100644
index 0000000000..5ae0440a5a
--- /dev/null
+++ b/test/pending/shootout/nsieve.scala-4.check
@@ -0,0 +1,9 @@
+Primes up to 1280000 98610
+Primes up to 640000 52074
+Primes up to 320000 27608
+Primes up to 2560000 187134
+Primes up to 1280000 98610
+Primes up to 640000 52074
+Primes up to 5120000 356244
+Primes up to 2560000 187134
+Primes up to 1280000 98610
diff --git a/test/pending/shootout/nsieve.scala-4.scala b/test/pending/shootout/nsieve.scala-4.scala
new file mode 100644
index 0000000000..741eb80398
--- /dev/null
+++ b/test/pending/shootout/nsieve.scala-4.scala
@@ -0,0 +1,45 @@
+/* The Computer Language Shootout
+ http://shootout.alioth.debian.org/
+ contributed by Isaac Gouy
+*/
+
+
+object nsieve {
+
+ def nsieve(m: Int, isPrime: Array[Boolean]) = {
+ for (i <- List.range(2, m)) isPrime(i) = true
+ var count = 0
+
+ for (i <- List.range(2, m)){
+ if (isPrime(i)){
+ var k = i+i
+ while (k < m){ isPrime(k) = false; k = k+i }
+ count = count + 1
+ }
+ }
+ count
+ }
+
+
+ def main(args: Array[String]) = {
+ val n = Integer.parseInt(args(0))
+ val m = (1<<n)*10000
+ val flags = new Array[Boolean](m+1)
+
+ def printPrimes(m: Int) = {
+
+ def pad(i: Int, width: Int) = {
+ val s = i.toString
+ List.range(0, width - s.length)
+ .map((i) => " ") .foldLeft("")((a,b) => a+b) + s
+ }
+
+ Console.println("Primes up to " + pad(m,8) + pad(nsieve(m,flags),9))
+ }
+
+
+ printPrimes(m)
+ printPrimes( (1<<n-1)*10000 )
+ printPrimes( (1<<n-2)*10000 )
+ }
+}
diff --git a/test/pending/shootout/nsieve.scala-4.scala.runner b/test/pending/shootout/nsieve.scala-4.scala.runner
new file mode 100644
index 0000000000..67be6d5844
--- /dev/null
+++ b/test/pending/shootout/nsieve.scala-4.scala.runner
@@ -0,0 +1,3 @@
+object Test extends Application {
+ for(n <- List(7,8,9)) nsieve.main(Array(n.toString))
+}
diff --git a/test/pending/shootout/pidigits.check b/test/pending/shootout/pidigits.check
new file mode 100644
index 0000000000..ad4dc9962b
--- /dev/null
+++ b/test/pending/shootout/pidigits.check
@@ -0,0 +1,100 @@
+3141592653 :10
+5897932384 :20
+6264338327 :30
+9502884197 :40
+1693993751 :50
+0582097494 :60
+4592307816 :70
+4062862089 :80
+9862803482 :90
+5342117067 :100
+9821480865 :110
+1328230664 :120
+7093844609 :130
+5505822317 :140
+2535940812 :150
+8481117450 :160
+2841027019 :170
+3852110555 :180
+9644622948 :190
+9549303819 :200
+6442881097 :210
+5665933446 :220
+1284756482 :230
+3378678316 :240
+5271201909 :250
+1456485669 :260
+2346034861 :270
+0454326648 :280
+2133936072 :290
+6024914127 :300
+3724587006 :310
+6063155881 :320
+7488152092 :330
+0962829254 :340
+0917153643 :350
+6789259036 :360
+0011330530 :370
+5488204665 :380
+2138414695 :390
+1941511609 :400
+4330572703 :410
+6575959195 :420
+3092186117 :430
+3819326117 :440
+9310511854 :450
+8074462379 :460
+9627495673 :470
+5188575272 :480
+4891227938 :490
+1830119491 :500
+2983367336 :510
+2440656643 :520
+0860213949 :530
+4639522473 :540
+7190702179 :550
+8609437027 :560
+7053921717 :570
+6293176752 :580
+3846748184 :590
+6766940513 :600
+2000568127 :610
+1452635608 :620
+2778577134 :630
+2757789609 :640
+1736371787 :650
+2146844090 :660
+1224953430 :670
+1465495853 :680
+7105079227 :690
+9689258923 :700
+5420199561 :710
+1212902196 :720
+0864034418 :730
+1598136297 :740
+7477130996 :750
+0518707211 :760
+3499999983 :770
+7297804995 :780
+1059731732 :790
+8160963185 :800
+9502445945 :810
+5346908302 :820
+6425223082 :830
+5334468503 :840
+5261931188 :850
+1710100031 :860
+3783875288 :870
+6587533208 :880
+3814206171 :890
+7766914730 :900
+3598253490 :910
+4287554687 :920
+3115956286 :930
+3882353787 :940
+5937519577 :950
+8185778053 :960
+2171226806 :970
+6130019278 :980
+7661119590 :990
+9216420198 :1000
diff --git a/test/pending/shootout/pidigits.scala b/test/pending/shootout/pidigits.scala
new file mode 100644
index 0000000000..b0becafda8
--- /dev/null
+++ b/test/pending/shootout/pidigits.scala
@@ -0,0 +1,69 @@
+/* ------------------------------------------------------------------ */
+/* The Computer Language Shootout */
+/* http://shootout.alioth.debian.org/ */
+/* */
+/* Contributed by Anthony Borla */
+/* ------------------------------------------------------------------ */
+
+object pidigits
+{
+ def main(args: Array[String]): Unit =
+ {
+ val N: Int = Integer.parseInt(args(0)); var i: Int = 10
+
+ while (i <= N)
+ {
+ System.out.println(pi_digits(10) + "\t:" + i)
+ i = i + 10
+ }
+
+ i = i - 10
+
+ if (i < N)
+ {
+ System.out.println(pi_digits(N - i) + "\t:" + N)
+ }
+ }
+
+ def compose(a: Array[BigInt], b: Array[BigInt]): Array[BigInt] =
+ {
+ return Array(a(0) * b(0),
+ a(0) * b(1) + a(1) * b(3),
+ a(2) * b(0) + a(3) * b(2),
+ a(2) * b(1) + a(3) * b(3))
+ }
+
+ def extract(a: Array[BigInt], j: Int): BigInt =
+ {
+ return (a(0) * j + a(1)) / (a(2) * j + a(3))
+ }
+
+ def pi_digits(c: Int): String =
+ {
+ val r: StringBuffer = new StringBuffer(); var i: Int = 0
+
+ while (i < c)
+ {
+ var y: BigInt = extract(Z, 3)
+
+ while (y != extract(Z, 4))
+ {
+ K = K + 1; Z = compose(Z, Array(K, 4 * K + 2, 0, 2 * K + 1))
+ y = extract(Z, 3)
+ }
+
+// Z = compose(Array(10, (-y) * 10, 0, 1), Z)
+
+ Z = compose(Array(10, y * (-10), 0, 1), Z)
+
+ r.append(y); i = i + 1;
+ }
+
+ return r.toString()
+ }
+
+ var K: Int = 0
+
+ var Z: Array[BigInt] = Array(1, 0, 0, 1)
+}
+
diff --git a/test/pending/shootout/pidigits.scala.runner b/test/pending/shootout/pidigits.scala.runner
new file mode 100644
index 0000000000..4bf5a8bde9
--- /dev/null
+++ b/test/pending/shootout/pidigits.scala.runner
@@ -0,0 +1,3 @@
+object Test extends Application {
+ for(n <- List(600,800,1000)) pidigits.main(Array(n.toString))
+}
diff --git a/test/pending/shootout/prodcons.scala b/test/pending/shootout/prodcons.scala
new file mode 100644
index 0000000000..d48d3e94d8
--- /dev/null
+++ b/test/pending/shootout/prodcons.scala
@@ -0,0 +1,64 @@
+/* The Computer Language Shootout
+ http://shootout.alioth.debian.org/
+ contributed by Isaac Gouy (Scala novice)
+*/
+
+import concurrent.SyncVar;
+import concurrent.ops._;
+
+object prodcons {
+ def main(args: Array[String]) = {
+ val n = toPositiveInt(args);
+ val buffer = new SharedBuffer();
+ var p = 0;
+ var c = 0;
+ val cDone = new SyncVar[Boolean];
+
+ spawn {
+ while(p<n) { p=p+1; buffer put(p); }
+ }
+
+ spawn {
+ var v: Int = _;
+ while(c<n) { c=c+1; v = buffer.get; }
+ cDone set true;
+ }
+
+ cDone.get;
+ Console println(p + " " + c);
+ }
+
+
+ private def toPositiveInt(s: Array[String]) = {
+ val i =
+ try { Integer.parseInt(s(0)); }
+ catch { case _ => 1 }
+ if (i>0) i; else 1;
+ }
+}
+
+
+private class SharedBuffer() {
+ var contents: Int = _;
+ var available = false;
+
+ def get = synchronized {
+ while (available == false) wait();
+ available = false;
+ // Console println("\t" + "get " + contents);
+ notifyAll();
+ contents
+ }
+
+ def put(value: Int) = synchronized {
+ while (available == true) wait();
+ contents = value;
+ available = true;
+ // Console println("put " + value);
+ notifyAll();
+ }
+}
+
+
+
+
diff --git a/test/pending/shootout/prodcons.scala.runner b/test/pending/shootout/prodcons.scala.runner
new file mode 100644
index 0000000000..75faf8ca6e
--- /dev/null
+++ b/test/pending/shootout/prodcons.scala.runner
@@ -0,0 +1,3 @@
+object Test extends Application {
+ for(n <- List(30000,70000,100000,150000)) prodcons.main(Array(n.toString))
+}
diff --git a/test/pending/shootout/random.scala b/test/pending/shootout/random.scala
new file mode 100644
index 0000000000..0a86a35637
--- /dev/null
+++ b/test/pending/shootout/random.scala
@@ -0,0 +1,32 @@
+/* The Computer Language Shootout
+ http://shootout.alioth.debian.org/
+ contributed by Isaac Gouy (Scala novice)
+*/
+
+object random {
+ def main(args: Array[String]) = {
+ var n = toPositiveInt(args);
+ var result: Double = 0
+
+ while (n>0) { result=generate(100.0); n=n-1; }
+
+ Console.printf("{0,number,#.000000000}\n", result)
+ }
+
+ private val IM = 139968;
+ private val IA = 3877;
+ private val IC = 29573;
+ private var seed = 42;
+
+ def generate(max: Double) = {
+ seed = (seed * IA + IC) % IM;
+ max * seed / IM;
+ }
+
+ private def toPositiveInt(s: Array[String]) = {
+ val i =
+ try { Integer.parseInt(s(0)); }
+ catch { case _ => 1 }
+ if (i>0) i; else 1;
+ }
+}
diff --git a/test/pending/shootout/random.scala.runner b/test/pending/shootout/random.scala.runner
new file mode 100644
index 0000000000..11cbeef0f6
--- /dev/null
+++ b/test/pending/shootout/random.scala.runner
@@ -0,0 +1,3 @@
+object Test extends Application {
+ for(n <- List(9000,300000,600000,900000)) random.main(Array(n.toString))
+}
diff --git a/test/pending/shootout/revcomp.scala-2.check b/test/pending/shootout/revcomp.scala-2.check
new file mode 100644
index 0000000000..14d792ade8
--- /dev/null
+++ b/test/pending/shootout/revcomp.scala-2.check
@@ -0,0 +1,171 @@
+>ONE Homo sapiens alu
+CGGAGTCTCGCTCTGTCGCCCAGGCTGGAGTGCAGTGGCGCGATCTCGGCTCACTGCAAC
+CTCCGCCTCCCGGGTTCAAGCGATTCTCCTGCCTCAGCCTCCCGAGTAGCTGGGATTACA
+GGCGCGCGCCACCACGCCCGGCTAATTTTTGTATTTTTAGTAGAGACGGGGTTTCACCAT
+GTTGGCCAGGCTGGTCTCGAACTCCTGACCTCAGGTGATCCGCCCGCCTCGGCCTCCCAA
+AGTGCTGGGATTACAGGCGTGAGCCACCGCGCCCGGCCTTTTTGAGACGGAGTCTCGCTC
+TGTCGCCCAGGCTGGAGTGCAGTGGCGCGATCTCGGCTCACTGCAACCTCCGCCTCCCGG
+GTTCAAGCGATTCTCCTGCCTCAGCCTCCCGAGTAGCTGGGATTACAGGCGCGCGCCACC
+ACGCCCGGCTAATTTTTGTATTTTTAGTAGAGACGGGGTTTCACCATGTTGGCCAGGCTG
+GTCTCGAACTCCTGACCTCAGGTGATCCGCCCGCCTCGGCCTCCCAAAGTGCTGGGATTA
+CAGGCGTGAGCCACCGCGCCCGGCCTTTTTGAGACGGAGTCTCGCTCTGTCGCCCAGGCT
+GGAGTGCAGTGGCGCGATCTCGGCTCACTGCAACCTCCGCCTCCCGGGTTCAAGCGATTC
+TCCTGCCTCAGCCTCCCGAGTAGCTGGGATTACAGGCGCGCGCCACCACGCCCGGCTAAT
+TTTTGTATTTTTAGTAGAGACGGGGTTTCACCATGTTGGCCAGGCTGGTCTCGAACTCCT
+GACCTCAGGTGATCCGCCCGCCTCGGCCTCCCAAAGTGCTGGGATTACAGGCGTGAGCCA
+CCGCGCCCGGCCTTTTTGAGACGGAGTCTCGCTCTGTCGCCCAGGCTGGAGTGCAGTGGC
+GCGATCTCGGCTCACTGCAACCTCCGCCTCCCGGGTTCAAGCGATTCTCCTGCCTCAGCC
+TCCCGAGTAGCTGGGATTACAGGCGCGCGCCACCACGCCCGGCTAATTTTTGTATTTTTA
+GTAGAGACGGGGTTTCACCATGTTGGCCAGGCTGGTCTCGAACTCCTGACCTCAGGTGAT
+CCGCCCGCCTCGGCCTCCCAAAGTGCTGGGATTACAGGCGTGAGCCACCGCGCCCGGCCT
+TTTTGAGACGGAGTCTCGCTCTGTCGCCCAGGCTGGAGTGCAGTGGCGCGATCTCGGCTC
+ACTGCAACCTCCGCCTCCCGGGTTCAAGCGATTCTCCTGCCTCAGCCTCCCGAGTAGCTG
+GGATTACAGGCGCGCGCCACCACGCCCGGCTAATTTTTGTATTTTTAGTAGAGACGGGGT
+TTCACCATGTTGGCCAGGCTGGTCTCGAACTCCTGACCTCAGGTGATCCGCCCGCCTCGG
+CCTCCCAAAGTGCTGGGATTACAGGCGTGAGCCACCGCGCCCGGCCTTTTTGAGACGGAG
+TCTCGCTCTGTCGCCCAGGCTGGAGTGCAGTGGCGCGATCTCGGCTCACTGCAACCTCCG
+CCTCCCGGGTTCAAGCGATTCTCCTGCCTCAGCCTCCCGAGTAGCTGGGATTACAGGCGC
+GCGCCACCACGCCCGGCTAATTTTTGTATTTTTAGTAGAGACGGGGTTTCACCATGTTGG
+CCAGGCTGGTCTCGAACTCCTGACCTCAGGTGATCCGCCCGCCTCGGCCTCCCAAAGTGC
+TGGGATTACAGGCGTGAGCCACCGCGCCCGGCCTTTTTGAGACGGAGTCTCGCTCTGTCG
+CCCAGGCTGGAGTGCAGTGGCGCGATCTCGGCTCACTGCAACCTCCGCCTCCCGGGTTCA
+AGCGATTCTCCTGCCTCAGCCTCCCGAGTAGCTGGGATTACAGGCGCGCGCCACCACGCC
+CGGCTAATTTTTGTATTTTTAGTAGAGACGGGGTTTCACCATGTTGGCCAGGCTGGTCTC
+GAACTCCTGACCTCAGGTGATCCGCCCGCCTCGGCCTCCCAAAGTGCTGGGATTACAGGC
+GTGAGCCACCGCGCCCGGCC
+>TWO IUB ambiguity codes
+TAGGDHACHATCRGTRGVTGAGWTATGYTGCTGTCABACDWVTRTAAGAVVAGATTTNDA
+GASMTCTGCATBYTTCAAKTTACMTATTACTTCATARGGYACMRTGTTTTYTATACVAAT
+TTCTAKGDACKADACTATATNTANTCGTTCACGBCGYSCBHTANGGTGATCGTAAAGTAA
+CTATBAAAAGATSTGWATBCSGAKHTTABBAACGTSYCATGCAAVATKTSKTASCGGAAT
+WVATTTNTCCTTCTTCTTDDAGTGGTTGGATACVGTTAYMTMTBTACTTTHAGCTAGBAA
+AAGAGKAAGTTRATWATCAGATTMDDTTTAAAVAAATATTKTCYTAAATTVCNKTTRACG
+ADTATATTTATGATSADSCAATAWAGCGRTAGTGTAAGTGACVGRADYGTGCTACHVSDT
+CTVCARCSYTTAATATARAAAATTTAATTTACDAATTGBACAGTAYAABATBTGCAGBVG
+TGATGGDCAAAATBNMSTTABKATTGGSTCCTAGBTTACTTGTTTAGTTTATHCGATSTA
+AAGTCGAKAAASTGTTTTAWAKCAGATATACTTTTMTTTTGBATAGAGGAGCMATGATRA
+AAGGNCAYDCCDDGAAAGTHGBTAATCKYTBTACBGTBCTTTTTGDTAASSWTAAWAARA
+TTGGCTAAGWGRADTYACATAGCTCBTAGATAWAGCAATNGTATMATGTTKMMAGTAWTC
+CCNTSGAAWATWCAAAAMACTGAADNTYGATNAATCCGAYWNCTAACGTTAGAGDTTTTC
+ATCTGGKRTAVGAABVCTGWGBTCTDVGKATTBTCTAAGGVADAAAVWTCTAGGGGAGGG
+TTAGAACAATTAAHTAATNAAATGCATKATCTAAYRTDTCAGSAYTTYHGATRTTWAVTA
+BGNTCDACAGBCCRCAGWCRTCABTGMMAWGMCTCAACCGATRTGBCAVAATCGTDWDAA
+CAYAWAATWCTGGTAHCCCTAAGATAACSCTTAGTGSAACAWTBGTCDTTDGACWDBAAC
+HTTTNGSKTYYAAYGGATNTGATTTAARTTAMBAATCTAAGTBTCATYTAACTTADTGTT
+TCGATACGAAHGGCYATATACCWDTKYATDCSHTDTCAAAATGTGBACTGSCCVGATGTA
+TCMMAGCCTTDAAABAATGAAGAGTAACTHATMGVTTAATAACCCGGTTVSANTGCAATT
+GTGAGATTTAMGTTTAMAAYGCTGACAYAAAAAGGCACAMYTAAGVGGCTGGAABVTACG
+GATTSTYGTBVAKTATWACCGTGTKAGTDTGTATGTTTAAAGGAAAAAGTAACATARAAA
+GGTYCAMNYAAABTATAGNTSATANAGTCATCCTATWADKAACTRGTMSACDGTATSAYT
+AAHSHGTAABYGACTYTATADTGSTATAGAGAAATCGNTAAAGGAAATCAGTTGTNCYMV
+TNACDRTATBNATATASTAGAAMSCGGGANRCKKMCAAACATTNAGTCTRMAATBMTACC
+CGTACTTCTBGDSYAATWGAAAATGACADDCHAKAAAYATATTKTTTTCACANACWAGAA
+AKATCCTTATTAYKHKCTAAACARTATTTTDATBTVWCYGCAATACTAGGKAAASTTDGA
+MGGCHTTHAATVCAHDRYAGGRCTATACGTCMAGAGAGCTBTHGNACARTCCBDCTAAGA
+GCGGCTTTARTAAAGAATCCNAGTAWBTGACTTGAATTACWTVACAGAAABCAATNAAAC
+CGTNTRANTTGAYCMAWBADTANABRGGTKTHTWTAGTTVCTMBKTAGMTVKCCAGCANT
+TVAGSWTTAGCCGCRHTTTCCTTHNTATTAAGAAGAATAGGMTRAARTCTABGTACDTTT
+TATAAVDHAHTATAGATCCTAGTAAGYTWATDWCATGAGGGATAGTAAMDMNGBASTWAM
+TSTATRBAYDABATGTATATYCGCACTGTTTTAACMCWBTATAWAGTATBTSTATVTTAR
+CCTMTTAAKADATCAACTAATYTSVTAKGDATTATGCKTCAYCAKAATACTTKAANGAGT
+ATTSDAGATCGGAAATACTTAAYAAVGTATMCGCTTGTGTDCTAATYTATTTTATTTWAA
+CAGWRCTATGTAGMTGTTTGTTYKTNGTTKTCAGAACNTRACCTACKTGSRATGTGGGGG
+CTGTCATTAAGTAAATNGSTTABCCCCTCGCAGCTCWHTCGCGAAGCAVATGCKACGHCA
+ACAKTTAATAACASAAADATTWNYTGTAATTGTTCGTMHACHTWATGTGCWTTTTGAAHY
+ACTTTGTAYAMSAAACTTAADAAATATAGTABMATATYAATGSGGTAGTTTGTGTBYGGT
+TWSGSVGWMATTDMTCCWWCABTCSVACAGBAATGTTKATBGTCAATAATCTTCTTAAAC
+ARVAATHAGYBWCTRWCABGTWWAATCTAAGTCASTAAAKTAAGVKBAATTBGABACGTA
+AGGTTAAATAAAAACTRMDTWBCTTTTTAATAAAAGATMGCCTACKAKNTBAGYRASTGT
+ASSTCGTHCGAAKTTATTATATTYTTTGTAGAACATGTCAAAACTWTWTHGKTCCYAATA
+AAGTGGAYTMCYTAARCSTAAATWAKTGAATTTRAGTCTSSATACGACWAKAASATDAAA
+TGYYACTSAACAAHAKTSHYARGASTATTATTHAGGYGGASTTTBGAKGATSANAACACD
+TRGSTTRAAAAAAAACAAGARTCVTAGTAAGATAWATGVHAAKATWGAAAAGTYAHVTAC
+TCTGRTGTCAWGATRVAAKTCGCAAVCGASWGGTTRTCSAMCCTAACASGWKKAWDAATG
+ACRCBACTATGTGTCTTCAAAHGSCTATATTTCGTVWAGAAGTAYCKGARAKSGKAGTAN
+TTTCYACATWATGTCTAAAADMDTWCAATSTKDACAMAADADBSAAATAGGCTHAHAGTA
+CGACVGAATTATAAAGAHCCVAYHGHTTTACATSTTTATGNCCMTAGCATATGATAVAAG
+>THREE Homo sapiens frequency
+ATATTTATCTTTTCACTTCCTACATTGGTCAGACCATTATTCGACACGTGGCGTCATTTT
+GTCATACCGGGTAATGTTGGAAACAAAACGTACTGATAAAATACTGAGTTGTAAACTCTA
+ATCAGATAACGCGCTTGGATATTAAGATTCACACAGGGGTTTCGGCTGTAAAAAAACTTG
+TGGAGCTGTTCTGGGACAGATAAGTTGTACCTCGTACTTAGCTAATTAATGAACCAACTG
+ATTACGATAGAACAATTCTGAGGCCGCCAGGACAGCCAAATTTTAATCTTATAAAGCTGG
+AAACAGCCGGTATTAGCTTCTCGCATACTTTGCCTGCATTGGTACCTTACAGATATCAGC
+GTAGTCATATACACCTCGGTCTCAGCTAAGCTTGTATCTCTTAGAGTAGTTCAAAGATAG
+TGGACAATACCTGTGGAATCGATTGCAGATATGGATTTATTTAACTACTGAGTCTCATTC
+ACAAGCTAAGCAAGGAGCACGTTTTGGTGCCGGCATACCGATTTGCTATCATGTCAGCAA
+ATTTGCGTTGTATTCCTAGTTGCACCCATTAAGGCCACACTCCGAACCTAATTATTACAT
+CGCAAAGACATGTACGAAGGACCCGATGTCGAATAGAAGGGAGGACTGTTCATTGGAAGC
+TAGACCAGAGGAATCGCAAAGATGCAACTCTTACAATAAAAATCTAATTTCAGTCAACAC
+GCAATTTCTATAAGGTTTCCGATAATAATGAACCGTCTTCCACAGGGGAATTTGCCATGC
+TCGTAAAAGTAGTTAATCCAAGTAGAAGAAATTTTGATAATGTTTTAAGTTGGCACGAAG
+GAATTCAGAGAGATCTTACCTAACAAAGGCATTAGTAGATGTTCCTTGGTTCACACTCGG
+TCAATCAGAGCACATACTACGGGCGATACCGGGAATGACACAACATCAATGAGATTGTTA
+AGTGAGGTAATTGACTTTAGAGGACTCGATCAGTATACTGTCACTATGAACATCGTATTA
+ATTGTTATCCGATATATACACCACCGATTTGCTTGTGCAAGGTTACAGACCCATTCGATA
+AATACAAACACGGAGCGATATTATTTAAGGAGTGCTGTCTTCAAAAGAATTATTCCCACA
+CCGACATAAGAACTTCGCTCCGTCATTCCAGATTTAAATAACATAACGTAACGCTTTGCT
+GATAACATAACATAACCGAGAATTTGCTTAGGAAATTTGGAGCAATATTGCATTGTTTCT
+CAGTCATCACAAGGCCCGCCAAAGAACTCTGAGAATCAGGATTCAACATGATTGGTAAGA
+CTCTATATATATAACTTAATTCTTGTGTCCGGAGATAGAAAGAGGACGAGAGATACTACG
+AAAGAAAGTGTACTTCGATGTATCAATTCAGACGCCTTCTCTATCATCAACATTATAGGT
+CTCGTATATGCTCGGCGCGATCTGCTTCTCTCCGCCAATAGCCCCATAGTGTATTTCAAG
+CGCAGTAACAGTGAAATCGTTACGAAGGTAGGGATGTTGCTTATAATTGTCGTAACTTAT
+CGCTTATGTATCTTTCAAGAATGAACGGCAGCATATACATACGTTCTACCTTTAGCTACA
+AAGCATCCATATACTCCCTCTCATGATTGAAACTCTTCCCTATTTTGTAGCCAATAGTGA
+AAGCGTATTAGTATAAATTCGTCGGTTTTTCACTCGCAACTGTTATACTCTGCAAACAAA
+CGAAAGCCTCATAGTACAAACCTAAAGCTACATACTTCATCATTGGCAGACCAGTGGCGG
+TATTTCTACGGAAGCATCACTATAGATATAAAGTTTCCCTTCATGTACGTCTGTTAACCA
+TATCACAAGAAACTGCTATCTCTGTCACGTAACAATTCACGCGCCTTATCGCCAAATGTT
+CATATATGCGCGGTATACGTATGAACGAATACTAATTAGTATAACGGAGGATTCACGGGA
+GGGATACTTGGGGCATTTATAAATCGTCTAAAAATTTTCTATCAGCACTTGCGGGTTATA
+GTGGATTACTAGGCAACATAATATTCTGTATTGGTCCAAATGACGCTATAGATAAATTAG
+CAAAATACATTGTTTCCATTTATGTAAGTCGAAACTCCAGGACTCCCGGGAACCAGTTAA
+ACCGTCTGGAAAAGACACATTGTGAGCGGGACTTCAATGATAGCTTTCAATGAGCTTCTC
+ATGCTTGGGGTCTGTACATATATGTTGGCGAAATTATCGTCTGTATTCTGTTATGCTTTG
+ATCATGGGTTATTAGTATAGTGTCCGGTTAAGTACCAATACCGCTAGAGACCCGACCTAA
+GTCGATAACTAACGATCATCGACGTAAGGATCGTCTCGATCAGTACTTCAGTCTAGATCT
+GGGAATAGTAACTCGTTAGTGAACTATGTCGTGTCATAACTCTAAAATGCAATCAAATCT
+TATTATTGAGTATTGATTATATAAAGCATCCGCTTAGCTTTACCCTCAAATGTTATATGC
+AATTTAAAGCGCTTGATATCGTCTACTCAAGTTCAGGTTTCACATGGCCGCAACGTGACG
+TTATTAGAGGTGGGTCATCATCTCTGAGGCTAGTGATGTTGAATACTCATTGAATGGGAA
+GTGGAATACCATGCTCGTAGGTAACAGCATGACCTATAAAATATACTATGGGTGTGTGGT
+AGATCAATATTGTTCAAGCATATCGTAACAATAACGGCTGAAATGTTACTGACATGAAAG
+AGGGAGTCCAAACCATTCTAACAGCTGATCAAGTCGTCTAAAAACGCCTGGTTCAGCCTT
+AAGAGTTATAAGCCAGACAAATTGTATCAATAGAGAATCCGTAAATTCCTCGGCCAACCT
+CTTGCAAAGACATCACTATCAATATACTACCGTGATCTTAATTAGTGAACTTATATAAAT
+ATCTACAACCAGATTCAACGGAAAAGCTTTAGTGGATTAGAAATTGCCAAGAATCACATT
+CATGTGGGTTCGAATGCTTTAGTAATACCATTTCGCCGAGTAGTCACTTCGCTGAACTGT
+CGTAAATTGCTATGACATAATCGAAAAGGATTGTCAAGAGTCGATTACTGCGGACTAATA
+ATCCCCACGGGGGTGGTCTCATGTCTCCCCAGGCGAGTGGGGACGGTTGATAAACACGCT
+GCATCGCGGACTGATGTTCCCAGTATTACATAGTCACATTGGATTGCGAGTAGTCTACCT
+ATTTATGAGCGAGAGATGCCTCTAACTACTTCGACTTTTAAAACCTTTCCACGCCAGTAT
+TCGGCGAAAGGGAAGTATTAAGGGTTGTCATAATTAAGCTGATACCACTTCAGACTTTGC
+TCTACTTCTGTCTTTCATTGGTTTAGTAAAGTCTGTCCATTCGTCGAGACCGTCTTTTGC
+AGCCTCATTCTACCAACTGCTCCGACTCTTAGTCTGCTTCTCCCAGCGTTATAACAAGAG
+GCATTTTGTCATCCTTAAAACAATAATAAAGAACTCGGAGCACTGATATAATGACTGAAT
+TAGAACCGCTTAAAAATACAACGAATAGATAAGACTATCGGATAAGATCTAATATGTAGT
+GATTAAGCCCTTTATTAATTAATAATAGTTACCCTTTCTGATGTAACGCGACATATTACG
+ATTTAGTGGCACGTCTGAATTGCAAAGCAGATCTCTACCCGATTTTTATTATAAATCCCG
+TATACATCTTGACTTGAGTAATTGTTCATCTTTTTATATCTCTTCGTACTACAAATAATT
+AATATCTCAACCCGTATTGTGTGATTCTAATTACCAACAGAATACGAGGAGGTTTTTGCT
+TAGGGCCATATATAATGAATCTATCTCGTTTATTCGCGGAACCCGAGATAACATTACGAT
+GTAACTATTTTAGAGAACTTAATACAAGAAACATTGCTGATTACTCATAACTAAATGCTT
+GGTAATATATCCTCAGTGCCCCTACCATCTTTTACGCAGGGATGTAATTACTTAGGATTC
+ATTGTGTAAGAATTACAATGAACGATGGATATGAAGGCATGTTGCGAGGTGTTCCTTGGT
+ATGTGAAGTTCGCAGGGCAACAAAAATTTCGCAGAATAGGCCTCAAAGTATTGGTAAAGA
+AGACAACTAATCATCACGAGCTTCTGATATCAATACGAACGAGTCCTGTGATGGATGAAA
+GAAAGTCGTATCGAAAATGTCAAGAGTCTGCCCAATGTAACTTACTTCAAAAAATAACGC
+TTCCGCCAAGTACGTTCGAATAAACGTAATTTTAAAAATACATAAGGGGTGTTAGAAAGT
+AAGCGACGGGATATAAGTTAGACTCAAGATTCCGCCGTAAAACGAGACTGATTCCGAAGA
+TTGTTCGTGGATCTGGTCATGACTTTCACTGAGTAAGGAGTTTCGACATATGTCAATAAA
+CACAAAAATAGAAGCTATTCGATCTGAAAAATATTAGGACAAGAAACTATCTCACGCTAG
+CCCAGAATATTCACTCACCCACGGGCGATACTAAAGCACTATATAGTCGCGTGATTACTA
+TACATATGGTACACATAAGAATCACGATCAGGTTCTCAATTTTCAACAATATATGTTTAT
+TTGCATAGGTAATATTAGGCCTTTAAGAGAAGGATGGGTGAGATACTCCGGGGATGGCGG
+CAATAAAGAAAAACACGATATGAGTAATAGGATCCTAATATCTTGGCGAGAGACTTAAGG
+TACGAATTTTGCGCAATCTATTTTTTACTTGGCCAGAATTCATGTATGGTATAAGTACGA
+ACTTTTTTGATCACTTTCATGGCTACCTGATTAGGATAGTTTGAGGAATTTCCCAAATAT
+ACCGATTTAATATACACTAGGGCTTGTCACTTTGAGTCAGAAAAAGAATATAATTACTTA
+GGGTAATGCTGCATACATATTCTTATATTGCAAAGGTTCTCTGGGTAATCTTGAGCCTTC
+ACGATACCTGGTGAAGTGTT
diff --git a/test/pending/shootout/revcomp.scala-2.scala b/test/pending/shootout/revcomp.scala-2.scala
new file mode 100644
index 0000000000..92260ad021
--- /dev/null
+++ b/test/pending/shootout/revcomp.scala-2.scala
@@ -0,0 +1,92 @@
+/* The Computer Language Shootout
+ http://shootout.alioth.debian.org/
+ contributed by Isaac Gouy
+*/
+
+import java.io._
+import scala.collection.mutable.Stack
+
+object revcomp {
+
+ val IUB = IUBCodeComplements
+
+ def IUBCodeComplements() = {
+ val code = "ABCDGHKMNRSTVWYabcdghkmnrstvwy".getBytes
+ val comp = "TVGHCDMKNYSABWRTVGHCDMKNYSABWR".getBytes
+ val a: Array[Byte] = new Array( 'z'.toByte )
+
+ for (indexValue <- code zip comp)
+ indexValue match { case Pair(i,v) => a(i) = v }
+
+ a
+ }
+
+
+ type LineStack = Stack[Array[Byte]]
+
+ def main(args: Array[String]) = {
+ val r = new BufferedReader(new InputStreamReader(System.in))
+ val w = new BufferedOutputStream(System.out)
+
+ var lines: LineStack = new Stack
+ var desc = ""
+
+ var line = r.readLine
+ while (line != null) {
+ val c = line.charAt(0)
+ if (c == '>'){
+ if (desc.length > 0){
+ complementReverseWrite(desc, lines, w)
+ lines = new Stack
+ }
+ desc = line
+ } else {
+ if (c != ';') lines += line.getBytes
+ }
+ line = r.readLine
+ }
+ r.close
+
+ if (desc.length > 0) complementReverseWrite(desc, lines, w)
+ w.close
+ }
+
+
+ def complementReverseWrite(desc: String, lines: LineStack,
+ w: BufferedOutputStream) = {
+
+ def inplaceComplementReverse(b: Array[Byte]) = {
+ var i = 0
+ var j = b.length - 1
+ while (i < j){
+ val swap = b(i)
+ b(i) = IUB( b(j) )
+ b(j) = IUB( swap )
+ i = i + 1
+ j = j - 1
+ }
+ if (i == j) b(i) = IUB( b(i) )
+ }
+
+ val nl = '\n'.toByte
+ w.write(desc.getBytes); w.write(nl)
+
+ val n = 60
+ val k = if (lines.isEmpty) 0 else lines.top.length
+ val isSplitLine = k < n
+ var isFirstLine = true
+
+ while (!lines.isEmpty) {
+ val line = lines.pop
+ inplaceComplementReverse(line)
+
+ if (isSplitLine){
+ if (isFirstLine){ w.write(line); isFirstLine = false }
+ else { w.write(line,0,n-k); w.write(nl); w.write(line,n-k,k) }
+ }
+ else { w.write(line); w.write(nl) }
+ }
+ if (isSplitLine && !isFirstLine) w.write(nl)
+ }
+
+}
diff --git a/test/pending/shootout/revcomp.scala-2.scala.runner b/test/pending/shootout/revcomp.scala-2.scala.runner
new file mode 100644
index 0000000000..f51d6170c8
--- /dev/null
+++ b/test/pending/shootout/revcomp.scala-2.scala.runner
@@ -0,0 +1,6 @@
+object Test extends Application {
+ for(n <- List(25000,250000,2500000)) {
+ System.setIn(new java.io.FileInputStream(System.getProperty("partest.cwd")+"/revcomp-input"+n+".txt"))
+ revcomp.main(Array(n.toString))
+ }
+}
diff --git a/test/pending/shootout/revcomp.scala-3.check b/test/pending/shootout/revcomp.scala-3.check
new file mode 100644
index 0000000000..14d792ade8
--- /dev/null
+++ b/test/pending/shootout/revcomp.scala-3.check
@@ -0,0 +1,171 @@
+>ONE Homo sapiens alu
+CGGAGTCTCGCTCTGTCGCCCAGGCTGGAGTGCAGTGGCGCGATCTCGGCTCACTGCAAC
+CTCCGCCTCCCGGGTTCAAGCGATTCTCCTGCCTCAGCCTCCCGAGTAGCTGGGATTACA
+GGCGCGCGCCACCACGCCCGGCTAATTTTTGTATTTTTAGTAGAGACGGGGTTTCACCAT
+GTTGGCCAGGCTGGTCTCGAACTCCTGACCTCAGGTGATCCGCCCGCCTCGGCCTCCCAA
+AGTGCTGGGATTACAGGCGTGAGCCACCGCGCCCGGCCTTTTTGAGACGGAGTCTCGCTC
+TGTCGCCCAGGCTGGAGTGCAGTGGCGCGATCTCGGCTCACTGCAACCTCCGCCTCCCGG
+GTTCAAGCGATTCTCCTGCCTCAGCCTCCCGAGTAGCTGGGATTACAGGCGCGCGCCACC
+ACGCCCGGCTAATTTTTGTATTTTTAGTAGAGACGGGGTTTCACCATGTTGGCCAGGCTG
+GTCTCGAACTCCTGACCTCAGGTGATCCGCCCGCCTCGGCCTCCCAAAGTGCTGGGATTA
+CAGGCGTGAGCCACCGCGCCCGGCCTTTTTGAGACGGAGTCTCGCTCTGTCGCCCAGGCT
+GGAGTGCAGTGGCGCGATCTCGGCTCACTGCAACCTCCGCCTCCCGGGTTCAAGCGATTC
+TCCTGCCTCAGCCTCCCGAGTAGCTGGGATTACAGGCGCGCGCCACCACGCCCGGCTAAT
+TTTTGTATTTTTAGTAGAGACGGGGTTTCACCATGTTGGCCAGGCTGGTCTCGAACTCCT
+GACCTCAGGTGATCCGCCCGCCTCGGCCTCCCAAAGTGCTGGGATTACAGGCGTGAGCCA
+CCGCGCCCGGCCTTTTTGAGACGGAGTCTCGCTCTGTCGCCCAGGCTGGAGTGCAGTGGC
+GCGATCTCGGCTCACTGCAACCTCCGCCTCCCGGGTTCAAGCGATTCTCCTGCCTCAGCC
+TCCCGAGTAGCTGGGATTACAGGCGCGCGCCACCACGCCCGGCTAATTTTTGTATTTTTA
+GTAGAGACGGGGTTTCACCATGTTGGCCAGGCTGGTCTCGAACTCCTGACCTCAGGTGAT
+CCGCCCGCCTCGGCCTCCCAAAGTGCTGGGATTACAGGCGTGAGCCACCGCGCCCGGCCT
+TTTTGAGACGGAGTCTCGCTCTGTCGCCCAGGCTGGAGTGCAGTGGCGCGATCTCGGCTC
+ACTGCAACCTCCGCCTCCCGGGTTCAAGCGATTCTCCTGCCTCAGCCTCCCGAGTAGCTG
+GGATTACAGGCGCGCGCCACCACGCCCGGCTAATTTTTGTATTTTTAGTAGAGACGGGGT
+TTCACCATGTTGGCCAGGCTGGTCTCGAACTCCTGACCTCAGGTGATCCGCCCGCCTCGG
+CCTCCCAAAGTGCTGGGATTACAGGCGTGAGCCACCGCGCCCGGCCTTTTTGAGACGGAG
+TCTCGCTCTGTCGCCCAGGCTGGAGTGCAGTGGCGCGATCTCGGCTCACTGCAACCTCCG
+CCTCCCGGGTTCAAGCGATTCTCCTGCCTCAGCCTCCCGAGTAGCTGGGATTACAGGCGC
+GCGCCACCACGCCCGGCTAATTTTTGTATTTTTAGTAGAGACGGGGTTTCACCATGTTGG
+CCAGGCTGGTCTCGAACTCCTGACCTCAGGTGATCCGCCCGCCTCGGCCTCCCAAAGTGC
+TGGGATTACAGGCGTGAGCCACCGCGCCCGGCCTTTTTGAGACGGAGTCTCGCTCTGTCG
+CCCAGGCTGGAGTGCAGTGGCGCGATCTCGGCTCACTGCAACCTCCGCCTCCCGGGTTCA
+AGCGATTCTCCTGCCTCAGCCTCCCGAGTAGCTGGGATTACAGGCGCGCGCCACCACGCC
+CGGCTAATTTTTGTATTTTTAGTAGAGACGGGGTTTCACCATGTTGGCCAGGCTGGTCTC
+GAACTCCTGACCTCAGGTGATCCGCCCGCCTCGGCCTCCCAAAGTGCTGGGATTACAGGC
+GTGAGCCACCGCGCCCGGCC
+>TWO IUB ambiguity codes
+TAGGDHACHATCRGTRGVTGAGWTATGYTGCTGTCABACDWVTRTAAGAVVAGATTTNDA
+GASMTCTGCATBYTTCAAKTTACMTATTACTTCATARGGYACMRTGTTTTYTATACVAAT
+TTCTAKGDACKADACTATATNTANTCGTTCACGBCGYSCBHTANGGTGATCGTAAAGTAA
+CTATBAAAAGATSTGWATBCSGAKHTTABBAACGTSYCATGCAAVATKTSKTASCGGAAT
+WVATTTNTCCTTCTTCTTDDAGTGGTTGGATACVGTTAYMTMTBTACTTTHAGCTAGBAA
+AAGAGKAAGTTRATWATCAGATTMDDTTTAAAVAAATATTKTCYTAAATTVCNKTTRACG
+ADTATATTTATGATSADSCAATAWAGCGRTAGTGTAAGTGACVGRADYGTGCTACHVSDT
+CTVCARCSYTTAATATARAAAATTTAATTTACDAATTGBACAGTAYAABATBTGCAGBVG
+TGATGGDCAAAATBNMSTTABKATTGGSTCCTAGBTTACTTGTTTAGTTTATHCGATSTA
+AAGTCGAKAAASTGTTTTAWAKCAGATATACTTTTMTTTTGBATAGAGGAGCMATGATRA
+AAGGNCAYDCCDDGAAAGTHGBTAATCKYTBTACBGTBCTTTTTGDTAASSWTAAWAARA
+TTGGCTAAGWGRADTYACATAGCTCBTAGATAWAGCAATNGTATMATGTTKMMAGTAWTC
+CCNTSGAAWATWCAAAAMACTGAADNTYGATNAATCCGAYWNCTAACGTTAGAGDTTTTC
+ATCTGGKRTAVGAABVCTGWGBTCTDVGKATTBTCTAAGGVADAAAVWTCTAGGGGAGGG
+TTAGAACAATTAAHTAATNAAATGCATKATCTAAYRTDTCAGSAYTTYHGATRTTWAVTA
+BGNTCDACAGBCCRCAGWCRTCABTGMMAWGMCTCAACCGATRTGBCAVAATCGTDWDAA
+CAYAWAATWCTGGTAHCCCTAAGATAACSCTTAGTGSAACAWTBGTCDTTDGACWDBAAC
+HTTTNGSKTYYAAYGGATNTGATTTAARTTAMBAATCTAAGTBTCATYTAACTTADTGTT
+TCGATACGAAHGGCYATATACCWDTKYATDCSHTDTCAAAATGTGBACTGSCCVGATGTA
+TCMMAGCCTTDAAABAATGAAGAGTAACTHATMGVTTAATAACCCGGTTVSANTGCAATT
+GTGAGATTTAMGTTTAMAAYGCTGACAYAAAAAGGCACAMYTAAGVGGCTGGAABVTACG
+GATTSTYGTBVAKTATWACCGTGTKAGTDTGTATGTTTAAAGGAAAAAGTAACATARAAA
+GGTYCAMNYAAABTATAGNTSATANAGTCATCCTATWADKAACTRGTMSACDGTATSAYT
+AAHSHGTAABYGACTYTATADTGSTATAGAGAAATCGNTAAAGGAAATCAGTTGTNCYMV
+TNACDRTATBNATATASTAGAAMSCGGGANRCKKMCAAACATTNAGTCTRMAATBMTACC
+CGTACTTCTBGDSYAATWGAAAATGACADDCHAKAAAYATATTKTTTTCACANACWAGAA
+AKATCCTTATTAYKHKCTAAACARTATTTTDATBTVWCYGCAATACTAGGKAAASTTDGA
+MGGCHTTHAATVCAHDRYAGGRCTATACGTCMAGAGAGCTBTHGNACARTCCBDCTAAGA
+GCGGCTTTARTAAAGAATCCNAGTAWBTGACTTGAATTACWTVACAGAAABCAATNAAAC
+CGTNTRANTTGAYCMAWBADTANABRGGTKTHTWTAGTTVCTMBKTAGMTVKCCAGCANT
+TVAGSWTTAGCCGCRHTTTCCTTHNTATTAAGAAGAATAGGMTRAARTCTABGTACDTTT
+TATAAVDHAHTATAGATCCTAGTAAGYTWATDWCATGAGGGATAGTAAMDMNGBASTWAM
+TSTATRBAYDABATGTATATYCGCACTGTTTTAACMCWBTATAWAGTATBTSTATVTTAR
+CCTMTTAAKADATCAACTAATYTSVTAKGDATTATGCKTCAYCAKAATACTTKAANGAGT
+ATTSDAGATCGGAAATACTTAAYAAVGTATMCGCTTGTGTDCTAATYTATTTTATTTWAA
+CAGWRCTATGTAGMTGTTTGTTYKTNGTTKTCAGAACNTRACCTACKTGSRATGTGGGGG
+CTGTCATTAAGTAAATNGSTTABCCCCTCGCAGCTCWHTCGCGAAGCAVATGCKACGHCA
+ACAKTTAATAACASAAADATTWNYTGTAATTGTTCGTMHACHTWATGTGCWTTTTGAAHY
+ACTTTGTAYAMSAAACTTAADAAATATAGTABMATATYAATGSGGTAGTTTGTGTBYGGT
+TWSGSVGWMATTDMTCCWWCABTCSVACAGBAATGTTKATBGTCAATAATCTTCTTAAAC
+ARVAATHAGYBWCTRWCABGTWWAATCTAAGTCASTAAAKTAAGVKBAATTBGABACGTA
+AGGTTAAATAAAAACTRMDTWBCTTTTTAATAAAAGATMGCCTACKAKNTBAGYRASTGT
+ASSTCGTHCGAAKTTATTATATTYTTTGTAGAACATGTCAAAACTWTWTHGKTCCYAATA
+AAGTGGAYTMCYTAARCSTAAATWAKTGAATTTRAGTCTSSATACGACWAKAASATDAAA
+TGYYACTSAACAAHAKTSHYARGASTATTATTHAGGYGGASTTTBGAKGATSANAACACD
+TRGSTTRAAAAAAAACAAGARTCVTAGTAAGATAWATGVHAAKATWGAAAAGTYAHVTAC
+TCTGRTGTCAWGATRVAAKTCGCAAVCGASWGGTTRTCSAMCCTAACASGWKKAWDAATG
+ACRCBACTATGTGTCTTCAAAHGSCTATATTTCGTVWAGAAGTAYCKGARAKSGKAGTAN
+TTTCYACATWATGTCTAAAADMDTWCAATSTKDACAMAADADBSAAATAGGCTHAHAGTA
+CGACVGAATTATAAAGAHCCVAYHGHTTTACATSTTTATGNCCMTAGCATATGATAVAAG
+>THREE Homo sapiens frequency
+ATATTTATCTTTTCACTTCCTACATTGGTCAGACCATTATTCGACACGTGGCGTCATTTT
+GTCATACCGGGTAATGTTGGAAACAAAACGTACTGATAAAATACTGAGTTGTAAACTCTA
+ATCAGATAACGCGCTTGGATATTAAGATTCACACAGGGGTTTCGGCTGTAAAAAAACTTG
+TGGAGCTGTTCTGGGACAGATAAGTTGTACCTCGTACTTAGCTAATTAATGAACCAACTG
+ATTACGATAGAACAATTCTGAGGCCGCCAGGACAGCCAAATTTTAATCTTATAAAGCTGG
+AAACAGCCGGTATTAGCTTCTCGCATACTTTGCCTGCATTGGTACCTTACAGATATCAGC
+GTAGTCATATACACCTCGGTCTCAGCTAAGCTTGTATCTCTTAGAGTAGTTCAAAGATAG
+TGGACAATACCTGTGGAATCGATTGCAGATATGGATTTATTTAACTACTGAGTCTCATTC
+ACAAGCTAAGCAAGGAGCACGTTTTGGTGCCGGCATACCGATTTGCTATCATGTCAGCAA
+ATTTGCGTTGTATTCCTAGTTGCACCCATTAAGGCCACACTCCGAACCTAATTATTACAT
+CGCAAAGACATGTACGAAGGACCCGATGTCGAATAGAAGGGAGGACTGTTCATTGGAAGC
+TAGACCAGAGGAATCGCAAAGATGCAACTCTTACAATAAAAATCTAATTTCAGTCAACAC
+GCAATTTCTATAAGGTTTCCGATAATAATGAACCGTCTTCCACAGGGGAATTTGCCATGC
+TCGTAAAAGTAGTTAATCCAAGTAGAAGAAATTTTGATAATGTTTTAAGTTGGCACGAAG
+GAATTCAGAGAGATCTTACCTAACAAAGGCATTAGTAGATGTTCCTTGGTTCACACTCGG
+TCAATCAGAGCACATACTACGGGCGATACCGGGAATGACACAACATCAATGAGATTGTTA
+AGTGAGGTAATTGACTTTAGAGGACTCGATCAGTATACTGTCACTATGAACATCGTATTA
+ATTGTTATCCGATATATACACCACCGATTTGCTTGTGCAAGGTTACAGACCCATTCGATA
+AATACAAACACGGAGCGATATTATTTAAGGAGTGCTGTCTTCAAAAGAATTATTCCCACA
+CCGACATAAGAACTTCGCTCCGTCATTCCAGATTTAAATAACATAACGTAACGCTTTGCT
+GATAACATAACATAACCGAGAATTTGCTTAGGAAATTTGGAGCAATATTGCATTGTTTCT
+CAGTCATCACAAGGCCCGCCAAAGAACTCTGAGAATCAGGATTCAACATGATTGGTAAGA
+CTCTATATATATAACTTAATTCTTGTGTCCGGAGATAGAAAGAGGACGAGAGATACTACG
+AAAGAAAGTGTACTTCGATGTATCAATTCAGACGCCTTCTCTATCATCAACATTATAGGT
+CTCGTATATGCTCGGCGCGATCTGCTTCTCTCCGCCAATAGCCCCATAGTGTATTTCAAG
+CGCAGTAACAGTGAAATCGTTACGAAGGTAGGGATGTTGCTTATAATTGTCGTAACTTAT
+CGCTTATGTATCTTTCAAGAATGAACGGCAGCATATACATACGTTCTACCTTTAGCTACA
+AAGCATCCATATACTCCCTCTCATGATTGAAACTCTTCCCTATTTTGTAGCCAATAGTGA
+AAGCGTATTAGTATAAATTCGTCGGTTTTTCACTCGCAACTGTTATACTCTGCAAACAAA
+CGAAAGCCTCATAGTACAAACCTAAAGCTACATACTTCATCATTGGCAGACCAGTGGCGG
+TATTTCTACGGAAGCATCACTATAGATATAAAGTTTCCCTTCATGTACGTCTGTTAACCA
+TATCACAAGAAACTGCTATCTCTGTCACGTAACAATTCACGCGCCTTATCGCCAAATGTT
+CATATATGCGCGGTATACGTATGAACGAATACTAATTAGTATAACGGAGGATTCACGGGA
+GGGATACTTGGGGCATTTATAAATCGTCTAAAAATTTTCTATCAGCACTTGCGGGTTATA
+GTGGATTACTAGGCAACATAATATTCTGTATTGGTCCAAATGACGCTATAGATAAATTAG
+CAAAATACATTGTTTCCATTTATGTAAGTCGAAACTCCAGGACTCCCGGGAACCAGTTAA
+ACCGTCTGGAAAAGACACATTGTGAGCGGGACTTCAATGATAGCTTTCAATGAGCTTCTC
+ATGCTTGGGGTCTGTACATATATGTTGGCGAAATTATCGTCTGTATTCTGTTATGCTTTG
+ATCATGGGTTATTAGTATAGTGTCCGGTTAAGTACCAATACCGCTAGAGACCCGACCTAA
+GTCGATAACTAACGATCATCGACGTAAGGATCGTCTCGATCAGTACTTCAGTCTAGATCT
+GGGAATAGTAACTCGTTAGTGAACTATGTCGTGTCATAACTCTAAAATGCAATCAAATCT
+TATTATTGAGTATTGATTATATAAAGCATCCGCTTAGCTTTACCCTCAAATGTTATATGC
+AATTTAAAGCGCTTGATATCGTCTACTCAAGTTCAGGTTTCACATGGCCGCAACGTGACG
+TTATTAGAGGTGGGTCATCATCTCTGAGGCTAGTGATGTTGAATACTCATTGAATGGGAA
+GTGGAATACCATGCTCGTAGGTAACAGCATGACCTATAAAATATACTATGGGTGTGTGGT
+AGATCAATATTGTTCAAGCATATCGTAACAATAACGGCTGAAATGTTACTGACATGAAAG
+AGGGAGTCCAAACCATTCTAACAGCTGATCAAGTCGTCTAAAAACGCCTGGTTCAGCCTT
+AAGAGTTATAAGCCAGACAAATTGTATCAATAGAGAATCCGTAAATTCCTCGGCCAACCT
+CTTGCAAAGACATCACTATCAATATACTACCGTGATCTTAATTAGTGAACTTATATAAAT
+ATCTACAACCAGATTCAACGGAAAAGCTTTAGTGGATTAGAAATTGCCAAGAATCACATT
+CATGTGGGTTCGAATGCTTTAGTAATACCATTTCGCCGAGTAGTCACTTCGCTGAACTGT
+CGTAAATTGCTATGACATAATCGAAAAGGATTGTCAAGAGTCGATTACTGCGGACTAATA
+ATCCCCACGGGGGTGGTCTCATGTCTCCCCAGGCGAGTGGGGACGGTTGATAAACACGCT
+GCATCGCGGACTGATGTTCCCAGTATTACATAGTCACATTGGATTGCGAGTAGTCTACCT
+ATTTATGAGCGAGAGATGCCTCTAACTACTTCGACTTTTAAAACCTTTCCACGCCAGTAT
+TCGGCGAAAGGGAAGTATTAAGGGTTGTCATAATTAAGCTGATACCACTTCAGACTTTGC
+TCTACTTCTGTCTTTCATTGGTTTAGTAAAGTCTGTCCATTCGTCGAGACCGTCTTTTGC
+AGCCTCATTCTACCAACTGCTCCGACTCTTAGTCTGCTTCTCCCAGCGTTATAACAAGAG
+GCATTTTGTCATCCTTAAAACAATAATAAAGAACTCGGAGCACTGATATAATGACTGAAT
+TAGAACCGCTTAAAAATACAACGAATAGATAAGACTATCGGATAAGATCTAATATGTAGT
+GATTAAGCCCTTTATTAATTAATAATAGTTACCCTTTCTGATGTAACGCGACATATTACG
+ATTTAGTGGCACGTCTGAATTGCAAAGCAGATCTCTACCCGATTTTTATTATAAATCCCG
+TATACATCTTGACTTGAGTAATTGTTCATCTTTTTATATCTCTTCGTACTACAAATAATT
+AATATCTCAACCCGTATTGTGTGATTCTAATTACCAACAGAATACGAGGAGGTTTTTGCT
+TAGGGCCATATATAATGAATCTATCTCGTTTATTCGCGGAACCCGAGATAACATTACGAT
+GTAACTATTTTAGAGAACTTAATACAAGAAACATTGCTGATTACTCATAACTAAATGCTT
+GGTAATATATCCTCAGTGCCCCTACCATCTTTTACGCAGGGATGTAATTACTTAGGATTC
+ATTGTGTAAGAATTACAATGAACGATGGATATGAAGGCATGTTGCGAGGTGTTCCTTGGT
+ATGTGAAGTTCGCAGGGCAACAAAAATTTCGCAGAATAGGCCTCAAAGTATTGGTAAAGA
+AGACAACTAATCATCACGAGCTTCTGATATCAATACGAACGAGTCCTGTGATGGATGAAA
+GAAAGTCGTATCGAAAATGTCAAGAGTCTGCCCAATGTAACTTACTTCAAAAAATAACGC
+TTCCGCCAAGTACGTTCGAATAAACGTAATTTTAAAAATACATAAGGGGTGTTAGAAAGT
+AAGCGACGGGATATAAGTTAGACTCAAGATTCCGCCGTAAAACGAGACTGATTCCGAAGA
+TTGTTCGTGGATCTGGTCATGACTTTCACTGAGTAAGGAGTTTCGACATATGTCAATAAA
+CACAAAAATAGAAGCTATTCGATCTGAAAAATATTAGGACAAGAAACTATCTCACGCTAG
+CCCAGAATATTCACTCACCCACGGGCGATACTAAAGCACTATATAGTCGCGTGATTACTA
+TACATATGGTACACATAAGAATCACGATCAGGTTCTCAATTTTCAACAATATATGTTTAT
+TTGCATAGGTAATATTAGGCCTTTAAGAGAAGGATGGGTGAGATACTCCGGGGATGGCGG
+CAATAAAGAAAAACACGATATGAGTAATAGGATCCTAATATCTTGGCGAGAGACTTAAGG
+TACGAATTTTGCGCAATCTATTTTTTACTTGGCCAGAATTCATGTATGGTATAAGTACGA
+ACTTTTTTGATCACTTTCATGGCTACCTGATTAGGATAGTTTGAGGAATTTCCCAAATAT
+ACCGATTTAATATACACTAGGGCTTGTCACTTTGAGTCAGAAAAAGAATATAATTACTTA
+GGGTAATGCTGCATACATATTCTTATATTGCAAAGGTTCTCTGGGTAATCTTGAGCCTTC
+ACGATACCTGGTGAAGTGTT
diff --git a/test/pending/shootout/revcomp.scala-3.scala b/test/pending/shootout/revcomp.scala-3.scala
new file mode 100644
index 0000000000..ae12f0499b
--- /dev/null
+++ b/test/pending/shootout/revcomp.scala-3.scala
@@ -0,0 +1,147 @@
+/* The Computer Language Shootout
+ http://shootout.alioth.debian.org/
+ contributed by Isaac Gouy
+*/
+
+import java.io._
+import scala.collection.mutable.Stack
+
+object revcomp {
+ def main(args: Array[String]) = {
+ val out = new FastaOutputStream(System.out)
+ val in = new FastaInputStream(System.in)
+
+ out.writeReverseComplement( in.readSequenceStack )
+ out.writeReverseComplement( in.readSequenceStack )
+ out.writeReverseComplement( in.readSequenceStack )
+
+ in.close
+ out.close
+ }
+}
+
+
+trait FastaByteStream {
+ val nl = '\n'.toByte
+
+ type Line = Array[Byte]
+ type LineStack = Stack[Line]
+}
+
+
+// extend the Java BufferedInputStream class
+
+final class FastaInputStream(in: InputStream)
+ extends BufferedInputStream(in) with FastaByteStream {
+
+ val gt = '>'.toByte
+ val sc = ';'.toByte
+
+ def readSequenceStack(): Pair[Line,LineStack] = {
+ var header: Line = null
+ val lines: LineStack = new Stack
+
+ var line = readLine()
+ while (line != null) {
+ val c = line(0)
+ if (c == gt){ // '>'
+ if (header == null){
+ header = line
+ } else {
+ pos = pos - line.length - 1 // reposition to start of line
+ return Pair(header,lines)
+ }
+ } else {
+ if (c != sc) lines push line // ';'
+ }
+ line = readLine()
+ }
+ return Pair(header,lines)
+ }
+
+ def readLine() = {
+ var bytes: Line = null
+ if (in == null) bytes
+ else {
+ mark(128) // mark the start of the line
+ if (count == 0) read() // fill buffer
+
+ var i = markpos
+ while (i < count && buf(i) != nl) i = i + 1
+
+ if (i >= count){ // line extends past end of buffer
+ pos = i; read(); i = pos; // fill buffer again
+ while (i < count && buf(i) != nl) i = i + 1
+ }
+
+ if (i < count){
+ bytes = new Array(i - markpos)
+ System.arraycopy(buf, markpos, bytes, 0, i - markpos);
+ pos = i+1
+ }
+ }
+ bytes
+ }
+}
+
+
+// extend the Java BufferedOutputStream class
+
+final class FastaOutputStream(in: OutputStream)
+ extends BufferedOutputStream(in) with FastaByteStream {
+
+ private val IUB = IUBCodeComplements
+
+ private def IUBCodeComplements() = {
+ val code = "ABCDGHKMNRSTVWYabcdghkmnrstvwy".getBytes
+ val comp = "TVGHCDMKNYSABWRTVGHCDMKNYSABWR".getBytes
+ val iub: Array[Byte] = new Array( 'z'.toByte )
+
+ for (indexValue <- code zip comp)
+ indexValue match { case Pair(i,v) => iub(i) = v }
+
+ iub
+ }
+
+ def writeReverseComplement(sequence: Pair[Line,LineStack]) = {
+
+ def inplaceComplementReverse(b: Array[Byte]) = {
+ var i = 0
+ var j = b.length - 1
+ while (i < j){
+ val swap = b(i)
+ b(i) = IUB( b(j) )
+ b(j) = IUB( swap )
+ i = i + 1
+ j = j - 1
+ }
+ if (i == j) b(i) = IUB( b(i) )
+ }
+
+ sequence match {
+ case Pair(header,lines) => {
+
+ write(header); write(nl)
+
+ val k = if (lines.isEmpty) 0 else lines.top.length
+ val LineLength = 60
+ val isSplitLine = k < LineLength
+ var isFirstLine = true
+
+ while (!lines.isEmpty) {
+ val line = lines.pop
+ inplaceComplementReverse(line)
+
+ if (isSplitLine){
+ if (isFirstLine){ write(line); isFirstLine = false }
+ else { write(line,0,LineLength-k); write(nl); write(line,LineLength-k,k) }
+ }
+ else { write(line); write(nl) }
+ }
+
+ if (isSplitLine && !isFirstLine) write(nl)
+ }
+ }
+ }
+
+}
diff --git a/test/pending/shootout/revcomp.scala-3.scala.runner b/test/pending/shootout/revcomp.scala-3.scala.runner
new file mode 100644
index 0000000000..f51d6170c8
--- /dev/null
+++ b/test/pending/shootout/revcomp.scala-3.scala.runner
@@ -0,0 +1,6 @@
+object Test extends Application {
+ for(n <- List(25000,250000,2500000)) {
+ System.setIn(new java.io.FileInputStream(System.getProperty("partest.cwd")+"/revcomp-input"+n+".txt"))
+ revcomp.main(Array(n.toString))
+ }
+}
diff --git a/test/pending/shootout/sieve.scala b/test/pending/shootout/sieve.scala
new file mode 100644
index 0000000000..b494980ee4
--- /dev/null
+++ b/test/pending/shootout/sieve.scala
@@ -0,0 +1,43 @@
+/* The Computer Language Shootout
+ http://shootout.alioth.debian.org/
+ contributed by Isaac Gouy (Scala novice)
+*/
+
+object sieve {
+ def main(args: Array[String]) = {
+ var n = toPositiveInt(args);
+ val start = 2;
+ val stop = 8192;
+ val isPrime = new Array[Boolean](stop+1);
+ var count: Int = 0;
+
+ while (n>0) {
+ count = 0;
+
+ for (i <- Iterator.range(start,stop+1))
+ isPrime(i)=true;
+
+ for (i <- Iterator.range(start,stop+1)) {
+ if( isPrime(i) ) {
+ var k = i+i;
+ while (k<=stop) { isPrime(k)=false; k=k+i; }
+ count = count+1;
+ }
+ }
+ n=n-1;
+ }
+
+ Console.println("Count: " + count);
+ }
+
+
+ private def toPositiveInt(s: Array[String]) = {
+ val i =
+ try { Integer.parseInt(s(0)); }
+ catch { case _ => 1 }
+ if (i>0) i; else 1;
+ }
+}
+
+
+
diff --git a/test/pending/shootout/sieve.scala.runner b/test/pending/shootout/sieve.scala.runner
new file mode 100644
index 0000000000..893c3abe90
--- /dev/null
+++ b/test/pending/shootout/sieve.scala.runner
@@ -0,0 +1,3 @@
+object Test extends Application {
+ for(n <- List(300,600,900,1200)) sieve.main(Array(n.toString))
+}
diff --git a/test/postreview.py b/test/postreview.py
new file mode 100644
index 0000000000..2e2518f7ee
--- /dev/null
+++ b/test/postreview.py
@@ -0,0 +1,2540 @@
+#!/usr/bin/env python
+import cookielib
+import difflib
+import getpass
+import marshal
+import mimetools
+import ntpath
+import os
+import re
+import socket
+import stat
+import subprocess
+import sys
+import tempfile
+import urllib
+import urllib2
+from optparse import OptionParser
+from tempfile import mkstemp
+from urlparse import urljoin, urlparse
+
+try:
+ from hashlib import md5
+except ImportError:
+ # Support Python versions before 2.5.
+ from md5 import md5
+
+try:
+ import json
+except ImportError:
+ import simplejson as json
+
+# This specific import is necessary to handle the paths for
+# cygwin enabled machines.
+if (sys.platform.startswith('win')
+ or sys.platform.startswith('cygwin')):
+ import ntpath as cpath
+else:
+ import posixpath as cpath
+
+###
+# Default configuration -- user-settable variables follow.
+###
+
+# The following settings usually aren't needed, but if your Review
+# Board crew has specific preferences and doesn't want to express
+# them with command line switches, set them here and you're done.
+# In particular, setting the REVIEWBOARD_URL variable will allow
+# you to make it easy for people to submit reviews regardless of
+# their SCM setup.
+#
+# Note that in order for this script to work with a reviewboard site
+# that uses local paths to access a repository, the 'Mirror path'
+# in the repository setup page must be set to the remote URL of the
+# repository.
+
+#
+# Reviewboard URL.
+#
+# Set this if you wish to hard-code a default server to always use.
+# It's generally recommended to set this using your SCM repository
+# (for those that support it -- currently only SVN, Git, and Perforce).
+#
+# For example, on SVN:
+# $ svn propset reviewboard:url http://reviewboard.example.com .
+#
+# Or with Git:
+# $ git config reviewboard.url http://reviewboard.example.com
+#
+# On Perforce servers version 2008.1 and above:
+# $ p4 counter reviewboard.url http://reviewboard.example.com
+#
+# Older Perforce servers only allow numerical counters, so embedding
+# the url in the counter name is also supported:
+# $ p4 counter reviewboard.url.http:\|\|reviewboard.example.com 1
+#
+# Note that slashes are not allowed in Perforce counter names, so replace them
+# with pipe characters (they are a safe substitute as they are not used
+# unencoded in URLs). You may need to escape them when issuing the p4 counter
+# command as above.
+#
+# If this is not possible or desired, setting the value here will let
+# you get started quickly.
+#
+# For all other repositories, a .reviewboardrc file present at the top of
+# the checkout will also work. For example:
+#
+# $ cat .reviewboardrc
+# REVIEWBOARD_URL = "http://reviewboard.example.com"
+#
+REVIEWBOARD_URL = None
+
+# Default submission arguments. These are all optional; run this
+# script with --help for descriptions of each argument.
+TARGET_GROUPS = None
+TARGET_PEOPLE = None
+SUBMIT_AS = None
+PUBLISH = False
+OPEN_BROWSER = False
+
+# Debugging. For development...
+DEBUG = False
+
+###
+# End user-settable variables.
+###
+
+
+VERSION = "0.8"
+
+user_config = None
+tempfiles = []
+options = None
+
+
+class APIError(Exception):
+ pass
+
+
+class RepositoryInfo:
+ """
+ A representation of a source code repository.
+ """
+ def __init__(self, path=None, base_path=None, supports_changesets=False,
+ supports_parent_diffs=False):
+ self.path = path
+ self.base_path = base_path
+ self.supports_changesets = supports_changesets
+ self.supports_parent_diffs = supports_parent_diffs
+ debug("repository info: %s" % self)
+
+ def __str__(self):
+ return "Path: %s, Base path: %s, Supports changesets: %s" % \
+ (self.path, self.base_path, self.supports_changesets)
+
+ def set_base_path(self, base_path):
+ if not base_path.startswith('/'):
+ base_path = '/' + base_path
+ debug("changing repository info base_path from %s to %s" % \
+ (self.base_path, base_path))
+ self.base_path = base_path
+
+ def find_server_repository_info(self, server):
+ """
+ Try to find the repository from the list of repositories on the server.
+ For Subversion, this could be a repository with a different URL. For
+ all other clients, this is a noop.
+ """
+ return self
+
+
+class SvnRepositoryInfo(RepositoryInfo):
+ """
+ A representation of a SVN source code repository. This version knows how to
+ find a matching repository on the server even if the URLs differ.
+ """
+ def __init__(self, path, base_path, uuid, supports_parent_diffs=False):
+ RepositoryInfo.__init__(self, path, base_path,
+ supports_parent_diffs=supports_parent_diffs)
+ self.uuid = uuid
+
+ def find_server_repository_info(self, server):
+ """
+ The point of this function is to find a repository on the server that
+ matches self, even if the paths aren't the same. (For example, if self
+ uses an 'http' path, but the server uses a 'file' path for the same
+ repository.) It does this by comparing repository UUIDs. If the
+ repositories use the same path, you'll get back self, otherwise you'll
+ get a different SvnRepositoryInfo object (with a different path).
+ """
+ repositories = server.get_repositories()
+
+ for repository in repositories:
+ if repository['tool'] != 'Subversion':
+ continue
+
+ info = self._get_repository_info(server, repository)
+
+ if not info or self.uuid != info['uuid']:
+ continue
+
+ repos_base_path = info['url'][len(info['root_url']):]
+ relpath = self._get_relative_path(self.base_path, repos_base_path)
+ if relpath:
+ return SvnRepositoryInfo(info['url'], relpath, self.uuid)
+
+ # We didn't find a matching repository on the server. We'll just return
+ # self and hope for the best.
+ return self
+
+ def _get_repository_info(self, server, repository):
+ try:
+ return server.get_repository_info(repository['id'])
+ except APIError, e:
+ # If the server couldn't fetch the repository info, it will return
+ # code 210. Ignore those.
+ # Other more serious errors should still be raised, though.
+ rsp = e.args[0]
+ if rsp['err']['code'] == 210:
+ return None
+
+ raise e
+
+ def _get_relative_path(self, path, root):
+ pathdirs = self._split_on_slash(path)
+ rootdirs = self._split_on_slash(root)
+
+ # root is empty, so anything relative to that is itself
+ if len(rootdirs) == 0:
+ return path
+
+ # If one of the directories doesn't match, then path is not relative
+ # to root.
+ if rootdirs != pathdirs:
+ return None
+
+ # All the directories matched, so the relative path is whatever
+ # directories are left over. The base_path can't be empty, though, so
+ # if the paths are the same, return '/'
+ if len(pathdirs) == len(rootdirs):
+ return '/'
+ else:
+ return '/'.join(pathdirs[len(rootdirs):])
+
+ def _split_on_slash(self, path):
+ # Split on slashes, but ignore multiple slashes and throw away any
+ # trailing slashes.
+ split = re.split('/*', path)
+ if split[-1] == '':
+ split = split[0:-1]
+ return split
+
+
+class ReviewBoardHTTPPasswordMgr(urllib2.HTTPPasswordMgr):
+ """
+ Adds HTTP authentication support for URLs.
+
+ Python 2.4's password manager has a bug in http authentication when the
+ target server uses a non-standard port. This works around that bug on
+ Python 2.4 installs. This also allows post-review to prompt for passwords
+ in a consistent way.
+
+ See: http://bugs.python.org/issue974757
+ """
+ def __init__(self, reviewboard_url):
+ self.passwd = {}
+ self.rb_url = reviewboard_url
+ self.rb_user = None
+ self.rb_pass = None
+
+ def find_user_password(self, realm, uri):
+ if uri.startswith(self.rb_url):
+ if self.rb_user is None or self.rb_pass is None:
+ print "==> HTTP Authentication Required"
+ print 'Enter username and password for "%s" at %s' % \
+ (realm, urlparse(uri)[1])
+ self.rb_user = raw_input('Username: ')
+ self.rb_pass = getpass.getpass('Password: ')
+
+ return self.rb_user, self.rb_pass
+ else:
+ # If this is an auth request for some other domain (since HTTP
+ # handlers are global), fall back to standard password management.
+ return urllib2.HTTPPasswordMgr.find_user_password(self, realm, uri)
+
+
+class ReviewBoardServer(object):
+ """
+ An instance of a Review Board server.
+ """
+ def __init__(self, url, info, cookie_file):
+ self.url = url
+ if self.url[-1] != '/':
+ self.url += '/'
+ self._info = info
+ self._server_info = None
+ self.cookie_file = cookie_file
+ self.cookie_jar = cookielib.MozillaCookieJar(self.cookie_file)
+
+ # Set up the HTTP libraries to support all of the features we need.
+ cookie_handler = urllib2.HTTPCookieProcessor(self.cookie_jar)
+ password_mgr = ReviewBoardHTTPPasswordMgr(self.url)
+ auth_handler = urllib2.HTTPBasicAuthHandler(password_mgr)
+
+ opener = urllib2.build_opener(cookie_handler, auth_handler)
+ opener.addheaders = [('User-agent', 'post-review/' + VERSION)]
+ urllib2.install_opener(opener)
+
+ def login(self, force=False):
+ """
+ Logs in to a Review Board server, prompting the user for login
+ information if needed.
+ """
+ if not force and self.has_valid_cookie():
+ return
+
+ print "==> Review Board Login Required"
+ print "Enter username and password for Review Board at %s" % self.url
+ if options.username:
+ username = options.username
+ elif options.submit_as:
+ username = options.submit_as
+ else:
+ username = raw_input('Username: ')
+
+ if not options.password:
+ password = getpass.getpass('Password: ')
+ else:
+ password = options.password
+
+ debug('Logging in with username "%s"' % username)
+ try:
+ self.api_post('api/json/accounts/login/', {
+ 'username': username,
+ 'password': password,
+ })
+ except APIError, e:
+ rsp, = e.args
+
+ die("Unable to log in: %s (%s)" % (rsp["err"]["msg"],
+ rsp["err"]["code"]))
+
+ debug("Logged in.")
+
+ def has_valid_cookie(self):
+ """
+ Load the user's cookie file and see if they have a valid
+ 'rbsessionid' cookie for the current Review Board server. Returns
+ true if so and false otherwise.
+ """
+ try:
+ parsed_url = urlparse(self.url)
+ host = parsed_url[1]
+ path = parsed_url[2] or '/'
+
+ # Cookie files don't store port numbers, unfortunately, so
+ # get rid of the port number if it's present.
+ host = host.split(":")[0]
+
+ debug("Looking for '%s %s' cookie in %s" % \
+ (host, path, self.cookie_file))
+ self.cookie_jar.load(self.cookie_file, ignore_expires=True)
+
+ try:
+ cookie = self.cookie_jar._cookies[host][path]['rbsessionid']
+
+ if not cookie.is_expired():
+ debug("Loaded valid cookie -- no login required")
+ return True
+
+ debug("Cookie file loaded, but cookie has expired")
+ except KeyError:
+ debug("Cookie file loaded, but no cookie for this server")
+ except IOError, error:
+ debug("Couldn't load cookie file: %s" % error)
+
+ return False
+
+ def new_review_request(self, changenum, submit_as=None):
+ """
+ Creates a review request on a Review Board server, updating an
+ existing one if the changeset number already exists.
+
+ If submit_as is provided, the specified user name will be recorded as
+ the submitter of the review request (given that the logged in user has
+ the appropriate permissions).
+ """
+ try:
+ debug("Attempting to create review request for %s" % changenum)
+ data = { 'repository_path': self.info.path }
+
+ if changenum:
+ data['changenum'] = changenum
+
+ if submit_as:
+ debug("Submitting the review request as %s" % submit_as)
+ data['submit_as'] = submit_as
+
+ rsp = self.api_post('api/json/reviewrequests/new/', data)
+ except APIError, e:
+ rsp, = e.args
+
+ if not options.diff_only:
+ if rsp['err']['code'] == 204: # Change number in use
+ debug("Review request already exists. Updating it...")
+ rsp = self.api_post(
+ 'api/json/reviewrequests/%s/update_from_changenum/' %
+ rsp['review_request']['id'])
+ else:
+ raise e
+
+ debug("Review request created")
+ return rsp['review_request']
+
+ def set_review_request_field(self, review_request, field, value):
+ """
+ Sets a field in a review request to the specified value.
+ """
+ rid = review_request['id']
+
+ debug("Attempting to set field '%s' to '%s' for review request '%s'" %
+ (field, value, rid))
+
+ self.api_post('api/json/reviewrequests/%s/draft/set/' % rid, {
+ field: value,
+ })
+
+ def get_review_request(self, rid):
+ """
+ Returns the review request with the specified ID.
+ """
+ rsp = self.api_get('api/json/reviewrequests/%s/' % rid)
+ return rsp['review_request']
+
+ def get_repositories(self):
+ """
+ Returns the list of repositories on this server.
+ """
+ rsp = self.api_get('/api/json/repositories/')
+ return rsp['repositories']
+
+ def get_repository_info(self, rid):
+ """
+ Returns detailed information about a specific repository.
+ """
+ rsp = self.api_get('/api/json/repositories/%s/info/' % rid)
+ return rsp['info']
+
+ def save_draft(self, review_request):
+ """
+ Saves a draft of a review request.
+ """
+ self.api_post("api/json/reviewrequests/%s/draft/save/" %
+ review_request['id'])
+ debug("Review request draft saved")
+
+ def upload_diff(self, review_request, diff_content, parent_diff_content):
+ """
+ Uploads a diff to a Review Board server.
+ """
+ debug("Uploading diff, size: %d" % len(diff_content))
+
+ if parent_diff_content:
+ debug("Uploading parent diff, size: %d" % len(parent_diff_content))
+
+ fields = {}
+ files = {}
+
+ if self.info.base_path:
+ fields['basedir'] = self.info.base_path
+
+ files['path'] = {
+ 'filename': 'diff',
+ 'content': diff_content
+ }
+
+ if parent_diff_content:
+ files['parent_diff_path'] = {
+ 'filename': 'parent_diff',
+ 'content': parent_diff_content
+ }
+
+ self.api_post('api/json/reviewrequests/%s/diff/new/' %
+ review_request['id'], fields, files)
+
+ def publish(self, review_request):
+ """
+ Publishes a review request.
+ """
+ debug("Publishing")
+ self.api_post('api/json/reviewrequests/%s/publish/' %
+ review_request['id'])
+
+ def _get_server_info(self):
+ if not self._server_info:
+ self._server_info = self._info.find_server_repository_info(self)
+
+ return self._server_info
+
+ info = property(_get_server_info)
+
+ def process_json(self, data):
+ """
+ Loads in a JSON file and returns the data if successful. On failure,
+ APIError is raised.
+ """
+ rsp = json.loads(data)
+
+ if rsp['stat'] == 'fail':
+ raise APIError, rsp
+
+ return rsp
+
+ def http_get(self, path):
+ """
+ Performs an HTTP GET on the specified path, storing any cookies that
+ were set.
+ """
+ debug('HTTP GETting %s' % path)
+
+ url = self._make_url(path)
+
+ try:
+ rsp = urllib2.urlopen(url).read()
+ self.cookie_jar.save(self.cookie_file)
+ return rsp
+ except urllib2.HTTPError, e:
+ print "Unable to access %s (%s). The host path may be invalid" % \
+ (url, e.code)
+ try:
+ debug(e.read())
+ except AttributeError:
+ pass
+ die()
+
+ def _make_url(self, path):
+ """Given a path on the server returns a full http:// style url"""
+ app = urlparse(self.url)[2]
+ if path[0] == '/':
+ url = urljoin(self.url, app[:-1] + path)
+ else:
+ url = urljoin(self.url, app + path)
+
+ if not url.startswith('http'):
+ url = 'http://%s' % url
+ return url
+
+ def api_get(self, path):
+ """
+ Performs an API call using HTTP GET at the specified path.
+ """
+ return self.process_json(self.http_get(path))
+
+ def http_post(self, path, fields, files=None):
+ """
+ Performs an HTTP POST on the specified path, storing any cookies that
+ were set.
+ """
+ if fields:
+ debug_fields = fields.copy()
+ else:
+ debug_fields = {}
+
+ if 'password' in debug_fields:
+ debug_fields["password"] = "**************"
+ url = self._make_url(path)
+ debug('HTTP POSTing to %s: %s' % (url, debug_fields))
+
+ content_type, body = self._encode_multipart_formdata(fields, files)
+ headers = {
+ 'Content-Type': content_type,
+ 'Content-Length': str(len(body))
+ }
+
+ try:
+ r = urllib2.Request(url, body, headers)
+ data = urllib2.urlopen(r).read()
+ self.cookie_jar.save(self.cookie_file)
+ return data
+ except urllib2.URLError, e:
+ try:
+ debug(e.read())
+ except AttributeError:
+ pass
+
+ die("Unable to access %s. The host path may be invalid\n%s" % \
+ (url, e))
+ except urllib2.HTTPError, e:
+ die("Unable to access %s (%s). The host path may be invalid\n%s" % \
+ (url, e.code, e.read()))
+
+ def api_post(self, path, fields=None, files=None):
+ """
+ Performs an API call using HTTP POST at the specified path.
+ """
+ return self.process_json(self.http_post(path, fields, files))
+
+ def _encode_multipart_formdata(self, fields, files):
+ """
+ Encodes data for use in an HTTP POST.
+ """
+ BOUNDARY = mimetools.choose_boundary()
+ content = ""
+
+ fields = fields or {}
+ files = files or {}
+
+ for key in fields:
+ content += "--" + BOUNDARY + "\r\n"
+ content += "Content-Disposition: form-data; name=\"%s\"\r\n" % key
+ content += "\r\n"
+ content += fields[key] + "\r\n"
+
+ for key in files:
+ filename = files[key]['filename']
+ value = files[key]['content']
+ content += "--" + BOUNDARY + "\r\n"
+ content += "Content-Disposition: form-data; name=\"%s\"; " % key
+ content += "filename=\"%s\"\r\n" % filename
+ content += "\r\n"
+ content += value + "\r\n"
+
+ content += "--" + BOUNDARY + "--\r\n"
+ content += "\r\n"
+
+ content_type = "multipart/form-data; boundary=%s" % BOUNDARY
+
+ return content_type, content
+
+
+class SCMClient(object):
+ """
+ A base representation of an SCM tool for fetching repository information
+ and generating diffs.
+ """
+ def get_repository_info(self):
+ return None
+
+ def scan_for_server(self, repository_info):
+ """
+ Scans the current directory on up to find a .reviewboard file
+ containing the server path.
+ """
+ server_url = self._get_server_from_config(user_config, repository_info)
+ if server_url:
+ return server_url
+
+ for path in walk_parents(os.getcwd()):
+ filename = os.path.join(path, ".reviewboardrc")
+ if os.path.exists(filename):
+ config = load_config_file(filename)
+ server_url = self._get_server_from_config(config,
+ repository_info)
+ if server_url:
+ return server_url
+
+ return None
+
+ def diff(self, args):
+ """
+ Returns the generated diff and optional parent diff for this
+ repository.
+
+ The returned tuple is (diff_string, parent_diff_string)
+ """
+ return (None, None)
+
+ def diff_between_revisions(self, revision_range, args, repository_info):
+ """
+ Returns the generated diff between revisions in the repository.
+ """
+ return None
+
+ def _get_server_from_config(self, config, repository_info):
+ if 'REVIEWBOARD_URL' in config:
+ return config['REVIEWBOARD_URL']
+ elif 'TREES' in config:
+ trees = config['TREES']
+ if not isinstance(trees, dict):
+ die("Warning: 'TREES' in config file is not a dict!")
+
+ if repository_info.path in trees and \
+ 'REVIEWBOARD_URL' in trees[repository_info.path]:
+ return trees[repository_info.path]['REVIEWBOARD_URL']
+
+ return None
+
+
+class CVSClient(SCMClient):
+ """
+ A wrapper around the cvs tool that fetches repository
+ information and generates compatible diffs.
+ """
+ def get_repository_info(self):
+ if not check_install("cvs"):
+ return None
+
+ cvsroot_path = os.path.join("CVS", "Root")
+
+ if not os.path.exists(cvsroot_path):
+ return None
+
+ fp = open(cvsroot_path, "r")
+ repository_path = fp.read().strip()
+ fp.close()
+
+ i = repository_path.find("@")
+ if i != -1:
+ repository_path = repository_path[i + 1:]
+
+ i = repository_path.find(":")
+ if i != -1:
+ host = repository_path[:i]
+ try:
+ canon = socket.getfqdn(host)
+ repository_path = repository_path.replace('%s:' % host,
+ '%s:' % canon)
+ except socket.error, msg:
+ debug("failed to get fqdn for %s, msg=%s" % (host, msg))
+
+ return RepositoryInfo(path=repository_path)
+
+ def diff(self, files):
+ """
+ Performs a diff across all modified files in a CVS repository.
+
+ CVS repositories do not support branches of branches in a way that
+ makes parent diffs possible, so we never return a parent diff
+ (the second value in the tuple).
+ """
+ return (self.do_diff(files), None)
+
+ def diff_between_revisions(self, revision_range, args, repository_info):
+ """
+ Performs a diff between 2 revisions of a CVS repository.
+ """
+ revs = []
+
+ for rev in revision_range.split(":"):
+ revs += ["-r", rev]
+
+ return self.do_diff(revs)
+
+ def do_diff(self, params):
+ """
+ Performs the actual diff operation through cvs diff, handling
+ fake errors generated by CVS.
+ """
+ # Diff returns "1" if differences were found.
+ return execute(["cvs", "diff", "-uN"] + params,
+ extra_ignore_errors=(1,))
+
+
+class ClearCaseClient(SCMClient):
+ """
+ A wrapper around the clearcase tool that fetches repository
+ information and generates compatible diffs.
+ This client assumes that cygwin is installed on windows.
+ """
+ ccroot_path = "/view/reviewboard.diffview/vobs/"
+ viewinfo = ""
+ viewtype = "snapshot"
+
+ def get_filename_hash(self, fname):
+ # Hash the filename string so its easy to find the file later on.
+ return md5(fname).hexdigest()
+
+ def get_repository_info(self):
+ if not check_install('cleartool help'):
+ return None
+
+ # We must be running this from inside a view.
+ # Otherwise it doesn't make sense.
+ self.viewinfo = execute(["cleartool", "pwv", "-short"])
+ if self.viewinfo.startswith('\*\* NONE'):
+ return None
+
+ # Returning the hardcoded clearcase root path to match the server
+ # respository path.
+ # There is no reason to have a dynamic path unless you have
+ # multiple clearcase repositories. This should be implemented.
+ return RepositoryInfo(path=self.ccroot_path,
+ base_path=self.ccroot_path,
+ supports_parent_diffs=False)
+
+ def get_previous_version(self, files):
+ file = []
+ curdir = os.getcwd()
+
+ # Cygwin case must transform a linux-like path to windows like path
+ # including drive letter.
+ if 'cygdrive' in curdir:
+ where = curdir.index('cygdrive') + 9
+ drive_letter = curdir[where:where+1]
+ curdir = drive_letter + ":\\" + curdir[where+2:len(curdir)]
+
+ for key in files:
+ # Sometimes there is a quote in the filename. It must be removed.
+ key = key.replace('\'', '')
+ elem_path = cpath.normpath(os.path.join(curdir, key))
+
+ # Removing anything before the last /vobs
+ # because it may be repeated.
+ elem_path_idx = elem_path.rfind("/vobs")
+ if elem_path_idx != -1:
+ elem_path = elem_path[elem_path_idx:len(elem_path)].strip("\"")
+
+ # Call cleartool to get this version and the previous version
+ # of the element.
+ curr_version, pre_version = execute(
+ ["cleartool", "desc", "-pre", elem_path])
+ curr_version = cpath.normpath(curr_version)
+ pre_version = pre_version.split(':')[1].strip()
+
+ # If a specific version was given, remove it from the path
+ # to avoid version duplication
+ if "@@" in elem_path:
+ elem_path = elem_path[:elem_path.rfind("@@")]
+ file.append(elem_path + "@@" + pre_version)
+ file.append(curr_version)
+
+ # Determnine if the view type is snapshot or dynamic.
+ if os.path.exists(file[0]):
+ self.viewtype = "dynamic"
+
+ return file
+
+ def get_extended_namespace(self, files):
+ """
+ Parses the file path to get the extended namespace
+ """
+ versions = self.get_previous_version(files)
+
+ evfiles = []
+ hlist = []
+
+ for vkey in versions:
+ # Verify if it is a checkedout file.
+ if "CHECKEDOUT" in vkey:
+ # For checkedout files just add it to the file list
+ # since it cannot be accessed outside the view.
+ splversions = vkey[:vkey.rfind("@@")]
+ evfiles.append(splversions)
+ else:
+ # For checkedin files.
+ ext_path = []
+ ver = []
+ fname = "" # fname holds the file name without the version.
+ (bpath, fpath) = cpath.splitdrive(vkey)
+ if bpath :
+ # Windows.
+ # The version (if specified like file.c@@/main/1)
+ # should be kept as a single string
+ # so split the path and concat the file name
+ # and version in the last position of the list.
+ ver = fpath.split("@@")
+ splversions = fpath[:vkey.rfind("@@")].split("\\")
+ fname = splversions.pop()
+ splversions.append(fname + ver[1])
+ else :
+ # Linux.
+ bpath = vkey[:vkey.rfind("vobs")+4]
+ fpath = vkey[vkey.rfind("vobs")+5:]
+ ver = fpath.split("@@")
+ splversions = ver[0][:vkey.rfind("@@")].split("/")
+ fname = splversions.pop()
+ splversions.append(fname + ver[1])
+
+ filename = splversions.pop()
+ bpath = cpath.normpath(bpath + "/")
+ elem_path = bpath
+
+ for key in splversions:
+ # For each element (directory) in the path,
+ # get its version from clearcase.
+ elem_path = cpath.join(elem_path, key)
+
+ # This is the version to be appended to the extended
+ # path list.
+ this_version = execute(
+ ["cleartool", "desc", "-fmt", "%Vn",
+ cpath.normpath(elem_path)])
+ if this_version:
+ ext_path.append(key + "/@@" + this_version + "/")
+ else:
+ ext_path.append(key + "/")
+
+ # This must be done in case we haven't specified
+ # the version on the command line.
+ ext_path.append(cpath.normpath(fname + "/@@" +
+ vkey[vkey.rfind("@@")+2:len(vkey)]))
+ epstr = cpath.join(bpath, cpath.normpath(''.join(ext_path)))
+ evfiles.append(epstr)
+
+ """
+ In windows, there is a problem with long names(> 254).
+ In this case, we hash the string and copy the unextended
+ filename to a temp file whose name is the hash.
+ This way we can get the file later on for diff.
+ The same problem applies to snapshot views where the
+ extended name isn't available.
+ The previous file must be copied from the CC server
+ to a local dir.
+ """
+ if cpath.exists(epstr) :
+ pass
+ else:
+ if len(epstr) > 254 or self.viewtype == "snapshot":
+ name = self.get_filename_hash(epstr)
+ # Check if this hash is already in the list
+ try:
+ i = hlist.index(name)
+ die("ERROR: duplicate value %s : %s" %
+ (name, epstr))
+ except ValueError:
+ hlist.append(name)
+
+ normkey = cpath.normpath(vkey)
+ td = tempfile.gettempdir()
+ # Cygwin case must transform a linux-like path to
+ # windows like path including drive letter
+ if 'cygdrive' in td:
+ where = td.index('cygdrive') + 9
+ drive_letter = td[where:where+1] + ":"
+ td = cpath.join(drive_letter, td[where+1:])
+ tf = cpath.normpath(cpath.join(td, name))
+ if cpath.exists(tf):
+ debug("WARNING: FILE EXISTS")
+ os.unlink(tf)
+ execute(["cleartool", "get", "-to", tf, normkey])
+ else:
+ die("ERROR: FILE NOT FOUND : %s" % epstr)
+
+ return evfiles
+
+ def get_files_from_label(self, label):
+ voblist=[]
+ # Get the list of vobs for the current view
+ allvoblist = execute(["cleartool", "lsvob", "-short"]).split()
+ # For each vob, find if the label is present
+ for vob in allvoblist:
+ try:
+ execute(["cleartool", "describe", "-local",
+ "lbtype:%s@%s" % (label, vob)]).split()
+ voblist.append(vob)
+ except:
+ pass
+
+ filelist=[]
+ # For each vob containing the label, get the file list
+ for vob in voblist:
+ try:
+ res = execute(["cleartool", "find", vob, "-all", "-version",
+ "lbtype(%s)" % label, "-print"])
+ filelist.extend(res.split())
+ except :
+ pass
+
+ # Return only the unique itens
+ return set(filelist)
+
+ def diff(self, files):
+ """
+ Performs a diff of the specified file and its previous version.
+ """
+ # We must be running this from inside a view.
+ # Otherwise it doesn't make sense.
+ return self.do_diff(self.get_extended_namespace(files))
+
+ def diff_label(self, label):
+ """
+ Get the files that are attached to a label and diff them
+ TODO
+ """
+ return self.diff(self.get_files_from_label(label))
+
+ def diff_between_revisions(self, revision_range, args, repository_info):
+ """
+ Performs a diff between 2 revisions of a CC repository.
+ """
+ rev_str = ''
+
+ for rev in revision_range.split(":"):
+ rev_str += "-r %s " % rev
+
+ return self.do_diff(rev_str)
+
+ def do_diff(self, params):
+ # Diff returns "1" if differences were found.
+ # Add the view name and view type to the description
+ if options.description:
+ options.description = ("VIEW: " + self.viewinfo +
+ "VIEWTYPE: " + self.viewtype + "\n" + options.description)
+ else:
+ options.description = (self.viewinfo +
+ "VIEWTYPE: " + self.viewtype + "\n")
+
+ o = []
+ Feol = False
+ while len(params) > 0:
+ # Read both original and modified files.
+ onam = params.pop(0)
+ mnam = params.pop(0)
+ file_data = []
+ do_rem = False
+ # If the filename length is greater than 254 char for windows,
+ # we copied the file to a temp file
+ # because the open will not work for path greater than 254.
+ # This is valid for the original and
+ # modified files if the name size is > 254.
+ for filenam in (onam, mnam) :
+ if cpath.exists(filenam) and self.viewtype == "dynamic":
+ do_rem = False
+ fn = filenam
+ elif len(filenam) > 254 or self.viewtype == "snapshot":
+ fn = self.get_filename_hash(filenam)
+ fn = cpath.join(tempfile.gettempdir(), fn)
+ do_rem = True
+ fd = open(cpath.normpath(fn))
+ fdata = fd.readlines()
+ fd.close()
+ file_data.append(fdata)
+ # If the file was temp, it should be removed.
+ if do_rem:
+ os.remove(filenam)
+
+ modi = file_data.pop()
+ orig = file_data.pop()
+
+ # For snapshot views, the local directories must be removed because
+ # they will break the diff on the server. Just replacing
+ # everything before the view name (including the view name) for
+ # vobs do the work.
+ if (self.viewtype == "snapshot"
+ and (sys.platform.startswith('win')
+ or sys.platform.startswith('cygwin'))):
+ vinfo = self.viewinfo.rstrip("\r\n")
+ mnam = "c:\\\\vobs" + mnam[mnam.rfind(vinfo) + len(vinfo):]
+ onam = "c:\\\\vobs" + onam[onam.rfind(vinfo) + len(vinfo):]
+ # Call the diff lib to generate a diff.
+ # The dates are bogus, since they don't natter anyway.
+ # The only thing is that two spaces are needed to the server
+ # so it can identify the heades correctly.
+ diff = difflib.unified_diff(orig, modi, onam, mnam,
+ ' 2002-02-21 23:30:39.942229878 -0800',
+ ' 2002-02-21 23:30:50.442260588 -0800', lineterm=' \n')
+ # Transform the generator output into a string output
+ # Use a comprehension instead of a generator,
+ # so 2.3.x doesn't fail to interpret.
+ diffstr = ''.join([str(l) for l in diff])
+ # Workaround for the difflib no new line at end of file
+ # problem.
+ if not diffstr.endswith('\n'):
+ diffstr = diffstr + ("\n\\ No newline at end of file\n")
+ o.append(diffstr)
+
+ ostr = ''.join(o)
+ return (ostr, None) # diff, parent_diff (not supported)
+
+
+class SVNClient(SCMClient):
+ """
+ A wrapper around the svn Subversion tool that fetches repository
+ information and generates compatible diffs.
+ """
+ def get_repository_info(self):
+ if not check_install('svn help'):
+ return None
+
+ # Get the SVN repository path (either via a working copy or
+ # a supplied URI)
+ svn_info_params = ["svn", "info"]
+ if options.repository_url:
+ svn_info_params.append(options.repository_url)
+ data = execute(svn_info_params,
+ ignore_errors=True)
+ m = re.search(r'^Repository Root: (.+)$', data, re.M)
+ if not m:
+ return None
+
+ path = m.group(1)
+
+ m = re.search(r'^URL: (.+)$', data, re.M)
+ if not m:
+ return None
+
+ base_path = m.group(1)[len(path):] or "/"
+
+ m = re.search(r'^Repository UUID: (.+)$', data, re.M)
+ if not m:
+ return None
+
+ return SvnRepositoryInfo(path, base_path, m.group(1))
+
+ def scan_for_server(self, repository_info):
+ # Scan first for dot files, since it's faster and will cover the
+ # user's $HOME/.reviewboardrc
+ server_url = super(SVNClient, self).scan_for_server(repository_info)
+ if server_url:
+ return server_url
+
+ return self.scan_for_server_property(repository_info)
+
+ def scan_for_server_property(self, repository_info):
+ def get_url_prop(path):
+ url = execute(["svn", "propget", "reviewboard:url", path]).strip()
+ return url or None
+
+ for path in walk_parents(os.getcwd()):
+ if not os.path.exists(os.path.join(path, ".svn")):
+ break
+
+ prop = get_url_prop(path)
+ if prop:
+ return prop
+
+ return get_url_prop(repository_info.path)
+
+ def diff(self, files):
+ """
+ Performs a diff across all modified files in a Subversion repository.
+
+ SVN repositories do not support branches of branches in a way that
+ makes parent diffs possible, so we never return a parent diff
+ (the second value in the tuple).
+ """
+ return (self.do_diff(["svn", "diff", "--diff-cmd=diff"] + files),
+ None)
+
+ def diff_between_revisions(self, revision_range, args, repository_info):
+ """
+ Performs a diff between 2 revisions of a Subversion repository.
+ """
+ if options.repository_url:
+ revisions = revision_range.split(':')
+ if len(revisions) < 1:
+ return None
+ elif len(revisions) == 1:
+ revisions.append('HEAD')
+
+ # if a new path was supplied at the command line, set it
+ if len(args):
+ repository_info.set_base_path(args[0])
+
+ url = repository_info.path + repository_info.base_path
+
+ old_url = url + '@' + revisions[0]
+ new_url = url + '@' + revisions[1]
+
+ return self.do_diff(["svn", "diff", "--diff-cmd=diff", old_url,
+ new_url],
+ repository_info)
+ # Otherwise, perform the revision range diff using a working copy
+ else:
+ return self.do_diff(["svn", "diff", "--diff-cmd=diff", "-r",
+ revision_range],
+ repository_info)
+
+ def do_diff(self, cmd, repository_info=None):
+ """
+ Performs the actual diff operation, handling renames and converting
+ paths to absolute.
+ """
+ diff = execute(cmd, split_lines=True)
+ diff = self.handle_renames(diff)
+ diff = self.convert_to_absolute_paths(diff, repository_info)
+
+ return ''.join(diff)
+
+ def handle_renames(self, diff_content):
+ """
+ The output of svn diff is incorrect when the file in question came
+ into being via svn mv/cp. Although the patch for these files are
+ relative to its parent, the diff header doesn't reflect this.
+ This function fixes the relevant section headers of the patch to
+ portray this relationship.
+ """
+
+ # svn diff against a repository URL on two revisions appears to
+ # handle moved files properly, so only adjust the diff file names
+ # if they were created using a working copy.
+ if options.repository_url:
+ return diff_content
+
+ result = []
+
+ from_line = ""
+ for line in diff_content:
+ if line.startswith('--- '):
+ from_line = line
+ continue
+
+ # This is where we decide how mangle the previous '--- '
+ if line.startswith('+++ '):
+ to_file, _ = self.parse_filename_header(line[4:])
+ info = self.svn_info(to_file)
+ if info.has_key("Copied From URL"):
+ url = info["Copied From URL"]
+ root = info["Repository Root"]
+ from_file = urllib.unquote(url[len(root):])
+ result.append(from_line.replace(to_file, from_file))
+ else:
+ result.append(from_line) #as is, no copy performed
+
+ # We only mangle '---' lines. All others get added straight to
+ # the output.
+ result.append(line)
+
+ return result
+
+
+ def convert_to_absolute_paths(self, diff_content, repository_info):
+ """
+ Converts relative paths in a diff output to absolute paths.
+ This handles paths that have been svn switched to other parts of the
+ repository.
+ """
+
+ result = []
+
+ for line in diff_content:
+ front = None
+ if line.startswith('+++ ') or line.startswith('--- ') or line.startswith('Index: '):
+ front, line = line.split(" ", 1)
+
+ if front:
+ if line.startswith('/'): #already absolute
+ line = front + " " + line
+ else:
+ # filename and rest of line (usually the revision
+ # component)
+ file, rest = self.parse_filename_header(line)
+
+ # If working with a diff generated outside of a working
+ # copy, then file paths are already absolute, so just
+ # add initial slash.
+ if options.repository_url:
+ path = urllib.unquote(
+ "%s/%s" % (repository_info.base_path, file))
+ else:
+ info = self.svn_info(file)
+ url = info["URL"]
+ root = info["Repository Root"]
+ path = urllib.unquote(url[len(root):])
+
+ line = front + " " + path + rest
+
+ result.append(line)
+
+ return result
+
+ def svn_info(self, path):
+ """Return a dict which is the result of 'svn info' at a given path."""
+ svninfo = {}
+ for info in execute(["svn", "info", path],
+ split_lines=True):
+ parts = info.strip().split(": ", 1)
+ if len(parts) == 2:
+ key, value = parts
+ svninfo[key] = value
+
+ return svninfo
+
+ # Adapted from server code parser.py
+ def parse_filename_header(self, s):
+ parts = None
+ if "\t" in s:
+ # There's a \t separating the filename and info. This is the
+ # best case scenario, since it allows for filenames with spaces
+ # without much work.
+ parts = s.split("\t")
+
+ # There's spaces being used to separate the filename and info.
+ # This is technically wrong, so all we can do is assume that
+ # 1) the filename won't have multiple consecutive spaces, and
+ # 2) there's at least 2 spaces separating the filename and info.
+ if " " in s:
+ parts = re.split(r" +", s)
+
+ if parts:
+ parts[1] = '\t' + parts[1]
+ return parts
+
+ # strip off ending newline, and return it as the second component
+ return [s.split('\n')[0], '\n']
+
+
+class PerforceClient(SCMClient):
+ """
+ A wrapper around the p4 Perforce tool that fetches repository information
+ and generates compatible diffs.
+ """
+ def get_repository_info(self):
+ if not check_install('p4 help'):
+ return None
+
+ data = execute(["p4", "info"], ignore_errors=True)
+
+ m = re.search(r'^Server address: (.+)$', data, re.M)
+ if not m:
+ return None
+
+ repository_path = m.group(1).strip()
+
+ try:
+ hostname, port = repository_path.split(":")
+ info = socket.gethostbyaddr(hostname)
+ repository_path = "%s:%s" % (info[0], port)
+ except (socket.gaierror, socket.herror):
+ pass
+
+ return RepositoryInfo(path=repository_path, supports_changesets=True)
+
+ def scan_for_server(self, repository_info):
+ # Scan first for dot files, since it's faster and will cover the
+ # user's $HOME/.reviewboardrc
+ server_url = \
+ super(PerforceClient, self).scan_for_server(repository_info)
+
+ if server_url:
+ return server_url
+
+ return self.scan_for_server_counter(repository_info)
+
+ def scan_for_server_counter(self, repository_info):
+ """
+ Checks the Perforce counters to see if the Review Board server's url
+ is specified. Since Perforce only started supporting non-numeric
+ counter values in server version 2008.1, we support both a normal
+ counter 'reviewboard.url' with a string value and embedding the url in
+ a counter name like 'reviewboard.url.http:||reviewboard.example.com'.
+ Note that forward slashes aren't allowed in counter names, so
+ pipe ('|') characters should be used. These should be safe because they
+ should not be used unencoded in urls.
+ """
+
+ counters_text = execute(["p4", "counters"])
+
+ # Try for a "reviewboard.url" counter first.
+ m = re.search(r'^reviewboard.url = (\S+)', counters_text, re.M)
+
+ if m:
+ return m.group(1)
+
+ # Next try for a counter of the form:
+ # reviewboard_url.http:||reviewboard.example.com
+ m2 = re.search(r'^reviewboard.url\.(\S+)', counters_text, re.M)
+
+ if m2:
+ return m2.group(1).replace('|', '/')
+
+ return None
+
+ def get_changenum(self, args):
+ if len(args) == 1:
+ try:
+ return str(int(args[0]))
+ except ValueError:
+ pass
+ return None
+
+ def diff(self, args):
+ """
+ Goes through the hard work of generating a diff on Perforce in order
+ to take into account adds/deletes and to provide the necessary
+ revision information.
+ """
+ # set the P4 enviroment:
+ if options.p4_client:
+ os.environ['P4CLIENT'] = options.p4_client
+
+ if options.p4_port:
+ os.environ['P4PORT'] = options.p4_port
+
+ changenum = self.get_changenum(args)
+ if changenum is None:
+ return self._path_diff(args)
+ else:
+ return self._changenum_diff(changenum)
+
+
+ def _path_diff(self, args):
+ """
+ Process a path-style diff. See _changenum_diff for the alternate
+ version that handles specific change numbers.
+
+ Multiple paths may be specified in `args`. The path styles supported
+ are:
+
+ //path/to/file
+ Upload file as a "new" file.
+
+ //path/to/dir/...
+ Upload all files as "new" files.
+
+ //path/to/file[@#]rev
+ Upload file from that rev as a "new" file.
+
+ //path/to/file[@#]rev,[@#]rev
+ Upload a diff between revs.
+
+ //path/to/dir/...[@#]rev,[@#]rev
+ Upload a diff of all files between revs in that directory.
+ """
+ r_revision_range = re.compile(r'^(?P<path>//[^@#]+)' +
+ r'(?P<revision1>[#@][^,]+)?' +
+ r'(?P<revision2>,[#@][^,]+)?$')
+
+ empty_filename = make_tempfile()
+ tmp_diff_from_filename = make_tempfile()
+ tmp_diff_to_filename = make_tempfile()
+
+ diff_lines = []
+
+ for path in args:
+ m = r_revision_range.match(path)
+
+ if not m:
+ die('Path %r does not match a valid Perforce path.' % (path,))
+ revision1 = m.group('revision1')
+ revision2 = m.group('revision2')
+ first_rev_path = m.group('path')
+
+ if revision1:
+ first_rev_path += revision1
+ records = self._run_p4(['files', first_rev_path])
+
+ # Make a map for convenience.
+ files = {}
+
+ # Records are:
+ # 'rev': '1'
+ # 'func': '...'
+ # 'time': '1214418871'
+ # 'action': 'edit'
+ # 'type': 'ktext'
+ # 'depotFile': '...'
+ # 'change': '123456'
+ for record in records:
+ if record['action'] != 'delete':
+ if revision2:
+ files[record['depotFile']] = [record, None]
+ else:
+ files[record['depotFile']] = [None, record]
+
+ if revision2:
+ # [1:] to skip the comma.
+ second_rev_path = m.group('path') + revision2[1:]
+ records = self._run_p4(['files', second_rev_path])
+ for record in records:
+ if record['action'] != 'delete':
+ try:
+ m = files[record['depotFile']]
+ m[1] = record
+ except KeyError:
+ files[record['depotFile']] = [None, record]
+
+ old_file = new_file = empty_filename
+ changetype_short = None
+
+ for depot_path, (first_record, second_record) in files.items():
+ old_file = new_file = empty_filename
+ if first_record is None:
+ self._write_file(depot_path + '#' + second_record['rev'],
+ tmp_diff_to_filename)
+ new_file = tmp_diff_to_filename
+ changetype_short = 'A'
+ base_revision = 0
+ elif second_record is None:
+ self._write_file(depot_path + '#' + first_record['rev'],
+ tmp_diff_from_filename)
+ old_file = tmp_diff_from_filename
+ changetype_short = 'D'
+ base_revision = int(first_record['rev'])
+ else:
+ self._write_file(depot_path + '#' + first_record['rev'],
+ tmp_diff_from_filename)
+ self._write_file(depot_path + '#' + second_record['rev'],
+ tmp_diff_to_filename)
+ new_file = tmp_diff_to_filename
+ old_file = tmp_diff_from_filename
+ changetype_short = 'M'
+ base_revision = int(first_record['rev'])
+
+ dl = self._do_diff(old_file, new_file, depot_path,
+ base_revision, changetype_short,
+ ignore_unmodified=True)
+ diff_lines += dl
+
+ os.unlink(empty_filename)
+ os.unlink(tmp_diff_from_filename)
+ os.unlink(tmp_diff_to_filename)
+ return (''.join(diff_lines), None)
+
+ def _run_p4(self, command):
+ """Execute a perforce command using the python marshal API.
+
+ - command: A list of strings of the command to execute.
+
+ The return type depends on the command being run.
+ """
+ command = ['p4', '-G'] + command
+ p = subprocess.Popen(command, stdout=subprocess.PIPE)
+ result = []
+ has_error = False
+
+ while 1:
+ try:
+ data = marshal.load(p.stdout)
+ except EOFError:
+ break
+ else:
+ result.append(data)
+ if data.get('code', None) == 'error':
+ has_error = True
+
+ rc = p.wait()
+
+ if rc or has_error:
+ for record in result:
+ if 'data' in record:
+ print record['data']
+ die('Failed to execute command: %s\n' % (command,))
+
+ return result
+
+ def _changenum_diff(self, changenum):
+ """
+ Process a diff for a particular change number. This handles both
+ pending and submitted changelists.
+
+ See _path_diff for the alternate version that does diffs of depot
+ paths.
+ """
+ # TODO: It might be a good idea to enhance PerforceDiffParser to
+ # understand that newFile could include a revision tag for post-submit
+ # reviewing.
+ cl_is_pending = False
+
+ debug("Generating diff for changenum %s" % changenum)
+
+ description = execute(["p4", "describe", "-s", changenum],
+ split_lines=True)
+
+ if '*pending*' in description[0]:
+ cl_is_pending = True
+
+ # Get the file list
+ for line_num, line in enumerate(description):
+ if 'Affected files ...' in line:
+ break
+ else:
+ # Got to the end of all the description lines and didn't find
+ # what we were looking for.
+ die("Couldn't find any affected files for this change.")
+
+ description = description[line_num+2:]
+
+ diff_lines = []
+
+ empty_filename = make_tempfile()
+ tmp_diff_from_filename = make_tempfile()
+ tmp_diff_to_filename = make_tempfile()
+
+ for line in description:
+ line = line.strip()
+ if not line:
+ continue
+
+ m = re.search(r'\.\.\. ([^#]+)#(\d+) (add|edit|delete|integrate|branch)', line)
+ if not m:
+ die("Unsupported line from p4 opened: %s" % line)
+
+ depot_path = m.group(1)
+ base_revision = int(m.group(2))
+ if not cl_is_pending:
+ # If the changelist is pending our base revision is the one that's
+ # currently in the depot. If we're not pending the base revision is
+ # actually the revision prior to this one
+ base_revision -= 1
+
+ changetype = m.group(3)
+
+ debug('Processing %s of %s' % (changetype, depot_path))
+
+ old_file = new_file = empty_filename
+ old_depot_path = new_depot_path = None
+ changetype_short = None
+
+ if changetype == 'edit' or changetype == 'integrate':
+ # A big assumption
+ new_revision = base_revision + 1
+
+ # We have an old file, get p4 to take this old version from the
+ # depot and put it into a plain old temp file for us
+ old_depot_path = "%s#%s" % (depot_path, base_revision)
+ self._write_file(old_depot_path, tmp_diff_from_filename)
+ old_file = tmp_diff_from_filename
+
+ # Also print out the new file into a tmpfile
+ if cl_is_pending:
+ new_file = self._depot_to_local(depot_path)
+ else:
+ new_depot_path = "%s#%s" %(depot_path, new_revision)
+ self._write_file(new_depot_path, tmp_diff_to_filename)
+ new_file = tmp_diff_to_filename
+
+ changetype_short = "M"
+
+ elif changetype == 'add' or changetype == 'branch':
+ # We have a new file, get p4 to put this new file into a pretty
+ # temp file for us. No old file to worry about here.
+ if cl_is_pending:
+ new_file = self._depot_to_local(depot_path)
+ else:
+ self._write_file(depot_path, tmp_diff_to_filename)
+ new_file = tmp_diff_to_filename
+ changetype_short = "A"
+
+ elif changetype == 'delete':
+ # We've deleted a file, get p4 to put the deleted file into a temp
+ # file for us. The new file remains the empty file.
+ old_depot_path = "%s#%s" % (depot_path, base_revision)
+ self._write_file(old_depot_path, tmp_diff_from_filename)
+ old_file = tmp_diff_from_filename
+ changetype_short = "D"
+ else:
+ die("Unknown change type '%s' for %s" % (changetype, depot_path))
+
+ dl = self._do_diff(old_file, new_file, depot_path, base_revision, changetype_short)
+ diff_lines += dl
+
+ os.unlink(empty_filename)
+ os.unlink(tmp_diff_from_filename)
+ os.unlink(tmp_diff_to_filename)
+ return (''.join(diff_lines), None)
+
+ def _do_diff(self, old_file, new_file, depot_path, base_revision,
+ changetype_short, ignore_unmodified=False):
+ """
+ Do the work of producing a diff for Perforce.
+
+ old_file - The absolute path to the "old" file.
+ new_file - The absolute path to the "new" file.
+ depot_path - The depot path in Perforce for this file.
+ base_revision - The base perforce revision number of the old file as
+ an integer.
+ changetype_short - The change type as a single character string.
+ ignore_unmodified - If True, will return an empty list if the file
+ is not changed.
+
+ Returns a list of strings of diff lines.
+ """
+ if hasattr(os, 'uname') and os.uname()[0] == 'SunOS':
+ diff_cmd = ["gdiff", "-urNp", old_file, new_file]
+ else:
+ diff_cmd = ["diff", "-urNp", old_file, new_file]
+ # Diff returns "1" if differences were found.
+ dl = execute(diff_cmd, extra_ignore_errors=(1,2),
+ translate_newlines=False)
+
+ # If the input file has ^M characters at end of line, lets ignore them.
+ dl = dl.replace('\r\r\n', '\r\n')
+ dl = dl.splitlines(True)
+
+ cwd = os.getcwd()
+ if depot_path.startswith(cwd):
+ local_path = depot_path[len(cwd) + 1:]
+ else:
+ local_path = depot_path
+
+ # Special handling for the output of the diff tool on binary files:
+ # diff outputs "Files a and b differ"
+ # and the code below expects the output to start with
+ # "Binary files "
+ if len(dl) == 1 and \
+ dl[0] == ('Files %s and %s differ'% (old_file, new_file)):
+ dl = ['Binary files %s and %s differ'% (old_file, new_file)]
+
+ if dl == [] or dl[0].startswith("Binary files "):
+ if dl == []:
+ if ignore_unmodified:
+ return []
+ else:
+ print "Warning: %s in your changeset is unmodified" % \
+ local_path
+
+ dl.insert(0, "==== %s#%s ==%s== %s ====\n" % \
+ (depot_path, base_revision, changetype_short, local_path))
+ dl.append('\n')
+ else:
+ m = re.search(r'(\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d)', dl[1])
+ if m:
+ timestamp = m.group(1)
+ else:
+ # Thu Sep 3 11:24:48 2007
+ m = re.search(r'(\w+)\s+(\w+)\s+(\d+)\s+(\d\d:\d\d:\d\d)\s+(\d\d\d\d)', dl[1])
+ if not m:
+ die("Unable to parse diff header: %s" % dl[1])
+
+ month_map = {
+ "Jan": "01",
+ "Feb": "02",
+ "Mar": "03",
+ "Apr": "04",
+ "May": "05",
+ "Jun": "06",
+ "Jul": "07",
+ "Aug": "08",
+ "Sep": "09",
+ "Oct": "10",
+ "Nov": "11",
+ "Dec": "12",
+ }
+ month = month_map[m.group(2)]
+ day = m.group(3)
+ timestamp = m.group(4)
+ year = m.group(5)
+
+ timestamp = "%s-%s-%s %s" % (year, month, day, timestamp)
+
+ dl[0] = "--- %s\t%s#%s\n" % (local_path, depot_path, base_revision)
+ dl[1] = "+++ %s\t%s\n" % (local_path, timestamp)
+
+ return dl
+
+ def _write_file(self, depot_path, tmpfile):
+ """
+ Grabs a file from Perforce and writes it to a temp file. p4 print sets
+ the file readonly and that causes a later call to unlink fail. So we
+ make the file read/write.
+ """
+ debug('Writing "%s" to "%s"' % (depot_path, tmpfile))
+ execute(["p4", "print", "-o", tmpfile, "-q", depot_path])
+ os.chmod(tmpfile, stat.S_IREAD | stat.S_IWRITE)
+
+ def _depot_to_local(self, depot_path):
+ """
+ Given a path in the depot return the path on the local filesystem to
+ the same file. If there are multiple results, take only the last
+ result from the where command.
+ """
+ where_output = self._run_p4(['where', depot_path])
+ return where_output[-1]['path']
+
+
+class MercurialClient(SCMClient):
+ """
+ A wrapper around the hg Mercurial tool that fetches repository
+ information and generates compatible diffs.
+ """
+ def get_repository_info(self):
+ if not check_install('hg --help'):
+ return None
+
+ data = execute(["hg", "root"], ignore_errors=True)
+ if data.startswith('abort:'):
+ # hg aborted => no mercurial repository here.
+ return None
+
+ # Elsewhere, hg root output give us the repository path.
+
+ # We save data here to use it as a fallback. See below
+ local_data = data.strip()
+
+ svn = execute(["hg", "svn", "info", ], ignore_errors=True)
+
+ if (not svn.startswith('abort:') and
+ not svn.startswith("hg: unknown command")):
+ self.type = 'svn'
+ m = re.search(r'^Repository Root: (.+)$', svn, re.M)
+
+ if not m:
+ return None
+
+ path = m.group(1)
+ m2 = re.match(r'^(svn\+ssh|http|https)://([-a-zA-Z0-9.]*@)(.*)$',
+ path)
+ if m2:
+ path = '%s://%s' % (m2.group(1), m2.group(3))
+
+ m = re.search(r'^URL: (.+)$', svn, re.M)
+
+ if not m:
+ return None
+
+ base_path = m.group(1)[len(path):] or "/"
+ return RepositoryInfo(path=path,
+ base_path=base_path,
+ supports_parent_diffs=True)
+
+ self.type = 'hg'
+
+ # We are going to search .hg/hgrc for the default path.
+ file_name = os.path.join(local_data,'.hg', 'hgrc')
+
+ if not os.path.exists(file_name):
+ return RepositoryInfo(path=local_data, base_path='/',
+ supports_parent_diffs=True)
+
+ f = open(file_name)
+ data = f.read()
+ f.close()
+
+ m = re.search(r'^default\s+=\s+(.+)$', data, re.M)
+
+ if not m:
+ # Return the local path, if no default value is found.
+ return RepositoryInfo(path=local_data, base_path='/',
+ supports_parent_diffs=True)
+
+ path = m.group(1).strip()
+
+ return RepositoryInfo(path=path, base_path='',
+ supports_parent_diffs=True)
+
+ def diff(self, files):
+ """
+ Performs a diff across all modified files in a Mercurial repository.
+ """
+ # We don't support parent diffs with Mercurial yet, so we always
+ # return None for the parent diff.
+ if self.type == 'svn':
+ parent = execute(['hg', 'parent', '--svn', '--template',
+ '{node}\n']).strip()
+
+ if options.parent_branch:
+ parent = options.parent_branch
+
+ if options.guess_summary and not options.summary:
+ options.summary = execute(['hg', 'log', '-r.', '--template',
+ r'{desc|firstline}\n'])
+
+ if options.guess_description and not options.description:
+ numrevs = len(execute(['hg', 'log', '-r.:%s' % parent,
+ '--follow', '--template',
+ r'{rev}\n']).strip().split('\n'))
+ options.description = execute(['hg', 'log', '-r.:%s' % parent,
+ '--follow', '--template',
+ r'{desc}\n\n', '--limit',
+ str(numrevs-1)]).strip()
+
+ return (execute(["hg", "diff", "--svn", '-r%s:.' % parent]), None)
+
+ return (execute(["hg", "diff"] + files), None)
+
+ def diff_between_revisions(self, revision_range, args, repository_info):
+ """
+ Performs a diff between 2 revisions of a Mercurial repository.
+ """
+ if self.type != 'hg':
+ raise NotImplementedError
+
+ r1, r2 = revision_range.split(':')
+ return execute(["hg", "diff", "-r", r1, "-r", r2])
+
+
+class GitClient(SCMClient):
+ """
+ A wrapper around git that fetches repository information and generates
+ compatible diffs. This will attempt to generate a diff suitable for the
+ remote repository, whether git, SVN or Perforce.
+ """
+ def get_repository_info(self):
+ if not check_install('git --help'):
+ return None
+
+ git_dir = execute(["git", "rev-parse", "--git-dir"],
+ ignore_errors=True).strip()
+
+ if git_dir.startswith("fatal:") or not os.path.isdir(git_dir):
+ return None
+
+ # post-review in directories other than the top level of
+ # of a work-tree would result in broken diffs on the server
+ os.chdir(os.path.dirname(os.path.abspath(git_dir)))
+
+ # We know we have something we can work with. Let's find out
+ # what it is. We'll try SVN first.
+ data = execute(["git", "svn", "info"], ignore_errors=True)
+
+ m = re.search(r'^Repository Root: (.+)$', data, re.M)
+ if m:
+ path = m.group(1)
+ m = re.search(r'^URL: (.+)$', data, re.M)
+
+ if m:
+ base_path = m.group(1)[len(path):] or "/"
+ m = re.search(r'^Repository UUID: (.+)$', data, re.M)
+
+ if m:
+ uuid = m.group(1)
+ self.type = "svn"
+
+ return SvnRepositoryInfo(path=path, base_path=base_path,
+ uuid=uuid,
+ supports_parent_diffs=True)
+ else:
+ # Versions of git-svn before 1.5.4 don't (appear to) support
+ # 'git svn info'. If we fail because of an older git install,
+ # here, figure out what version of git is installed and give
+ # the user a hint about what to do next.
+ version = execute(["git", "svn", "--version"], ignore_errors=True)
+ version_parts = re.search('version (\d+)\.(\d+)\.(\d+)',
+ version)
+ svn_remote = execute(["git", "config", "--get",
+ "svn-remote.svn.url"], ignore_errors=True)
+
+ if (version_parts and
+ not self.is_valid_version((int(version_parts.group(1)),
+ int(version_parts.group(2)),
+ int(version_parts.group(3))),
+ (1, 5, 4)) and
+ svn_remote):
+ die("Your installation of git-svn must be upgraded to " + \
+ "version 1.5.4 or later")
+
+ # Okay, maybe Perforce.
+ # TODO
+
+ # Nope, it's git then.
+ origin = execute(["git", "remote", "show", "origin"])
+ m = re.search(r'URL: (.+)', origin)
+ if m:
+ url = m.group(1).rstrip('/')
+ if url:
+ self.type = "git"
+ return RepositoryInfo(path=url, base_path='',
+ supports_parent_diffs=True)
+
+ return None
+
+ def is_valid_version(self, actual, expected):
+ """
+ Takes two tuples, both in the form:
+ (major_version, minor_version, micro_version)
+ Returns true if the actual version is greater than or equal to
+ the expected version, and false otherwise.
+ """
+ return (actual[0] > expected[0]) or \
+ (actual[0] == expected[0] and actual[1] > expected[1]) or \
+ (actual[0] == expected[0] and actual[1] == expected[1] and \
+ actual[2] >= expected[2])
+
+ def scan_for_server(self, repository_info):
+ # Scan first for dot files, since it's faster and will cover the
+ # user's $HOME/.reviewboardrc
+ server_url = super(GitClient, self).scan_for_server(repository_info)
+
+ if server_url:
+ return server_url
+
+ # TODO: Maybe support a server per remote later? Is that useful?
+ url = execute(["git", "config", "--get", "reviewboard.url"],
+ ignore_errors=True).strip()
+ if url:
+ return url
+
+ if self.type == "svn":
+ # Try using the reviewboard:url property on the SVN repo, if it
+ # exists.
+ prop = SVNClient().scan_for_server_property(repository_info)
+
+ if prop:
+ return prop
+
+ return None
+
+ def diff(self, args):
+ """
+ Performs a diff across all modified files in the branch, taking into
+ account a parent branch.
+ """
+ parent_branch = options.parent_branch or "master"
+
+ diff_lines = self.make_diff(parent_branch)
+
+ if parent_branch != "master":
+ parent_diff_lines = self.make_diff("master", parent_branch)
+ else:
+ parent_diff_lines = None
+
+ if options.guess_summary and not options.summary:
+ options.summary = execute(["git", "log", "--pretty=format:%s",
+ "HEAD^.."], ignore_errors=True).strip()
+
+ if options.guess_description and not options.description:
+ options.description = execute(
+ ["git", "log", "--pretty=format:%s%n%n%b", parent_branch + ".."],
+ ignore_errors=True).strip()
+
+ return (diff_lines, parent_diff_lines)
+
+ def make_diff(self, parent_branch, source_branch=""):
+ """
+ Performs a diff on a particular branch range.
+ """
+ if self.type == "svn":
+ diff_lines = execute(["git", "diff", "--no-color", "--no-prefix",
+ "-r", "-u", "%s..%s" % (parent_branch,
+ source_branch)],
+ split_lines=True)
+ return self.make_svn_diff(parent_branch, diff_lines)
+ elif self.type == "git":
+ return execute(["git", "diff", "--no-color", "--full-index",
+ parent_branch])
+
+ return None
+
+ def make_svn_diff(self, parent_branch, diff_lines):
+ """
+ Formats the output of git diff such that it's in a form that
+ svn diff would generate. This is needed so the SVNTool in Review
+ Board can properly parse this diff.
+ """
+ rev = execute(["git", "svn", "find-rev", "master"]).strip()
+
+ if not rev:
+ return None
+
+ diff_data = ""
+ filename = ""
+ revision = ""
+ newfile = False
+
+ for line in diff_lines:
+ if line.startswith("diff "):
+ # Grab the filename and then filter this out.
+ # This will be in the format of:
+ #
+ # diff --git a/path/to/file b/path/to/file
+ info = line.split(" ")
+ diff_data += "Index: %s\n" % info[2]
+ diff_data += "=" * 67
+ diff_data += "\n"
+ elif line.startswith("index "):
+ # Filter this out.
+ pass
+ elif line.strip() == "--- /dev/null":
+ # New file
+ newfile = True
+ elif line.startswith("--- "):
+ newfile = False
+ diff_data += "--- %s\t(revision %s)\n" % \
+ (line[4:].strip(), rev)
+ elif line.startswith("+++ "):
+ filename = line[4:].strip()
+ if newfile:
+ diff_data += "--- %s\t(revision 0)\n" % filename
+ diff_data += "+++ %s\t(revision 0)\n" % filename
+ else:
+ # We already printed the "--- " line.
+ diff_data += "+++ %s\t(working copy)\n" % filename
+ else:
+ diff_data += line
+
+ return diff_data
+
+ def diff_between_revisions(self, revision_range, args, repository_info):
+ pass
+
+
+SCMCLIENTS = (
+ SVNClient(),
+ CVSClient(),
+ GitClient(),
+ MercurialClient(),
+ PerforceClient(),
+ ClearCaseClient(),
+)
+
+def debug(s):
+ """
+ Prints debugging information if post-review was run with --debug
+ """
+ if DEBUG or options and options.debug:
+ print ">>> %s" % s
+
+
+def make_tempfile():
+ """
+ Creates a temporary file and returns the path. The path is stored
+ in an array for later cleanup.
+ """
+ fd, tmpfile = mkstemp()
+ os.close(fd)
+ tempfiles.append(tmpfile)
+ return tmpfile
+
+
+def check_install(command):
+ """
+ Try executing an external command and return a boolean indicating whether
+ that command is installed or not. The 'command' argument should be
+ something that executes quickly, without hitting the network (for
+ instance, 'svn help' or 'git --version').
+ """
+ try:
+ p = subprocess.Popen(command.split(' '),
+ stdin=subprocess.PIPE,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ return True
+ except OSError:
+ return False
+
+
+def execute(command, env=None, split_lines=False, ignore_errors=False,
+ extra_ignore_errors=(), translate_newlines=True):
+ """
+ Utility function to execute a command and return the output.
+ """
+ if isinstance(command, list):
+ debug(subprocess.list2cmdline(command))
+ else:
+ debug(command)
+
+ if env:
+ env.update(os.environ)
+ else:
+ env = os.environ.copy()
+
+ env['LC_ALL'] = 'en_US.UTF-8'
+ env['LANGUAGE'] = 'en_US.UTF-8'
+
+ if sys.platform.startswith('win'):
+ p = subprocess.Popen(command,
+ stdin=subprocess.PIPE,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT,
+ shell=False,
+ universal_newlines=translate_newlines,
+ env=env)
+ else:
+ p = subprocess.Popen(command,
+ stdin=subprocess.PIPE,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT,
+ shell=False,
+ close_fds=True,
+ universal_newlines=translate_newlines,
+ env=env)
+ if split_lines:
+ data = p.stdout.readlines()
+ else:
+ data = p.stdout.read()
+ rc = p.wait()
+ if rc and not ignore_errors and rc not in extra_ignore_errors:
+ die('Failed to execute command: %s\n%s' % (command, data))
+
+ return data
+
+
+def die(msg=None):
+ """
+ Cleanly exits the program with an error message. Erases all remaining
+ temporary files.
+ """
+ for tmpfile in tempfiles:
+ try:
+ os.unlink(tmpfile)
+ except:
+ pass
+
+ if msg:
+ print msg
+
+ sys.exit(1)
+
+
+def walk_parents(path):
+ """
+ Walks up the tree to the root directory.
+ """
+ while os.path.splitdrive(path)[1] != os.sep:
+ yield path
+ path = os.path.dirname(path)
+
+
+def load_config_file(filename):
+ """
+ Loads data from a config file.
+ """
+ config = {
+ 'TREES': {},
+ }
+
+ if os.path.exists(filename):
+ try:
+ execfile(filename, config)
+ except:
+ pass
+
+ return config
+
+
+def tempt_fate(server, tool, changenum, diff_content=None,
+ parent_diff_content=None, submit_as=None, retries=3):
+ """
+ Attempts to create a review request on a Review Board server and upload
+ a diff. On success, the review request path is displayed.
+ """
+ try:
+ save_draft = False
+
+ if options.rid:
+ review_request = server.get_review_request(options.rid)
+ else:
+ review_request = server.new_review_request(changenum, submit_as)
+
+ if options.target_groups:
+ server.set_review_request_field(review_request, 'target_groups',
+ options.target_groups)
+ save_draft = True
+
+ if options.target_people:
+ server.set_review_request_field(review_request, 'target_people',
+ options.target_people)
+ save_draft = True
+
+ if options.summary:
+ server.set_review_request_field(review_request, 'summary',
+ options.summary)
+ save_draft = True
+
+ if options.branch:
+ server.set_review_request_field(review_request, 'branch',
+ options.branch)
+ save_draft = True
+
+ if options.bugs_closed:
+ server.set_review_request_field(review_request, 'bugs_closed',
+ options.bugs_closed)
+ save_draft = True
+
+ if options.description:
+ server.set_review_request_field(review_request, 'description',
+ options.description)
+ save_draft = True
+
+ if options.testing_done:
+ server.set_review_request_field(review_request, 'testing_done',
+ options.testing_done)
+ save_draft = True
+
+ if save_draft:
+ server.save_draft(review_request)
+ except APIError, e:
+ rsp, = e.args
+ if rsp['err']['code'] == 103: # Not logged in
+ retries = retries - 1
+
+ # We had an odd issue where the server ended up a couple of
+ # years in the future. Login succeeds but the cookie date was
+ # "odd" so use of the cookie appeared to fail and eventually
+ # ended up at max recursion depth :-(. Check for a maximum
+ # number of retries.
+ if retries >= 0:
+ server.login(force=True)
+ tempt_fate(server, tool, changenum, diff_content,
+ parent_diff_content, submit_as, retries=retries)
+ return
+
+ if options.rid:
+ die("Error getting review request %s: %s (code %s)" % \
+ (options.rid, rsp['err']['msg'], rsp['err']['code']))
+ else:
+ die("Error creating review request: %s (code %s)" % \
+ (rsp['err']['msg'], rsp['err']['code']))
+
+
+ if not server.info.supports_changesets or not options.change_only:
+ try:
+ server.upload_diff(review_request, diff_content,
+ parent_diff_content)
+ except APIError, e:
+ rsp, = e.args
+ print "Error uploading diff: %s (%s)" % (rsp['err']['msg'],
+ rsp['err']['code'])
+ debug(rsp)
+ die("Your review request still exists, but the diff is not " +
+ "attached.")
+
+ if options.publish:
+ server.publish(review_request)
+
+ request_url = 'r/' + str(review_request['id'])
+ review_url = urljoin(server.url, request_url)
+
+ if not review_url.startswith('http'):
+ review_url = 'http://%s' % review_url
+
+ print "Review request #%s posted." % (review_request['id'],)
+ print
+ print review_url
+
+ return review_url
+
+
+def parse_options(args):
+ parser = OptionParser(usage="%prog [-pond] [-r review_id] [changenum]",
+ version="%prog " + VERSION)
+
+ parser.add_option("-p", "--publish",
+ dest="publish", action="store_true", default=PUBLISH,
+ help="publish the review request immediately after "
+ "submitting")
+ parser.add_option("-r", "--review-request-id",
+ dest="rid", metavar="ID", default=None,
+ help="existing review request ID to update")
+ parser.add_option("-o", "--open",
+ dest="open_browser", action="store_true",
+ default=OPEN_BROWSER,
+ help="open a web browser to the review request page")
+ parser.add_option("-n", "--output-diff",
+ dest="output_diff_only", action="store_true",
+ default=False,
+ help="outputs a diff to the console and exits. "
+ "Does not post")
+ parser.add_option("--server",
+ dest="server", default=REVIEWBOARD_URL,
+ metavar="SERVER",
+ help="specify a different Review Board server "
+ "to use")
+ parser.add_option("--diff-only",
+ dest="diff_only", action="store_true", default=False,
+ help="uploads a new diff, but does not update "
+ "info from changelist")
+ parser.add_option("--target-groups",
+ dest="target_groups", default=TARGET_GROUPS,
+ help="names of the groups who will perform "
+ "the review")
+ parser.add_option("--target-people",
+ dest="target_people", default=TARGET_PEOPLE,
+ help="names of the people who will perform "
+ "the review")
+ parser.add_option("--summary",
+ dest="summary", default=None,
+ help="summary of the review ")
+ parser.add_option("--description",
+ dest="description", default=None,
+ help="description of the review ")
+ parser.add_option("--description-file",
+ dest="description_file", default=None,
+ help="text file containing a description of the review")
+ parser.add_option("--guess-summary",
+ dest="guess_summary", action="store_true",
+ default=False,
+ help="guess summary from the latest commit (git/"
+ "hgsubversion only)")
+ parser.add_option("--guess-description",
+ dest="guess_description", action="store_true",
+ default=False,
+ help="guess description based on commits on this branch "
+ "(git/hgsubversion only)")
+ parser.add_option("--testing-done",
+ dest="testing_done", default=None,
+ help="details of testing done ")
+ parser.add_option("--testing-done-file",
+ dest="testing_file", default=None,
+ help="text file containing details of testing done ")
+ parser.add_option("--branch",
+ dest="branch", default=None,
+ help="affected branch ")
+ parser.add_option("--bugs-closed",
+ dest="bugs_closed", default=None,
+ help="list of bugs closed ")
+ parser.add_option("--revision-range",
+ dest="revision_range", default=None,
+ help="generate the diff for review based on given "
+ "revision range")
+ parser.add_option("--label",
+ dest="label", default=None,
+ help="label (ClearCase Only) ")
+ parser.add_option("--submit-as",
+ dest="submit_as", default=SUBMIT_AS, metavar="USERNAME",
+ help="user name to be recorded as the author of the "
+ "review request, instead of the logged in user")
+ parser.add_option("--username",
+ dest="username", default=None, metavar="USERNAME",
+ help="user name to be supplied to the reviewboard server")
+ parser.add_option("--password",
+ dest="password", default=None, metavar="PASSWORD",
+ help="password to be supplied to the reviewboard server")
+ parser.add_option("--change-only",
+ dest="change_only", action="store_true",
+ default=False,
+ help="updates info from changelist, but does "
+ "not upload a new diff (only available if your "
+ "repository supports changesets)")
+ parser.add_option("--parent",
+ dest="parent_branch", default=None,
+ metavar="PARENT_BRANCH",
+ help="the parent branch this diff should be against "
+ "(only available if your repository supports "
+ "parent diffs)")
+ parser.add_option("--p4-client",
+ dest="p4_client", default=None,
+ help="the Perforce client name that the review is in")
+ parser.add_option("--p4-port",
+ dest="p4_port", default=None,
+ help="the Perforce servers IP address that the review is on")
+ parser.add_option("--repository-url",
+ dest="repository_url", default=None,
+ help="the url for a repository for creating a diff "
+ "outside of a working copy (currently only supported "
+ "by Subversion). Requires --revision-range")
+ parser.add_option("-d", "--debug",
+ action="store_true", dest="debug", default=DEBUG,
+ help="display debug output")
+
+ (globals()["options"], args) = parser.parse_args(args)
+
+ if options.description and options.description_file:
+ sys.stderr.write("The --description and --description-file options "
+ "are mutually exclusive.\n")
+ sys.exit(1)
+
+ if options.description_file:
+ if os.path.exists(options.description_file):
+ fp = open(options.description_file, "r")
+ options.description = fp.read()
+ fp.close()
+ else:
+ sys.stderr.write("The description file %s does not exist.\n" %
+ options.description_file)
+ sys.exit(1)
+
+ if options.testing_done and options.testing_file:
+ sys.stderr.write("The --testing-done and --testing-done-file options "
+ "are mutually exclusive.\n")
+ sys.exit(1)
+
+ if options.testing_file:
+ if os.path.exists(options.testing_file):
+ fp = open(options.testing_file, "r")
+ options.testing_done = fp.read()
+ fp.close()
+ else:
+ sys.stderr.write("The testing file %s does not exist.\n" %
+ options.testing_file)
+ sys.exit(1)
+
+ if options.repository_url and not options.revision_range:
+ sys.stderr.write("The --repository-url option requires the "
+ "--revision-range option.\n")
+ sys.exit(1)
+
+ return args
+
+def determine_client():
+
+ repository_info = None
+ tool = None
+
+ # Try to find the SCM Client we're going to be working with.
+ for tool in SCMCLIENTS:
+ repository_info = tool.get_repository_info()
+
+ if repository_info:
+ break
+
+ if not repository_info:
+ if options.repository_url:
+ print "No supported repository could be access at the supplied url."
+ else:
+ print "The current directory does not contain a checkout from a"
+ print "supported source code repository."
+ sys.exit(1)
+
+ # Verify that options specific to an SCM Client have not been mis-used.
+ if options.change_only and not repository_info.supports_changesets:
+ sys.stderr.write("The --change-only option is not valid for the "
+ "current SCM client.\n")
+ sys.exit(1)
+
+ if options.parent_branch and not repository_info.supports_parent_diffs:
+ sys.stderr.write("The --parent option is not valid for the "
+ "current SCM client.\n")
+ sys.exit(1)
+
+ if ((options.p4_client or options.p4_port) and \
+ not isinstance(tool, PerforceClient)):
+ sys.stderr.write("The --p4-client and --p4-port options are not valid "
+ "for the current SCM client.\n")
+ sys.exit(1)
+
+ return (repository_info, tool)
+
+def main():
+ if 'USERPROFILE' in os.environ:
+ homepath = os.path.join(os.environ["USERPROFILE"], "Local Settings",
+ "Application Data")
+ elif 'HOME' in os.environ:
+ homepath = os.environ["HOME"]
+ else:
+ homepath = ''
+
+ # Load the config and cookie files
+ globals()['user_config'] = \
+ load_config_file(os.path.join(homepath, ".reviewboardrc"))
+ cookie_file = os.path.join(homepath, ".post-review-cookies.txt")
+
+ args = parse_options(sys.argv[1:])
+
+ repository_info, tool = determine_client()
+
+ # Try to find a valid Review Board server to use.
+ if options.server:
+ server_url = options.server
+ else:
+ server_url = tool.scan_for_server(repository_info)
+
+ if not server_url:
+ print "Unable to find a Review Board server for this source code tree."
+ sys.exit(1)
+
+ server = ReviewBoardServer(server_url, repository_info, cookie_file)
+
+ if repository_info.supports_changesets:
+ changenum = tool.get_changenum(args)
+ else:
+ changenum = None
+
+ if options.revision_range:
+ diff = tool.diff_between_revisions(options.revision_range, args,
+ repository_info)
+ parent_diff = None
+ elif options.label and isinstance(tool, ClearCaseClient):
+ diff, parent_diff = tool.diff_label(options.label)
+ else:
+ diff, parent_diff = tool.diff(args)
+
+ if options.output_diff_only:
+ print diff
+ sys.exit(0)
+
+ # Let's begin.
+ server.login()
+
+ review_url = tempt_fate(server, tool, changenum, diff_content=diff,
+ parent_diff_content=parent_diff,
+ submit_as=options.submit_as)
+
+ # Load the review up in the browser if requested to:
+ if options.open_browser:
+ try:
+ import webbrowser
+ if 'open_new_tab' in dir(webbrowser):
+ # open_new_tab is only in python 2.5+
+ webbrowser.open_new_tab(review_url)
+ elif 'open_new' in dir(webbrowser):
+ webbrowser.open_new(review_url)
+ else:
+ os.system( 'start %s' % review_url )
+ except:
+ print 'Error opening review URL: %s' % review_url
+
+
+if __name__ == "__main__":
+ main()
diff --git a/test/review b/test/review
new file mode 100755
index 0000000000..e1ccb9c0af
--- /dev/null
+++ b/test/review
@@ -0,0 +1,44 @@
+#!/bin/sh
+
+if [ -z $1 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ] || [ "$1" = "-help" ] || [ "$1" = "-?" ]; then
+ echo "Usage: `basename $0` [rev] [args]\n"
+ echo " [rev] : either the revision number without leading 'r' (post-commit),"
+ echo " or '-loc' to create a review from current local changes (pre-commit)\n"
+ echo " [args] : optional arguments:"
+ echo " -r ID existing review request ID to update\n"
+ exit 1
+fi
+
+POSTREVIEW=`dirname $0`/postreview.py
+
+if [ "$1" = "-loc" ]; then
+ echo "creating review request from local changes..."
+ REVARG=""
+ LOG=""
+ SUMMARY="local changes"
+ REPO=""
+else
+ REV=$1
+ PREV=`expr $REV - 1`
+ if [ $? -ne 0 ]; then
+ echo "argument revision not a number: $REV"
+ exit 1
+ fi
+
+ echo "creating review request for changeset $REV..."
+
+ LOG="`svn log http://lampsvn.epfl.ch/svn-repos/scala -c $REV`"
+ if [ $? -ne 0 ]; then
+ echo "could not get svn log for revision $REV"
+ exit 1
+ fi
+
+ REVARG="--revision-range=$PREV:$REV"
+ SUMMARY="r$REV"
+ REPO="--repository-url=http://lampsvn.epfl.ch/svn-repos/scala"
+fi
+
+
+shift # remove parameter $1 (revision)
+
+python $POSTREVIEW --server="https://chara2.epfl.ch" $REVARG --summary="$SUMMARY" --description="$LOG" $REPO -o $@
diff --git a/test/scaladoc/javascript/package.html b/test/scaladoc/javascript/package.html
new file mode 100644
index 0000000000..421376db9e
--- /dev/null
+++ b/test/scaladoc/javascript/package.html
@@ -0,0 +1 @@
+dummy
diff --git a/test/scaladoc/javascript/test-index.html b/test/scaladoc/javascript/test-index.html
new file mode 100644
index 0000000000..42cbc8cc09
--- /dev/null
+++ b/test/scaladoc/javascript/test-index.html
@@ -0,0 +1,35 @@
+<html>
+ <head>
+ <link rel="stylesheet" type="text/css" media="screen"
+ href="http://code.jquery.com/qunit/git/qunit.css" />
+ <script type="text/javascript"
+ src="http://code.jquery.com/qunit/git/qunit.js"></script>
+ <script type="text/javascript"
+ src="../../../src/compiler/scala/tools/nsc/doc/html/resource/lib/jquery.js"></script>
+ <script src="../../../src/compiler/scala/tools/nsc/doc/html/resource/lib/jquery.layout.js"></script>
+ <script src="../../../src/compiler/scala/tools/nsc/doc/html/resource/lib/scheduler.js"></script>
+ <script type="text/javascript"
+ src="../../../src/compiler/scala/tools/nsc/doc/html/resource/lib/index.js"></script>
+ </head>
+ <body>
+ <h1 id="qunit-header">QUnit example</h1>
+ <h2 id="qunit-banner"></h2>
+ <div id="qunit-testrunner-toolbar"></div>
+ <h2 id="qunit-userAgent"></h2>
+ <ol id="qunit-tests"></ol>
+ <div id="qunit-fixture"></div>
+ <div id="browser" class="ui-layout-west">
+ <div class="ui-west-center">
+ <div id="tpl">
+ <ol class="templates">
+ <li>template</li>
+ </ol>
+ </div>
+ </div>
+ </div>
+ <div id="content" class="ui-layout-center">
+ <iframe name="template"></iframe>
+ </div>
+ <script type="text/javascript" src="test-index.js"></script>
+ </body>
+</html>
diff --git a/test/scaladoc/javascript/test-index.js b/test/scaladoc/javascript/test-index.js
new file mode 100644
index 0000000000..121366c931
--- /dev/null
+++ b/test/scaladoc/javascript/test-index.js
@@ -0,0 +1,17 @@
+Index.PACKAGES = { pkg1: [ { 'class': 'pkg1/Foo.html', name: 'pkg1.Foo' } ] };
+
+asyncTest('Trac #4463 - kindFilter', function () {
+ setTimeout(function () {
+ start();
+
+ equal($('#tpl ol.templates:visible').size(), 1);
+
+ kindFilter('packs');
+ equal($('#tpl ol.templates:visible').size(), 0);
+ equal($('#tpl li.pack a.packhide').text(), 'show');
+
+ kindFilter('all');
+ equal($('#tpl ol.templates:visible').size(), 1);
+ equal($('#tpl li.pack a.packhide').text(), 'hide');
+ }, 1000);
+});
diff --git a/test/scaladoc/resources/SI_4287.scala b/test/scaladoc/resources/SI_4287.scala
new file mode 100644
index 0000000000..9846db466d
--- /dev/null
+++ b/test/scaladoc/resources/SI_4287.scala
@@ -0,0 +1,6 @@
+class ClassWithSugar(val x: Int = 123) {
+}
+
+class ClassWithoutSugar {
+ def this(x: Int = 456) = this()
+}
diff --git a/test/scaladoc/resources/SI_4421.scala b/test/scaladoc/resources/SI_4421.scala
new file mode 100644
index 0000000000..7ae2c796eb
--- /dev/null
+++ b/test/scaladoc/resources/SI_4421.scala
@@ -0,0 +1,7 @@
+abstract class test
+/**
+ * TestA class
+ * @example 2.0
+ * @todo do something better than finding scaladoc bugs
+ * @note blah blah */
+class SI_4421 extends test
diff --git a/test/scaladoc/resources/SI_4507.scala b/test/scaladoc/resources/SI_4507.scala
new file mode 100644
index 0000000000..5b8ed9cd35
--- /dev/null
+++ b/test/scaladoc/resources/SI_4507.scala
@@ -0,0 +1,19 @@
+/**
+ * <pre>
+ * scala> (new AndOrSpec).execute()
+ * AndOrSpec:
+ * The ScalaTest Matchers DSL
+ * should provide
+ * an and operator that
+ * - returns silently when evaluating true and true
+ * - throws a TestFailedException when evaluating true and false
+ * - that throws a TestFailedException when evaluating false and true
+ * - throws a TestFailedException when evaluating false and false
+ * an or operator that
+ * - returns silently when evaluating true or true
+ * - returns silently when evaluating true or false
+ * - returns silently when evaluating false or true
+ * - throws a TestFailedException when evaluating false or false
+ * </pre>
+ */
+class SI_4507
diff --git a/test/scaladoc/resources/SI_4589.scala b/test/scaladoc/resources/SI_4589.scala
new file mode 100644
index 0000000000..d18fd65736
--- /dev/null
+++ b/test/scaladoc/resources/SI_4589.scala
@@ -0,0 +1,11 @@
+class SI_4589 {
+ /**
+ * @param x012345678901234567890123456789 blah blah blah
+ */
+ def foo(x012345678901234567890123456789: Int) = 123
+
+ /**
+ * @param x0123456789 blah blah blah
+ */
+ def bar(x0123456789: Int) = 123
+}
diff --git a/test/scaladoc/resources/SI_4641.scala b/test/scaladoc/resources/SI_4641.scala
new file mode 100644
index 0000000000..a5557a78d9
--- /dev/null
+++ b/test/scaladoc/resources/SI_4641.scala
@@ -0,0 +1,3 @@
+object Foo {
+ def ### = 123
+}
diff --git a/test/scaladoc/resources/SI_4676.scala b/test/scaladoc/resources/SI_4676.scala
new file mode 100644
index 0000000000..00c0fc7ea9
--- /dev/null
+++ b/test/scaladoc/resources/SI_4676.scala
@@ -0,0 +1,4 @@
+class SI_4676 {
+ type SS = (String,String)
+ def x(ss: SS): Int = 3
+}
diff --git a/test/scaladoc/resources/SI_4715.scala b/test/scaladoc/resources/SI_4715.scala
new file mode 100644
index 0000000000..29daf43717
--- /dev/null
+++ b/test/scaladoc/resources/SI_4715.scala
@@ -0,0 +1,7 @@
+class SI_4715 {
+ type :+:[X,Y] = Map[X,Y]
+ val withType: Int :+: Double = error("")
+
+ trait :-:[X,Y]
+ val withTrait: Int :-: Double = error("")
+}
diff --git a/test/scaladoc/resources/SI_4898.scala b/test/scaladoc/resources/SI_4898.scala
new file mode 100644
index 0000000000..40461d15b5
--- /dev/null
+++ b/test/scaladoc/resources/SI_4898.scala
@@ -0,0 +1,9 @@
+class SI_4898 {
+
+ /**
+ * A link to [[__root__
+ *
+ * @usecase def test(): Int
+ */
+ def test(implicit param: Int): Int = param
+} \ No newline at end of file
diff --git a/test/scaladoc/resources/SI_5054_q1.scala b/test/scaladoc/resources/SI_5054_q1.scala
new file mode 100644
index 0000000000..02d9be8dd0
--- /dev/null
+++ b/test/scaladoc/resources/SI_5054_q1.scala
@@ -0,0 +1,9 @@
+class SI_5054_q1 {
+ /**
+ * A simple comment
+ *
+ * @param lost a lost parameter
+ * @usecase def test(): Int
+ */
+ def test(implicit lost: Int): Int = lost
+}
diff --git a/test/scaladoc/resources/SI_5054_q2.scala b/test/scaladoc/resources/SI_5054_q2.scala
new file mode 100644
index 0000000000..c873731e5b
--- /dev/null
+++ b/test/scaladoc/resources/SI_5054_q2.scala
@@ -0,0 +1,9 @@
+class SI_5054_q2 {
+ /**
+ * A simple comment
+ *
+ * @param lost a lost parameter
+ * @usecase def test(): Int
+ */
+ final def test(implicit lost: Int): Int = lost
+}
diff --git a/test/scaladoc/resources/SI_5054_q3.scala b/test/scaladoc/resources/SI_5054_q3.scala
new file mode 100644
index 0000000000..be5d22ffdc
--- /dev/null
+++ b/test/scaladoc/resources/SI_5054_q3.scala
@@ -0,0 +1,9 @@
+class SI_5054_q3 {
+ /**
+ * A simple comment
+ *
+ * @param lost a lost parameter
+ * @usecase def test(): Int
+ */
+ implicit def test(implicit lost: Int): Int = lost
+}
diff --git a/test/scaladoc/resources/SI_5054_q4.scala b/test/scaladoc/resources/SI_5054_q4.scala
new file mode 100644
index 0000000000..4e5e4865f1
--- /dev/null
+++ b/test/scaladoc/resources/SI_5054_q4.scala
@@ -0,0 +1,9 @@
+abstract class SI_5054_q4 {
+ /**
+ * A simple comment
+ *
+ * @param lost a lost parameter
+ * @usecase def test(): Int
+ */
+ def test(implicit lost: Int): Int
+}
diff --git a/test/scaladoc/resources/SI_5054_q5.scala b/test/scaladoc/resources/SI_5054_q5.scala
new file mode 100644
index 0000000000..05ba7488eb
--- /dev/null
+++ b/test/scaladoc/resources/SI_5054_q5.scala
@@ -0,0 +1,9 @@
+trait SI_5054_q5 {
+ /**
+ * A simple comment
+ *
+ * @param lost a lost parameter
+ * @usecase def test(): Int
+ */
+ def test(implicit lost: Int): Int = lost
+}
diff --git a/test/scaladoc/resources/SI_5054_q6.scala b/test/scaladoc/resources/SI_5054_q6.scala
new file mode 100644
index 0000000000..607be654a5
--- /dev/null
+++ b/test/scaladoc/resources/SI_5054_q6.scala
@@ -0,0 +1,9 @@
+trait SI_5054_q6 {
+ /**
+ * A simple comment
+ *
+ * @param lost a lost parameter
+ * @usecase def test(): Int
+ */
+ def test(implicit lost: Int): Int
+}
diff --git a/test/scaladoc/resources/SI_5054_q7.scala b/test/scaladoc/resources/SI_5054_q7.scala
new file mode 100644
index 0000000000..26d4b5fcf4
--- /dev/null
+++ b/test/scaladoc/resources/SI_5054_q7.scala
@@ -0,0 +1,22 @@
+trait SI_5054_q7 {
+ /**
+ * The full definition, either used with an implicit value or with an explicit one.
+ *
+ * Some more explanation on implicits...
+ *
+ * @param lost a lost parameter
+ * @return some integer
+ * @usecase def test(): Int
+ *
+ * This takes the implicit value in scope.
+ *
+ * Example: `test()`
+ *
+ * @usecase def test(explicit: Int): Int
+ *
+ * This takes the explicit value passed.
+ *
+ * Example: `test(3)`
+ */
+ def test(implicit lost: Int): Int
+}
diff --git a/test/scaladoc/resources/Trac3484.scala b/test/scaladoc/resources/Trac3484.scala
new file mode 100644
index 0000000000..9656ec268d
--- /dev/null
+++ b/test/scaladoc/resources/Trac3484.scala
@@ -0,0 +1,27 @@
+class cbf[A, B, C]
+
+/**
+ * @define Coll Traversable
+ * @define bfreturn $Coll
+ */
+class Collection[A] {
+ /** What map does...
+ *
+ * $bfreturn
+ * @usecase def map[B](f: A => B): $bfreturn[B]
+ *
+ */
+ def map[B, That](f: A => B)(implicit fact: cbf[Collection[A], B, That]) =
+ null
+}
+
+/**
+ * @define b John
+ * @define a Mister $b
+ */
+class SR704 {
+ /**
+ * Hello $a.
+ */
+ def foo = 123
+}
diff --git a/test/scaladoc/resources/Trac3790.scala b/test/scaladoc/resources/Trac3790.scala
new file mode 100644
index 0000000000..1ca80955a0
--- /dev/null
+++ b/test/scaladoc/resources/Trac3790.scala
@@ -0,0 +1,11 @@
+class Trac3790 {
+ /**
+ * A lazy String
+ */
+ lazy val lazyString= "lazy"
+
+ /**
+ * A non-lazy String
+ */
+ val nonLazyString= "non-lazy"
+}
diff --git a/test/scaladoc/resources/Trac4180.scala b/test/scaladoc/resources/Trac4180.scala
new file mode 100644
index 0000000000..3d6922803b
--- /dev/null
+++ b/test/scaladoc/resources/Trac4180.scala
@@ -0,0 +1,4 @@
+trait Trac4180 {
+ type A
+ object A
+}
diff --git a/test/scaladoc/resources/Trac4289.scala b/test/scaladoc/resources/Trac4289.scala
new file mode 100644
index 0000000000..1644e18bd4
--- /dev/null
+++ b/test/scaladoc/resources/Trac4289.scala
@@ -0,0 +1,13 @@
+class Superclass {
+ /**
+ * @return 123
+ */
+ def foo = 123
+}
+
+class Subclass extends Superclass {
+ /**
+ * hello
+ */
+ override def foo = 456
+}
diff --git a/test/scaladoc/resources/Trac4306.scala b/test/scaladoc/resources/Trac4306.scala
new file mode 100644
index 0000000000..f86b83292c
--- /dev/null
+++ b/test/scaladoc/resources/Trac4306.scala
@@ -0,0 +1,5 @@
+package com.example.trac4306
+
+package object foo {
+ class Bar
+}
diff --git a/test/scaladoc/resources/Trac4325.scala b/test/scaladoc/resources/Trac4325.scala
new file mode 100644
index 0000000000..ffb968d571
--- /dev/null
+++ b/test/scaladoc/resources/Trac4325.scala
@@ -0,0 +1,5 @@
+case class WithSynthetic
+
+case class WithObject
+object WithObject
+
diff --git a/test/scaladoc/resources/Trac4358.scala b/test/scaladoc/resources/Trac4358.scala
new file mode 100644
index 0000000000..961c82160e
--- /dev/null
+++ b/test/scaladoc/resources/Trac4358.scala
@@ -0,0 +1,8 @@
+trait Trac4358 {
+ /**
+ * Implicit conversion that invokes the <code>expect</code> method on the <code>EasyMock</code> companion object (<em>i.e.</em>, the
+ * static <code>expect</code> method in Java class <code>org.easymock.EasyMock</code>).
+ *
+ */
+ val foo = 123
+}
diff --git a/test/scaladoc/resources/Trac4366.scala b/test/scaladoc/resources/Trac4366.scala
new file mode 100644
index 0000000000..d117ffa903
--- /dev/null
+++ b/test/scaladoc/resources/Trac4366.scala
@@ -0,0 +1,8 @@
+class Trac4366 {
+ /**
+ * <strong><code>foo</code> has been deprecated and will be removed in a future version of
+ * ScalaTest. Please call <code>bar</code> instead.</strong>
+ */
+ @deprecated // deprecated in 1.0, remove in 1.4
+ val foo: Option[String] = None
+}
diff --git a/test/scaladoc/resources/Trac4372.scala b/test/scaladoc/resources/Trac4372.scala
new file mode 100644
index 0000000000..03da659eee
--- /dev/null
+++ b/test/scaladoc/resources/Trac4372.scala
@@ -0,0 +1,5 @@
+class Trac4372 {
+ def method(n: Int) = n
+ def +:(n: Int) = n
+ val -: = 1
+}
diff --git a/test/scaladoc/resources/Trac4374.scala b/test/scaladoc/resources/Trac4374.scala
new file mode 100644
index 0000000000..4dd8ba2ae8
--- /dev/null
+++ b/test/scaladoc/resources/Trac4374.scala
@@ -0,0 +1,5 @@
+class WithPublic
+object WithPublic
+
+class WithPrivate
+private object WithPrivate
diff --git a/test/scaladoc/resources/Trac4409.scala b/test/scaladoc/resources/Trac4409.scala
new file mode 100644
index 0000000000..f93d3e238e
--- /dev/null
+++ b/test/scaladoc/resources/Trac4409.scala
@@ -0,0 +1,14 @@
+/**
+ * @define xxx
+ *
+ * The value of xxx don't contain since tag.
+ *
+ * @since 1.0
+ */
+
+class Trac4409 {
+ /**
+ * $xxx
+ */
+ def foo = 123
+}
diff --git a/test/scaladoc/resources/Trac4420.scala b/test/scaladoc/resources/Trac4420.scala
new file mode 100644
index 0000000000..dbe053f3da
--- /dev/null
+++ b/test/scaladoc/resources/Trac4420.scala
@@ -0,0 +1,14 @@
+import java.io.File
+
+/**
+ * @define PP This class is an instance of XXX so it's members are not called directly.
+ * Instead these classes are instantiated via a driver's ''process''. See YYY for more details. */
+abstract class test
+
+/**
+ * TestA class
+ *
+ * this is a description.
+ *
+ * $PP */
+class TestA extends test
diff --git a/test/scaladoc/resources/Trac4452.scala b/test/scaladoc/resources/Trac4452.scala
new file mode 100644
index 0000000000..b844437dba
--- /dev/null
+++ b/test/scaladoc/resources/Trac4452.scala
@@ -0,0 +1,30 @@
+/**
+ * @define MacroWithNewLine
+ * This macro should not include "*".
+ *
+ * @define MacroWithoutNewLine This macro
+ * should
+ * include "*".
+ */
+class Test
+
+/**
+ * TestA class
+ */
+class Trac4452 extends Test {
+ /** $MacroWithNewLine */
+ def a = 1
+
+ /** $MacroWithoutNewLine */
+ def b = 2
+
+ /**
+ * $MacroWithNewLine
+ */
+ def c = 3
+
+ /**
+ * $MacroWithoutNewLine
+ */
+ def d = 4
+}
diff --git a/test/scaladoc/resources/Trac4471.scala b/test/scaladoc/resources/Trac4471.scala
new file mode 100644
index 0000000000..2a22887c0d
--- /dev/null
+++ b/test/scaladoc/resources/Trac4471.scala
@@ -0,0 +1,9 @@
+class A {
+ @deprecated def foo = 123
+ @deprecated def bar = 456
+}
+
+class B {
+ def foo = 123
+ @deprecated def bar = 456
+}
diff --git a/test/scaladoc/resources/Trac484.scala b/test/scaladoc/resources/Trac484.scala
new file mode 100644
index 0000000000..b4f81ae172
--- /dev/null
+++ b/test/scaladoc/resources/Trac484.scala
@@ -0,0 +1,18 @@
+class RefinementAndExistentials {
+ type Foo = {
+ type Dingus
+ def bippy(x: Int): String
+ def dingus(): String
+ }
+ type Bar = {
+ type Dingus <: T forSome { type T <: String }
+ }
+ def f(x: Foo) = 51
+ def g(x: T forSome { type T <: String }) = x
+ def h(x: Float): { def quux(x: Int, y: Int): Int } = new {
+ def quux(x: Int, y: Int) = 55
+ }
+ def hh(x: Float) = new { def quux(x: Int, y: Int) = 55 }
+ def j(x: Int): Bar = sys.error("")
+ def k(): AnyRef { type Dingus <: T forSome { type T <: String } } = sys.error("")
+}
diff --git a/test/scaladoc/resources/basic.scala b/test/scaladoc/resources/basic.scala
new file mode 100644
index 0000000000..00db6669b4
--- /dev/null
+++ b/test/scaladoc/resources/basic.scala
@@ -0,0 +1,27 @@
+package com.example {
+ package object p1 {
+ def packageObjectMethod = 0
+ }
+}
+
+package com.example.p1 {
+ class Clazz {
+ def foo = packageObjectMethod
+ implicit def intToClass1(n: Int) = new Clazz
+
+ @deprecated("This method is deprecated.")
+ def depracatedMethod = 0
+
+ // Google Token for Scala
+ def :: = 0
+ @deprecated("This method is deprecated.") def :::: = 0
+ }
+
+ class UpperBound[T <: Int]
+
+ class LowerBound[T >: Int]
+
+ class ExistentialType {
+ def foo(array: Array[T] forSome { type T <: AnyVal }) = 0
+ }
+}
diff --git a/test/scaladoc/scala/IndexScriptTest.scala b/test/scaladoc/scala/IndexScriptTest.scala
new file mode 100644
index 0000000000..e0372020fd
--- /dev/null
+++ b/test/scaladoc/scala/IndexScriptTest.scala
@@ -0,0 +1,52 @@
+import org.scalacheck._
+import org.scalacheck.Prop._
+
+import scala.tools.nsc.doc
+import scala.tools.nsc.doc.html.page.IndexScript
+import java.net.{URLClassLoader, URLDecoder}
+
+object Test extends Properties("IndexScript") {
+
+ def getClasspath = {
+ val loader = Thread.currentThread.getContextClassLoader
+ val paths = loader.asInstanceOf[URLClassLoader].getURLs
+ val morepaths = loader.getParent.asInstanceOf[URLClassLoader].getURLs
+ (paths ++ morepaths).map(u => URLDecoder.decode(u.getPath)).mkString(java.io.File.pathSeparator)
+ }
+
+ val docFactory = {
+ val settings = new doc.Settings({Console.err.println(_)})
+ settings.classpath.value = getClasspath
+ val reporter = new scala.tools.nsc.reporters.ConsoleReporter(settings)
+ new doc.DocFactory(reporter, settings)
+ }
+
+ val indexModelFactory = doc.model.IndexModelFactory
+
+ def createIndexScript(path: String) =
+ docFactory.makeUniverse(List(path)) match {
+ case Some(universe) => {
+ val index = new IndexScript(universe,
+ indexModelFactory.makeIndex(universe))
+ Some(index)
+ }
+ case _ =>
+ None
+ }
+
+ property("allPackages") = {
+ createIndexScript("src/compiler/scala/tools/nsc/doc/html/page/Index.scala") match {
+ case Some(index) =>
+ index.allPackages.map(_.toString) == List(
+ "scala",
+ "scala.tools",
+ "scala.tools.nsc",
+ "scala.tools.nsc.doc",
+ "scala.tools.nsc.doc.html",
+ "scala.tools.nsc.doc.html.page"
+ )
+ case None =>
+ false
+ }
+ }
+}
diff --git a/test/scaladoc/scala/IndexTest.scala b/test/scaladoc/scala/IndexTest.scala
new file mode 100644
index 0000000000..c14fd98297
--- /dev/null
+++ b/test/scaladoc/scala/IndexTest.scala
@@ -0,0 +1,82 @@
+import org.scalacheck._
+import org.scalacheck.Prop._
+
+import scala.tools.nsc.doc
+import scala.tools.nsc.doc.html.page.Index
+import java.net.{URLClassLoader, URLDecoder}
+
+object Test extends Properties("Index") {
+
+ def getClasspath = {
+ // these things can be tricky
+ // this test previously relied on the assumption that the current thread's classloader is an url classloader and contains all the classpaths
+ // does partest actually guarantee this? to quote Leonard Nimoy: The answer, of course, is no.
+ // this test _will_ fail again some time in the future.
+ val paths = Thread.currentThread.getContextClassLoader.asInstanceOf[URLClassLoader].getURLs.map(u => URLDecoder.decode(u.getPath))
+ val morepaths = Thread.currentThread.getContextClassLoader.getParent.asInstanceOf[URLClassLoader].getURLs.map(u => URLDecoder.decode(u.getPath))
+ (paths ++ morepaths).mkString(java.io.File.pathSeparator)
+ }
+
+ val docFactory = {
+ val settings = new doc.Settings({Console.err.println(_)})
+
+ settings.classpath.value = getClasspath
+ println(settings.classpath.value)
+
+ val reporter = new scala.tools.nsc.reporters.ConsoleReporter(settings)
+
+ new doc.DocFactory(reporter, settings)
+ }
+
+ val indexModelFactory = doc.model.IndexModelFactory
+
+ def createIndex(path: String): Option[Index] = {
+
+ val maybeUniverse = {
+ //val stream = new java.io.ByteArrayOutputStream
+ //val original = Console.out
+ //Console.setOut(stream)
+
+ val result = docFactory.makeUniverse(List(path))
+
+ // assert(stream.toString == "model contains 2 documentable templates\n")
+ //Console.setOut(original)
+
+ result
+ }
+
+ maybeUniverse match {
+ case Some(universe) => {
+ val index = new Index(universe, indexModelFactory.makeIndex(universe))
+ return Some(index)
+ }
+ case _ => return None
+ }
+
+ }
+
+ property("path") = {
+ createIndex("src/compiler/scala/tools/nsc/doc/html/page/Index.scala") match {
+ case Some(index) =>
+ index.path == List("index.html")
+ case None => false
+ }
+ }
+
+ property("title") = {
+ createIndex("src/compiler/scala/tools/nsc/doc/html/page/Index.scala") match {
+ case Some(index) =>
+ index.title == ""
+
+ case None => false
+ }
+ }
+ property("browser contants a script element") = {
+ createIndex("src/compiler/scala/tools/nsc/doc/html/page/Index.scala") match {
+ case Some(index) =>
+ (index.browser \ "script").size == 1
+
+ case None => false
+ }
+ }
+}
diff --git a/test/scaladoc/scala/html/HtmlFactoryTest.scala b/test/scaladoc/scala/html/HtmlFactoryTest.scala
new file mode 100644
index 0000000000..d1bfbb023f
--- /dev/null
+++ b/test/scaladoc/scala/html/HtmlFactoryTest.scala
@@ -0,0 +1,520 @@
+import org.scalacheck._
+import org.scalacheck.Prop._
+
+import java.net.{URLClassLoader, URLDecoder}
+
+object XMLUtil {
+ import scala.xml._
+
+ def stripGroup(seq: Node): Node = {
+ seq match {
+ case group: Group => {
+ <div class="group">{ group.nodes.map(stripGroup _) }</div>
+ }
+ case e: Elem => {
+ val child = e.child.map(stripGroup _)
+ Elem(e.prefix, e.label, e.attributes, e.scope, child : _*)
+ }
+ case _ => seq
+ }
+ }
+}
+
+object Test extends Properties("HtmlFactory") {
+ import scala.tools.nsc.doc.{DocFactory, Settings}
+ import scala.tools.nsc.doc.model.IndexModelFactory
+ import scala.tools.nsc.doc.html.HtmlFactory
+ import scala.tools.nsc.doc.html.page.ReferenceIndex
+
+ def getClasspath = {
+ // these things can be tricky
+ // this test previously relied on the assumption that the current thread's classloader is an url classloader and contains all the classpaths
+ // does partest actually guarantee this? to quote Leonard Nimoy: The answer, of course, is no.
+ // this test _will_ fail again some time in the future.
+ val paths = Thread.currentThread.getContextClassLoader.asInstanceOf[URLClassLoader].getURLs.map(u => URLDecoder.decode(u.getPath))
+ val morepaths = Thread.currentThread.getContextClassLoader.getParent.asInstanceOf[URLClassLoader].getURLs.map(u => URLDecoder.decode(u.getPath))
+ (paths ++ morepaths).mkString(java.io.File.pathSeparator)
+ }
+
+ def createFactory = {
+ val settings = new Settings({Console.err.println(_)})
+ settings.classpath.value = getClasspath
+
+ val reporter = new scala.tools.nsc.reporters.ConsoleReporter(settings)
+ new DocFactory(reporter, settings)
+ }
+
+ def createTemplates(basename: String) = {
+ val result = scala.collection.mutable.Map[String, scala.xml.NodeSeq]()
+
+ createFactory.makeUniverse(List("test/scaladoc/resources/"+basename)) match {
+ case Some(universe) => {
+ val index = IndexModelFactory.makeIndex(universe)
+ (new HtmlFactory(universe, index)).writeTemplates((page) => {
+ result += (page.absoluteLinkTo(page.path) -> page.body)
+ })
+ }
+ case _ => ;
+ }
+
+ result
+ }
+
+ def createReferenceIndex(basename: String) = {
+ createFactory.makeUniverse(List("test/scaladoc/resources/"+basename)) match {
+ case Some(universe) => {
+ val index = IndexModelFactory.makeIndex(universe)
+ val pages = index.firstLetterIndex.map({
+ case (key, value) => {
+ val page = new ReferenceIndex(key, index, universe)
+ page.absoluteLinkTo(page.path) -> page.body
+ }
+ })
+ Some(pages)
+ }
+ case _ =>
+ None
+ }
+ }
+
+ def createTemplate(scala: String) = {
+ val html = scala.stripSuffix(".scala") + ".html"
+ createTemplates(scala)(html)
+ }
+
+ def shortComments(root: scala.xml.Node) =
+ XMLUtil.stripGroup(root).descendant.flatMap {
+ case e: scala.xml.Elem => {
+ if (e.attribute("class").toString.contains("shortcomment")) {
+ Some(e)
+ } else {
+ None
+ }
+ }
+ case _ => None
+ }
+
+ property("Trac #3790") = {
+ createTemplate("Trac3790.scala") match {
+ case node: scala.xml.Node => {
+ val comments = shortComments(node)
+
+ comments.exists { _.toString.contains(">A lazy String\n</p>") } &&
+ comments.exists { _.toString.contains(">A non-lazy String\n</p>") }
+ }
+ case _ => false
+ }
+ }
+
+ property("Trac #4306") = {
+ val files = createTemplates("Trac4306.scala")
+ files("com/example/trac4306/foo/package$$Bar.html") != None
+ }
+
+ property("Trac #4366") = {
+ createTemplate("Trac4366.scala") match {
+ case node: scala.xml.Node => {
+ shortComments(node).exists { n => {
+ val str = n.toString
+ str.contains("<code>foo</code>") && str.contains("</strong>")
+ } }
+ }
+ case _ => false
+ }
+ }
+
+ property("Trac #4358") = {
+ createTemplate("Trac4358.scala") match {
+ case node: scala.xml.Node =>
+ ! shortComments(node).exists {
+ _.toString.contains("<em>i.</em>")
+ }
+ case _ => false
+ }
+ }
+
+ property("Trac #4180") = {
+ createTemplate("Trac4180.scala") != None
+ }
+
+ property("Trac #4372") = {
+ createTemplate("Trac4372.scala") match {
+ case node: scala.xml.Node => {
+ val html = node.toString
+ html.contains("<span class=\"name\" title=\"gt4s: $plus$colon\">+:</span>") &&
+ html.contains("<span class=\"name\" title=\"gt4s: $minus$colon\">-:</span>") &&
+ html.contains("""<span class="params">(<span name="n">n: <span name="scala.Int" class="extype">Int</span></span>)</span><span class="result">: <span name="scala.Int" class="extype">Int</span></span>""")
+ }
+ case _ => false
+ }
+ }
+
+ property("Trac #4374 - public") = {
+ val files = createTemplates("Trac4374.scala")
+ files("WithPublic.html") match {
+ case node: scala.xml.Node => {
+ val s = node.toString
+ s.contains("""href="WithPublic$.html"""") &&
+ files.get("WithPublic$.html") != None
+ }
+ case _ => false
+ }
+ }
+
+ property("Trac #4374 - private") = {
+ val files = createTemplates("Trac4374.scala")
+ files("WithPrivate.html") match {
+ case node: scala.xml.Node => {
+ val s = node.toString
+ ! s.contains("""href="WithPrivate$.html"""") &&
+ files.get("WithPrivate$.html") == None
+ }
+ case _ => false
+ }
+ }
+
+ property("Trac #3484") = {
+ val files = createTemplates("Trac3484.scala")
+
+ files("Collection.html") match {
+ case node: scala.xml.Node => {
+ val s = node.toString
+ s.contains("""<span class="result">: Traversable[B]</span>""")
+ }
+ case _ => false
+ }
+ }
+
+ property("Trac #3484 - SR704") = {
+ val files = createTemplates("Trac3484.scala")
+
+ files("SR704.html") match {
+ case node: scala.xml.Node => {
+ val s = node.toString
+ s.contains("Hello Mister John.")
+ }
+ case _ => false
+ }
+ }
+
+ property("Trac #4325 - files") = {
+ val files = createTemplates("Trac4325.scala")
+
+ files.get("WithSynthetic.html") != None &&
+ files.get("WithSynthetic$.html") == None &&
+ files.get("WithObject.html") != None &&
+ files.get("WithObject$.html") != None
+ }
+
+ property("Trac #4325 - Don't link to syntetic companion") = {
+ val files = createTemplates("Trac4325.scala")
+
+ files("WithSynthetic.html") match {
+ case node: scala.xml.Node => {
+ val s = node.toString
+ ! s.contains("""href="WithSynthetic$.html"""")
+ }
+ case _ => false
+ }
+ }
+
+ property("Trac #4325 - Link to companion") = {
+ val files = createTemplates("Trac4325.scala")
+
+ files("WithObject.html") match {
+ case node: scala.xml.Node => {
+ val s = node.toString
+ s.contains("""href="WithObject$.html"""")
+ }
+ case _ => false
+ }
+ }
+
+ property("Trac #4420 - no whitespace at end of line") = {
+ val files = createTemplates("Trac4420.scala")
+
+ files("TestA.html") match {
+ case node: scala.xml.Node => {
+ val s = node.toString
+ s.contains("""See YYY for more details""")
+ }
+ case _ => false
+ }
+ }
+
+ property("Trac #484 - refinements and existentials") = {
+ val files = createTemplates("Trac484.scala")
+ val lines = """
+ |type Bar = AnyRef { type Dingus <: T forSome { type T <: String } }
+ |type Foo = AnyRef { ... /* 3 definitions in type refinement */ }
+ |def g(x: T forSome { type T <: String }): String
+ |def h(x: Float): AnyRef { def quux(x: Int,y: Int): Int }
+ |def hh(x: Float): AnyRef { def quux(x: Int,y: Int): Int }
+ |def j(x: Int): Bar
+ |def k(): AnyRef { type Dingus <: T forSome { type T <: String } }
+ """.stripMargin.trim.lines map (_.trim)
+
+ files("RefinementAndExistentials.html") match {
+ case node: scala.xml.Node => {
+ val s = node.text.replaceAll("\\s+", " ")
+ lines forall (s contains _)
+ }
+ case _ => false
+ }
+ }
+
+ property("Trac #4289") = {
+ val files = createTemplates("Trac4289.scala")
+
+ files("Subclass.html") match {
+ case node: scala.xml.Node => {
+ node.toString.contains {
+ """<dt>returns</dt><dd class="cmt"><p>123</p></dd>"""
+ }
+ }
+ case _ => false
+ }
+ }
+
+ property("Trac #4409") = {
+ createTemplate("Trac4409.scala") match {
+ case node: scala.xml.Node => {
+ ! node.toString.contains("""<div class="block"><ol>since""")
+ }
+ case _ => false
+ }
+ }
+
+ property("Trac #4452") = {
+ createTemplate("Trac4452.scala") match {
+ case node: scala.xml.Node =>
+ ! node.toString.contains(">*")
+ case _ => false
+ }
+ }
+
+ property("Trac #4471") = {
+ createReferenceIndex("Trac4471.scala") match {
+ case Some(pages) =>
+ (pages.get("index/index-f.html") match {
+ case Some(node) => node.toString.contains(">A</a></strike>")
+ case _ => false
+ }) && (pages.get("index/index-b.html") match {
+ case Some(node) => node.toString.contains(">bar</strike>")
+ case _ => false
+ })
+ case _ => false
+ }
+ }
+
+ property("SI-4641") = {
+ createReferenceIndex("SI_4641.scala") match {
+ case Some(pages) => pages.contains("index/index-_.html")
+ case _ => false
+ }
+ }
+
+ property("SI-4421") = {
+ createTemplate("SI_4421.scala") match {
+ case node: scala.xml.Node => {
+ val html = node.toString
+ html.contains(">Example:") && html.contains(">Note<")
+ }
+ case _ => false
+ }
+ }
+
+ property("SI-4589") = {
+ createTemplate("SI_4589.scala") match {
+ case node: scala.xml.Node => {
+ val html = node.toString
+ html.contains(">x0123456789: <") &&
+ html.contains(">x012345678901234567890123456789: <")
+ }
+ case _ => false
+ }
+ }
+
+ property("Should decode symbolic type alias name.") = {
+ createTemplate("SI_4715.scala") match {
+ case node: scala.xml.Node => {
+ val html = node.toString
+ html.contains(">: :+:[<")
+ }
+ case _ => false
+ }
+ }
+
+ property("Shouldn't drop type arguments to aliased tuple.") = {
+ createTemplate("SI_4676.scala") match {
+ case node: scala.xml.Node => {
+ node.toString.contains(">ss: (String, String)<")
+ }
+ case _ => false
+ }
+ }
+
+ property("Default arguments of synthesized constructor") = {
+ val files = createTemplates("SI_4287.scala")
+
+ files("ClassWithSugar.html") match {
+ case node: scala.xml.Node => {
+ node.toString.contains(">123<")
+ }
+ case _ => false
+ }
+ }
+
+ property("Default arguments of synthesized constructor") = {
+ createTemplate("SI_4507.scala") match {
+ case node: scala.xml.Node =>
+ ! node.toString.contains("<li>returns silently when evaluating true and true</li>")
+ case _ => false
+ }
+ }
+
+ property("Use cases and links should not crash scaladoc") = {
+ createTemplate("SI_4898.scala")
+ true
+ }
+
+ // A piece of the signature - corresponding to the use case
+ def signature(no: Int, modifier: String) = ("""
+ <li visbl="pub" name="SI_5054_q""" + no + """#test" data-isabs="false">
+ <a id="test():Int"></a>
+ <h4 class="signature">
+ <span class="modifier_kind">
+ <span class="modifier">""" + modifier + """</span>
+ <span class="kind">def</span>
+ </span>
+ <span class="symbol">
+ <span class="name">test</span><span class="params">()</span><span class="result">: <span name="scala.Int" class="extype">Int</span></span>
+ </span>
+ </h4>
+ <p class="shortcomment cmt">[use case]
+ </p>
+ </li>""").replaceAll("\\s+", "")
+
+ property("Use cases should override their original members") = {
+ createTemplate("SI_5054_q1.scala") match {
+ case node: scala.xml.Node =>
+ node.toString.replaceAll("\\s+","").contains(signature(1, ""))
+ case _ => false
+ }
+ }
+
+ property("Use cases should keep their flags - final should not be lost") = {
+ createTemplate("SI_5054_q2.scala") match {
+ case node: scala.xml.Node =>
+ node.toString.replaceAll("\\s+","").contains(signature(2, "final"))
+ case _ => false
+ }
+ }
+
+ property("Use cases should keep their flags - implicit should not be lost") = {
+ createTemplate("SI_5054_q3.scala") match {
+ case node: scala.xml.Node =>
+ node.toString.replaceAll("\\s+","").contains(signature(3, "implicit"))
+ case _ => false
+ }
+ }
+
+ property("Use cases should keep their flags - real abstract should not be lost") = {
+ createTemplate("SI_5054_q4.scala") match {
+ case node: scala.xml.Node =>
+ node.toString.replaceAll("\\s+","").contains(signature(4, "abstract"))
+ case _ => false
+ }
+ }
+
+ property("Use cases should keep their flags - traits should not be affected") = {
+ createTemplate("SI_5054_q5.scala") match {
+ case node: scala.xml.Node =>
+ node.toString.replaceAll("\\s+","").contains(signature(5, ""))
+ case _ => false
+ }
+ }
+
+ property("Use cases should keep their flags - traits should not be affected") = {
+ createTemplate("SI_5054_q6.scala") match {
+ case node: scala.xml.Node =>
+ node.toString.replaceAll("\\s+","").contains(signature(6, "abstract"))
+ case _ => false
+ }
+ }
+
+ val useCaseExplanation = """
+ </li><li visbl="pub" name="SI_5054_q7#test" data-isabs="false">
+ <a id="test():Int"></a>
+ <h4 class="signature">
+ <span class="modifier_kind">
+ <span class="modifier">abstract </span>
+ <span class="kind">def</span>
+ </span>
+ <span class="symbol">
+ <span class="name">test</span><span class="params">()</span><span class="result">: <span name="scala.Int" class="extype">Int</span></span>
+ </span>
+ </h4>
+ <p class="shortcomment cmt">[use case] This takes the implicit value in scope.</p><div class="fullcomment">[use case] <div class="comment cmt"><p>This takes the implicit value in scope.</p><p>Example: <code>test()</code></p></div><dl class="paramcmts block"><dt>returns</dt><dd class="cmt"><p>some integer
+ </p></dd></dl></div>
+ </li><li visbl="pub" name="SI_5054_q7#test" data-isabs="false">
+ <a id="test(Int):Int"></a>
+ <h4 class="signature">
+ <span class="modifier_kind">
+ <span class="modifier">abstract </span>
+ <span class="kind">def</span>
+ </span>
+ <span class="symbol">
+ <span class="name">test</span><span class="params">(<span name="explicit">explicit: <span name="scala.Int" class="extype">Int</span></span>)</span><span class="result">: <span name="scala.Int" class="extype">Int</span></span>
+ </span>
+ </h4>
+ <p class="shortcomment cmt">[use case] This takes the explicit value passed.</p><div class="fullcomment">[use case] <div class="comment cmt"><p>This takes the explicit value passed.</p><p>Example: <code>test(3)</code></p></div><dl class="paramcmts block"><dt>returns</dt><dd class="cmt"><p>some integer
+ </p></dd></dl></div>
+ </li>
+ """.replaceAll("\\s+","")
+
+ property("Use case individual signature test") = {
+ createTemplate("SI_5054_q7.scala") match {
+ case node: scala.xml.Node =>
+ node.toString.replaceAll("\\s+","").contains(useCaseExplanation)
+ case _ => false
+ }
+ }
+
+ {
+ val files = createTemplates("basic.scala")
+ println(files)
+
+ property("class") = files.get("com/example/p1/Clazz.html") match {
+ case Some(node: scala.xml.Node) => {
+ property("implicit convertion") =
+ node.toString contains "<span class=\"modifier\">implicit </span>"
+
+ property("gt4s") =
+ node.toString contains "title=\"gt4s: $colon$colon\""
+
+ property("gt4s of a deprecated method") =
+ node.toString contains "title=\"gt4s: $colon$colon$colon$colon. Deprecated: "
+ true
+ }
+ case _ => false
+ }
+ property("package") = files.get("com/example/p1/package.html") != None
+
+ property("package object") = files("com/example/p1/package.html") match {
+ case node: scala.xml.Node =>
+ node.toString contains "com.example.p1.package#packageObjectMethod"
+ case _ => false
+ }
+
+ property("lower bound") = files("com/example/p1/LowerBound.html") match {
+ case node: scala.xml.Node => true
+ case _ => false
+ }
+
+ property("upper bound") = files("com/example/p1/UpperBound.html") match {
+ case node: scala.xml.Node => true
+ case _ => false
+ }
+ }
+}
diff --git a/test/scaladoc/scala/model/CommentFactoryTest.scala b/test/scaladoc/scala/model/CommentFactoryTest.scala
new file mode 100644
index 0000000000..69c314a64c
--- /dev/null
+++ b/test/scaladoc/scala/model/CommentFactoryTest.scala
@@ -0,0 +1,155 @@
+import org.scalacheck._
+import org.scalacheck.Prop._
+
+import scala.tools.nsc.Global
+import scala.tools.nsc.doc
+import scala.tools.nsc.doc.model.comment._
+
+class Factory(val g: Global, val s: doc.Settings)
+ extends doc.model.ModelFactory(g, s) {
+ thisFactory: Factory with CommentFactory with doc.model.TreeFactory =>
+
+ def strip(c: Comment): Option[Inline] = {
+ c.body match {
+ case Body(List(Paragraph(Chain(List(Summary(inner)))))) => Some(inner)
+ case _ => None
+ }
+ }
+
+ def parseComment(s: String): Option[Inline] =
+ strip(parse(s, "", scala.tools.nsc.util.NoPosition))
+
+ def createBody(s: String) =
+ parse(s, "", scala.tools.nsc.util.NoPosition).body
+}
+
+object Test extends Properties("CommentFactory") {
+ val factory = {
+ val settings = new doc.Settings((str: String) => {})
+ val reporter = new scala.tools.nsc.reporters.ConsoleReporter(settings)
+ val g = new Global(settings, reporter)
+ (new Factory(g, settings) with CommentFactory with doc.model.TreeFactory)
+ }
+
+ def parse(src: String, dst: Inline) = {
+ factory.parseComment(src) match {
+ case Some(inline) =>
+ inline == dst
+ case _ =>
+ false
+ }
+ }
+
+ property("parse") = parse(
+ "/** One two three */",
+ Text("One two three")
+ )
+ property("parse") = parse(
+ "/** One `two` three */",
+ Chain(List(Text("One "), Monospace(Text("two")), Text(" three")))
+ )
+
+ property("parse") = parse(
+ """
+/** One two
+ * three */""",
+ Text("One two\nthree")
+ )
+ property("parse") = parse(
+ """
+/** One `two`
+ * three */""",
+ Chain(List(Text("One "), Monospace(Text("two")), Text("\n"), Text("three")))
+ )
+
+ property("parse") = parse(
+ """
+/** One `two`
+ * three */""",
+ Chain(List(Text("One "), Monospace(Text("two")), Text("\n"), Text(" three")))
+ )
+
+ property("parse") = parse(
+ """
+/** One
+ * `two` three */""",
+ Chain(List(Text("One"), Text("\n"), Monospace(Text("two")), Text(" three")))
+ )
+
+ property("Trac #4361 - ^...^") = parse(
+ """
+/**
+ * hello ^world^ */""",
+ Chain(List(Text("hello "), Superscript(Text("world"))))
+ )
+
+ property("Trac #4361 - single ^ symbol") = parse(
+ """
+/**
+ * <pre>
+ * hello ^world
+ * </pre>
+ *
+ */""",
+ Chain(List(Text(""), Text("\n"),
+
+
+ HtmlTag("<pre>\nhello ^world\n</pre>")))
+ )
+
+ property("Trac #4366 - body") = {
+ val body = factory.createBody(
+ """
+ /**
+ * <strong><code>foo</code> has been deprecated and will be removed in a future version. Please call <code>bar</code> instead.</strong>
+ */
+ """
+ )
+
+ body == Body(List(Paragraph(Chain(List(
+ Summary(Chain(List(HtmlTag("<strong><code>foo</code> has been deprecated and will be removed in a future version. Please call <code>bar</code> instead.</strong>"), Text("\n"), Text(""))))
+ )))))
+ }
+
+ property("Trac #4366 - summary") = {
+ val body = factory.createBody(
+ """
+ /**
+ * <strong><code>foo</code> has been deprecated and will be removed in a future version. Please call <code>bar</code> instead.</strong>
+ */
+ """
+ )
+ body.summary == Some(Chain(List(HtmlTag("<strong><code>foo</code> has been deprecated and will be removed in a future version. Please call <code>bar</code> instead.</strong>"), Text("\n"), Text(""))))
+ }
+
+ property("Trac #4358 - body") = {
+ factory.createBody(
+ """
+ /**
+ * Implicit conversion that invokes the <code>expect</code> method on the <code>EasyMock</code> companion object (<em>i.e.</em>, the
+ * static <code>expect</code> method in Java class <code>org.easymock.EasyMock</code>).
+ */
+ """
+ ) match {
+ case Body(List(Paragraph(Chain(List(Summary(Chain(List(Chain(List(
+ Text("Implicit conversion that invokes the "),
+ HtmlTag("<code>expect</code>"),
+ Text(" method on the "),
+ HtmlTag("<code>EasyMock</code>"),
+ Text(" companion object ("),
+ HtmlTag("<em>i.e.</em>"),
+ Text(", the\nstatic "),
+ HtmlTag("<code>expect</code>"),
+ Text(" method in Java class "),
+ HtmlTag("<code>org.easymock.EasyMock</code>"),
+ Text(")")
+ )), Text(".")))), Text("\n")))))) =>
+ true
+ case other => {
+ println(other)
+ false
+ }
+ }
+ }
+
+}
diff --git a/test/script-tests/README b/test/script-tests/README
new file mode 100755
index 0000000000..3f5c2ce19c
--- /dev/null
+++ b/test/script-tests/README
@@ -0,0 +1,8 @@
+This is a fresh start for script tests. The fact that windows exists can
+no longer be allowed to stand in the way of testing the wide range of
+functionality which currently goes completely untested. So I'll just be
+putting self-contained script tests in here to run some way that doesn't
+depend on all the platform stars aligning all the time. Feel free to
+join me.
+
+-- extempore, Nov 21 2011 \ No newline at end of file
diff --git a/test/script-tests/jar-manifest/resources/MANIFEST.MF b/test/script-tests/jar-manifest/resources/MANIFEST.MF
new file mode 100644
index 0000000000..93c54c3c6f
--- /dev/null
+++ b/test/script-tests/jar-manifest/resources/MANIFEST.MF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Main-Class: bippy.Runner
+Class-Path: bippy.jar dingus.jar http://mirrors.ibiblio.org/pub/mirrors/maven2/com/thoughtworks/paranamer/paranamer/2.4/paranamer-2.4.jar
diff --git a/test/script-tests/jar-manifest/run-test b/test/script-tests/jar-manifest/run-test
new file mode 100755
index 0000000000..2c6d5876b8
--- /dev/null
+++ b/test/script-tests/jar-manifest/run-test
@@ -0,0 +1,41 @@
+#!/usr/bin/env bash
+#
+
+set -e
+
+paranamerjar="http://mirrors.ibiblio.org/pub/mirrors/maven2/com/thoughtworks/paranamer/paranamer/2.4/paranamer-2.4.jar"
+build=$(dirname $0)/../../../build/pack
+
+if [[ -n "$SCALA_HOME" ]]; then
+ scala="$SCALA_HOME/bin/scala"
+elif [[ -d $build ]]; then
+ scala=$(cd $build && pwd -P)/bin/scala
+else
+ scala="scala"
+fi
+
+echo "$($scala -version 2>&1)"
+scalac="${scala}c"
+
+[[ -d lib ]] || mkdir lib
+[[ -f lib/paranamer-2.4.jar ]] || ( printf >&2 "Grabbing paranamer jar\n\n" && cd lib && wget --quiet "$paranamerjar" )
+
+rm -rf target && mkdir target
+"$scalac" -d target -cp lib/'*' src/*.scala
+cd target
+
+jar cmf ../resources/MANIFEST.MF bippy.jar bippy
+jar cf dingus.jar dingus
+
+run () {
+ echo ""
+ echo "% $@"
+ "$@"
+}
+
+cat <<EOM
+$(run pwd)
+$(run jar tf bippy.jar)
+$(run jar tf dingus.jar)
+$(run $scala $@ bippy.jar)
+EOM
diff --git a/test/script-tests/jar-manifest/run-test.check b/test/script-tests/jar-manifest/run-test.check
new file mode 100644
index 0000000000..ef59a6cbac
--- /dev/null
+++ b/test/script-tests/jar-manifest/run-test.check
@@ -0,0 +1,30 @@
+Scala code runner version 2.10.0.r26038-b20111121102734 -- Copyright 2002-2011, LAMP/EPFL
+
+% pwd
+/scala/trunk/test/script-tests/jar-manifest/target
+
+% jar tf bippy.jar
+META-INF/
+META-INF/MANIFEST.MF
+bippy/
+bippy/Runner$$anonfun$main$1.class
+bippy/Runner$$anonfun$main$2.class
+bippy/Runner$$anonfun$main$3.class
+bippy/Runner$.class
+bippy/Runner.class
+
+% jar tf dingus.jar
+META-INF/
+META-INF/MANIFEST.MF
+dingus/
+dingus/Printable.class
+
+% /scala/trunk/build/pack/bin/scala bippy.jar
+1 "Greetings from dingus.jar!"
+2 bippyBingle has parameters: imparametorium, antidisestablish, x
+3 bippyBoo has parameters: quuxParameter
+4
+5 Urls exposed through the classloader:
+6 file:/scala/trunk/test/script-tests/jar-manifest/target/./bippy.jar
+7 file:/scala/trunk/test/script-tests/jar-manifest/target/./dingus.jar
+8 http://mirrors.ibiblio.org/pub/mirrors/maven2/com/thoughtworks/paranamer/paranamer/2.4/paranamer-2.4.jar
diff --git a/test/script-tests/jar-manifest/src/jar-test.scala b/test/script-tests/jar-manifest/src/jar-test.scala
new file mode 100644
index 0000000000..80e3aafff0
--- /dev/null
+++ b/test/script-tests/jar-manifest/src/jar-test.scala
@@ -0,0 +1,34 @@
+import scala.tools.nsc.util.HasClassPath
+
+package bippy {
+ object Runner {
+ var line = 0
+ def echo(msgs: Any*) = {
+ line += 1
+ Console.println("%-2s %s".format(line, msgs mkString " "))
+ }
+
+ def bippyBoo(quuxParameter: Int) = 5
+ def bippyBingle(imparametorium: String, antidisestablish: Int, x: Float) = ()
+
+ def main(args: Array[String]): Unit = {
+ echo(new dingus.Printable)
+ val namer = new com.thoughtworks.paranamer.BytecodeReadingParanamer
+ getClass.getMethods filter (_.getName startsWith "bippy") foreach { m =>
+ echo(m.getName, "has parameters:", namer.lookupParameterNames(m).mkString(", "))
+ }
+ echo("")
+ echo("Urls exposed through the classloader:")
+ getClass.getClassLoader match {
+ case x: HasClassPath => x.classPathURLs foreach (x => echo(x))
+ case _ => echo("None! Seems unlikely we'd get this far then.")
+ }
+ }
+ }
+}
+
+package dingus {
+ class Printable {
+ override def toString = "\"Greetings from dingus.jar!\""
+ }
+} \ No newline at end of file
diff --git a/test/simplejson/__init__.py b/test/simplejson/__init__.py
new file mode 100644
index 0000000000..d5b4d39913
--- /dev/null
+++ b/test/simplejson/__init__.py
@@ -0,0 +1,318 @@
+r"""JSON (JavaScript Object Notation) <http://json.org> is a subset of
+JavaScript syntax (ECMA-262 3rd edition) used as a lightweight data
+interchange format.
+
+:mod:`simplejson` exposes an API familiar to users of the standard library
+:mod:`marshal` and :mod:`pickle` modules. It is the externally maintained
+version of the :mod:`json` library contained in Python 2.6, but maintains
+compatibility with Python 2.4 and Python 2.5 and (currently) has
+significant performance advantages, even without using the optional C
+extension for speedups.
+
+Encoding basic Python object hierarchies::
+
+ >>> import simplejson as json
+ >>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
+ '["foo", {"bar": ["baz", null, 1.0, 2]}]'
+ >>> print json.dumps("\"foo\bar")
+ "\"foo\bar"
+ >>> print json.dumps(u'\u1234')
+ "\u1234"
+ >>> print json.dumps('\\')
+ "\\"
+ >>> print json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True)
+ {"a": 0, "b": 0, "c": 0}
+ >>> from StringIO import StringIO
+ >>> io = StringIO()
+ >>> json.dump(['streaming API'], io)
+ >>> io.getvalue()
+ '["streaming API"]'
+
+Compact encoding::
+
+ >>> import simplejson as json
+ >>> json.dumps([1,2,3,{'4': 5, '6': 7}], separators=(',',':'))
+ '[1,2,3,{"4":5,"6":7}]'
+
+Pretty printing::
+
+ >>> import simplejson as json
+ >>> s = json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4)
+ >>> print '\n'.join([l.rstrip() for l in s.splitlines()])
+ {
+ "4": 5,
+ "6": 7
+ }
+
+Decoding JSON::
+
+ >>> import simplejson as json
+ >>> obj = [u'foo', {u'bar': [u'baz', None, 1.0, 2]}]
+ >>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]') == obj
+ True
+ >>> json.loads('"\\"foo\\bar"') == u'"foo\x08ar'
+ True
+ >>> from StringIO import StringIO
+ >>> io = StringIO('["streaming API"]')
+ >>> json.load(io)[0] == 'streaming API'
+ True
+
+Specializing JSON object decoding::
+
+ >>> import simplejson as json
+ >>> def as_complex(dct):
+ ... if '__complex__' in dct:
+ ... return complex(dct['real'], dct['imag'])
+ ... return dct
+ ...
+ >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}',
+ ... object_hook=as_complex)
+ (1+2j)
+ >>> import decimal
+ >>> json.loads('1.1', parse_float=decimal.Decimal) == decimal.Decimal('1.1')
+ True
+
+Specializing JSON object encoding::
+
+ >>> import simplejson as json
+ >>> def encode_complex(obj):
+ ... if isinstance(obj, complex):
+ ... return [obj.real, obj.imag]
+ ... raise TypeError(repr(o) + " is not JSON serializable")
+ ...
+ >>> json.dumps(2 + 1j, default=encode_complex)
+ '[2.0, 1.0]'
+ >>> json.JSONEncoder(default=encode_complex).encode(2 + 1j)
+ '[2.0, 1.0]'
+ >>> ''.join(json.JSONEncoder(default=encode_complex).iterencode(2 + 1j))
+ '[2.0, 1.0]'
+
+
+Using simplejson.tool from the shell to validate and pretty-print::
+
+ $ echo '{"json":"obj"}' | python -m simplejson.tool
+ {
+ "json": "obj"
+ }
+ $ echo '{ 1.2:3.4}' | python -m simplejson.tool
+ Expecting property name: line 1 column 2 (char 2)
+"""
+__version__ = '2.0.9'
+__all__ = [
+ 'dump', 'dumps', 'load', 'loads',
+ 'JSONDecoder', 'JSONEncoder',
+]
+
+__author__ = 'Bob Ippolito <bob@redivi.com>'
+
+from decoder import JSONDecoder
+from encoder import JSONEncoder
+
+_default_encoder = JSONEncoder(
+ skipkeys=False,
+ ensure_ascii=True,
+ check_circular=True,
+ allow_nan=True,
+ indent=None,
+ separators=None,
+ encoding='utf-8',
+ default=None,
+)
+
+def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True,
+ allow_nan=True, cls=None, indent=None, separators=None,
+ encoding='utf-8', default=None, **kw):
+ """Serialize ``obj`` as a JSON formatted stream to ``fp`` (a
+ ``.write()``-supporting file-like object).
+
+ If ``skipkeys`` is true then ``dict`` keys that are not basic types
+ (``str``, ``unicode``, ``int``, ``long``, ``float``, ``bool``, ``None``)
+ will be skipped instead of raising a ``TypeError``.
+
+ If ``ensure_ascii`` is false, then the some chunks written to ``fp``
+ may be ``unicode`` instances, subject to normal Python ``str`` to
+ ``unicode`` coercion rules. Unless ``fp.write()`` explicitly
+ understands ``unicode`` (as in ``codecs.getwriter()``) this is likely
+ to cause an error.
+
+ If ``check_circular`` is false, then the circular reference check
+ for container types will be skipped and a circular reference will
+ result in an ``OverflowError`` (or worse).
+
+ If ``allow_nan`` is false, then it will be a ``ValueError`` to
+ serialize out of range ``float`` values (``nan``, ``inf``, ``-inf``)
+ in strict compliance of the JSON specification, instead of using the
+ JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``).
+
+ If ``indent`` is a non-negative integer, then JSON array elements and object
+ members will be pretty-printed with that indent level. An indent level
+ of 0 will only insert newlines. ``None`` is the most compact representation.
+
+ If ``separators`` is an ``(item_separator, dict_separator)`` tuple
+ then it will be used instead of the default ``(', ', ': ')`` separators.
+ ``(',', ':')`` is the most compact JSON representation.
+
+ ``encoding`` is the character encoding for str instances, default is UTF-8.
+
+ ``default(obj)`` is a function that should return a serializable version
+ of obj or raise TypeError. The default simply raises TypeError.
+
+ To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the
+ ``.default()`` method to serialize additional types), specify it with
+ the ``cls`` kwarg.
+
+ """
+ # cached encoder
+ if (not skipkeys and ensure_ascii and
+ check_circular and allow_nan and
+ cls is None and indent is None and separators is None and
+ encoding == 'utf-8' and default is None and not kw):
+ iterable = _default_encoder.iterencode(obj)
+ else:
+ if cls is None:
+ cls = JSONEncoder
+ iterable = cls(skipkeys=skipkeys, ensure_ascii=ensure_ascii,
+ check_circular=check_circular, allow_nan=allow_nan, indent=indent,
+ separators=separators, encoding=encoding,
+ default=default, **kw).iterencode(obj)
+ # could accelerate with writelines in some versions of Python, at
+ # a debuggability cost
+ for chunk in iterable:
+ fp.write(chunk)
+
+
+def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,
+ allow_nan=True, cls=None, indent=None, separators=None,
+ encoding='utf-8', default=None, **kw):
+ """Serialize ``obj`` to a JSON formatted ``str``.
+
+ If ``skipkeys`` is false then ``dict`` keys that are not basic types
+ (``str``, ``unicode``, ``int``, ``long``, ``float``, ``bool``, ``None``)
+ will be skipped instead of raising a ``TypeError``.
+
+ If ``ensure_ascii`` is false, then the return value will be a
+ ``unicode`` instance subject to normal Python ``str`` to ``unicode``
+ coercion rules instead of being escaped to an ASCII ``str``.
+
+ If ``check_circular`` is false, then the circular reference check
+ for container types will be skipped and a circular reference will
+ result in an ``OverflowError`` (or worse).
+
+ If ``allow_nan`` is false, then it will be a ``ValueError`` to
+ serialize out of range ``float`` values (``nan``, ``inf``, ``-inf``) in
+ strict compliance of the JSON specification, instead of using the
+ JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``).
+
+ If ``indent`` is a non-negative integer, then JSON array elements and
+ object members will be pretty-printed with that indent level. An indent
+ level of 0 will only insert newlines. ``None`` is the most compact
+ representation.
+
+ If ``separators`` is an ``(item_separator, dict_separator)`` tuple
+ then it will be used instead of the default ``(', ', ': ')`` separators.
+ ``(',', ':')`` is the most compact JSON representation.
+
+ ``encoding`` is the character encoding for str instances, default is UTF-8.
+
+ ``default(obj)`` is a function that should return a serializable version
+ of obj or raise TypeError. The default simply raises TypeError.
+
+ To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the
+ ``.default()`` method to serialize additional types), specify it with
+ the ``cls`` kwarg.
+
+ """
+ # cached encoder
+ if (not skipkeys and ensure_ascii and
+ check_circular and allow_nan and
+ cls is None and indent is None and separators is None and
+ encoding == 'utf-8' and default is None and not kw):
+ return _default_encoder.encode(obj)
+ if cls is None:
+ cls = JSONEncoder
+ return cls(
+ skipkeys=skipkeys, ensure_ascii=ensure_ascii,
+ check_circular=check_circular, allow_nan=allow_nan, indent=indent,
+ separators=separators, encoding=encoding, default=default,
+ **kw).encode(obj)
+
+
+_default_decoder = JSONDecoder(encoding=None, object_hook=None)
+
+
+def load(fp, encoding=None, cls=None, object_hook=None, parse_float=None,
+ parse_int=None, parse_constant=None, **kw):
+ """Deserialize ``fp`` (a ``.read()``-supporting file-like object containing
+ a JSON document) to a Python object.
+
+ If the contents of ``fp`` is encoded with an ASCII based encoding other
+ than utf-8 (e.g. latin-1), then an appropriate ``encoding`` name must
+ be specified. Encodings that are not ASCII based (such as UCS-2) are
+ not allowed, and should be wrapped with
+ ``codecs.getreader(fp)(encoding)``, or simply decoded to a ``unicode``
+ object and passed to ``loads()``
+
+ ``object_hook`` is an optional function that will be called with the
+ result of any object literal decode (a ``dict``). The return value of
+ ``object_hook`` will be used instead of the ``dict``. This feature
+ can be used to implement custom decoders (e.g. JSON-RPC class hinting).
+
+ To use a custom ``JSONDecoder`` subclass, specify it with the ``cls``
+ kwarg.
+
+ """
+ return loads(fp.read(),
+ encoding=encoding, cls=cls, object_hook=object_hook,
+ parse_float=parse_float, parse_int=parse_int,
+ parse_constant=parse_constant, **kw)
+
+
+def loads(s, encoding=None, cls=None, object_hook=None, parse_float=None,
+ parse_int=None, parse_constant=None, **kw):
+ """Deserialize ``s`` (a ``str`` or ``unicode`` instance containing a JSON
+ document) to a Python object.
+
+ If ``s`` is a ``str`` instance and is encoded with an ASCII based encoding
+ other than utf-8 (e.g. latin-1) then an appropriate ``encoding`` name
+ must be specified. Encodings that are not ASCII based (such as UCS-2)
+ are not allowed and should be decoded to ``unicode`` first.
+
+ ``object_hook`` is an optional function that will be called with the
+ result of any object literal decode (a ``dict``). The return value of
+ ``object_hook`` will be used instead of the ``dict``. This feature
+ can be used to implement custom decoders (e.g. JSON-RPC class hinting).
+
+ ``parse_float``, if specified, will be called with the string
+ of every JSON float to be decoded. By default this is equivalent to
+ float(num_str). This can be used to use another datatype or parser
+ for JSON floats (e.g. decimal.Decimal).
+
+ ``parse_int``, if specified, will be called with the string
+ of every JSON int to be decoded. By default this is equivalent to
+ int(num_str). This can be used to use another datatype or parser
+ for JSON integers (e.g. float).
+
+ ``parse_constant``, if specified, will be called with one of the
+ following strings: -Infinity, Infinity, NaN, null, true, false.
+ This can be used to raise an exception if invalid JSON numbers
+ are encountered.
+
+ To use a custom ``JSONDecoder`` subclass, specify it with the ``cls``
+ kwarg.
+
+ """
+ if (cls is None and encoding is None and object_hook is None and
+ parse_int is None and parse_float is None and
+ parse_constant is None and not kw):
+ return _default_decoder.decode(s)
+ if cls is None:
+ cls = JSONDecoder
+ if object_hook is not None:
+ kw['object_hook'] = object_hook
+ if parse_float is not None:
+ kw['parse_float'] = parse_float
+ if parse_int is not None:
+ kw['parse_int'] = parse_int
+ if parse_constant is not None:
+ kw['parse_constant'] = parse_constant
+ return cls(encoding=encoding, **kw).decode(s)
diff --git a/test/simplejson/decoder.py b/test/simplejson/decoder.py
new file mode 100644
index 0000000000..b769ea486c
--- /dev/null
+++ b/test/simplejson/decoder.py
@@ -0,0 +1,354 @@
+"""Implementation of JSONDecoder
+"""
+import re
+import sys
+import struct
+
+from simplejson.scanner import make_scanner
+try:
+ from simplejson._speedups import scanstring as c_scanstring
+except ImportError:
+ c_scanstring = None
+
+__all__ = ['JSONDecoder']
+
+FLAGS = re.VERBOSE | re.MULTILINE | re.DOTALL
+
+def _floatconstants():
+ _BYTES = '7FF80000000000007FF0000000000000'.decode('hex')
+ if sys.byteorder != 'big':
+ _BYTES = _BYTES[:8][::-1] + _BYTES[8:][::-1]
+ nan, inf = struct.unpack('dd', _BYTES)
+ return nan, inf, -inf
+
+NaN, PosInf, NegInf = _floatconstants()
+
+
+def linecol(doc, pos):
+ lineno = doc.count('\n', 0, pos) + 1
+ if lineno == 1:
+ colno = pos
+ else:
+ colno = pos - doc.rindex('\n', 0, pos)
+ return lineno, colno
+
+
+def errmsg(msg, doc, pos, end=None):
+ # Note that this function is called from _speedups
+ lineno, colno = linecol(doc, pos)
+ if end is None:
+ #fmt = '{0}: line {1} column {2} (char {3})'
+ #return fmt.format(msg, lineno, colno, pos)
+ fmt = '%s: line %d column %d (char %d)'
+ return fmt % (msg, lineno, colno, pos)
+ endlineno, endcolno = linecol(doc, end)
+ #fmt = '{0}: line {1} column {2} - line {3} column {4} (char {5} - {6})'
+ #return fmt.format(msg, lineno, colno, endlineno, endcolno, pos, end)
+ fmt = '%s: line %d column %d - line %d column %d (char %d - %d)'
+ return fmt % (msg, lineno, colno, endlineno, endcolno, pos, end)
+
+
+_CONSTANTS = {
+ '-Infinity': NegInf,
+ 'Infinity': PosInf,
+ 'NaN': NaN,
+}
+
+STRINGCHUNK = re.compile(r'(.*?)(["\\\x00-\x1f])', FLAGS)
+BACKSLASH = {
+ '"': u'"', '\\': u'\\', '/': u'/',
+ 'b': u'\b', 'f': u'\f', 'n': u'\n', 'r': u'\r', 't': u'\t',
+}
+
+DEFAULT_ENCODING = "utf-8"
+
+def py_scanstring(s, end, encoding=None, strict=True, _b=BACKSLASH, _m=STRINGCHUNK.match):
+ """Scan the string s for a JSON string. End is the index of the
+ character in s after the quote that started the JSON string.
+ Unescapes all valid JSON string escape sequences and raises ValueError
+ on attempt to decode an invalid string. If strict is False then literal
+ control characters are allowed in the string.
+
+ Returns a tuple of the decoded string and the index of the character in s
+ after the end quote."""
+ if encoding is None:
+ encoding = DEFAULT_ENCODING
+ chunks = []
+ _append = chunks.append
+ begin = end - 1
+ while 1:
+ chunk = _m(s, end)
+ if chunk is None:
+ raise ValueError(
+ errmsg("Unterminated string starting at", s, begin))
+ end = chunk.end()
+ content, terminator = chunk.groups()
+ # Content is contains zero or more unescaped string characters
+ if content:
+ if not isinstance(content, unicode):
+ content = unicode(content, encoding)
+ _append(content)
+ # Terminator is the end of string, a literal control character,
+ # or a backslash denoting that an escape sequence follows
+ if terminator == '"':
+ break
+ elif terminator != '\\':
+ if strict:
+ msg = "Invalid control character %r at" % (terminator,)
+ #msg = "Invalid control character {0!r} at".format(terminator)
+ raise ValueError(errmsg(msg, s, end))
+ else:
+ _append(terminator)
+ continue
+ try:
+ esc = s[end]
+ except IndexError:
+ raise ValueError(
+ errmsg("Unterminated string starting at", s, begin))
+ # If not a unicode escape sequence, must be in the lookup table
+ if esc != 'u':
+ try:
+ char = _b[esc]
+ except KeyError:
+ msg = "Invalid \\escape: " + repr(esc)
+ raise ValueError(errmsg(msg, s, end))
+ end += 1
+ else:
+ # Unicode escape sequence
+ esc = s[end + 1:end + 5]
+ next_end = end + 5
+ if len(esc) != 4:
+ msg = "Invalid \\uXXXX escape"
+ raise ValueError(errmsg(msg, s, end))
+ uni = int(esc, 16)
+ # Check for surrogate pair on UCS-4 systems
+ if 0xd800 <= uni <= 0xdbff and sys.maxunicode > 65535:
+ msg = "Invalid \\uXXXX\\uXXXX surrogate pair"
+ if not s[end + 5:end + 7] == '\\u':
+ raise ValueError(errmsg(msg, s, end))
+ esc2 = s[end + 7:end + 11]
+ if len(esc2) != 4:
+ raise ValueError(errmsg(msg, s, end))
+ uni2 = int(esc2, 16)
+ uni = 0x10000 + (((uni - 0xd800) << 10) | (uni2 - 0xdc00))
+ next_end += 6
+ char = unichr(uni)
+ end = next_end
+ # Append the unescaped character
+ _append(char)
+ return u''.join(chunks), end
+
+
+# Use speedup if available
+scanstring = c_scanstring or py_scanstring
+
+WHITESPACE = re.compile(r'[ \t\n\r]*', FLAGS)
+WHITESPACE_STR = ' \t\n\r'
+
+def JSONObject((s, end), encoding, strict, scan_once, object_hook, _w=WHITESPACE.match, _ws=WHITESPACE_STR):
+ pairs = {}
+ # Use a slice to prevent IndexError from being raised, the following
+ # check will raise a more specific ValueError if the string is empty
+ nextchar = s[end:end + 1]
+ # Normally we expect nextchar == '"'
+ if nextchar != '"':
+ if nextchar in _ws:
+ end = _w(s, end).end()
+ nextchar = s[end:end + 1]
+ # Trivial empty object
+ if nextchar == '}':
+ return pairs, end + 1
+ elif nextchar != '"':
+ raise ValueError(errmsg("Expecting property name", s, end))
+ end += 1
+ while True:
+ key, end = scanstring(s, end, encoding, strict)
+
+ # To skip some function call overhead we optimize the fast paths where
+ # the JSON key separator is ": " or just ":".
+ if s[end:end + 1] != ':':
+ end = _w(s, end).end()
+ if s[end:end + 1] != ':':
+ raise ValueError(errmsg("Expecting : delimiter", s, end))
+
+ end += 1
+
+ try:
+ if s[end] in _ws:
+ end += 1
+ if s[end] in _ws:
+ end = _w(s, end + 1).end()
+ except IndexError:
+ pass
+
+ try:
+ value, end = scan_once(s, end)
+ except StopIteration:
+ raise ValueError(errmsg("Expecting object", s, end))
+ pairs[key] = value
+
+ try:
+ nextchar = s[end]
+ if nextchar in _ws:
+ end = _w(s, end + 1).end()
+ nextchar = s[end]
+ except IndexError:
+ nextchar = ''
+ end += 1
+
+ if nextchar == '}':
+ break
+ elif nextchar != ',':
+ raise ValueError(errmsg("Expecting , delimiter", s, end - 1))
+
+ try:
+ nextchar = s[end]
+ if nextchar in _ws:
+ end += 1
+ nextchar = s[end]
+ if nextchar in _ws:
+ end = _w(s, end + 1).end()
+ nextchar = s[end]
+ except IndexError:
+ nextchar = ''
+
+ end += 1
+ if nextchar != '"':
+ raise ValueError(errmsg("Expecting property name", s, end - 1))
+
+ if object_hook is not None:
+ pairs = object_hook(pairs)
+ return pairs, end
+
+def JSONArray((s, end), scan_once, _w=WHITESPACE.match, _ws=WHITESPACE_STR):
+ values = []
+ nextchar = s[end:end + 1]
+ if nextchar in _ws:
+ end = _w(s, end + 1).end()
+ nextchar = s[end:end + 1]
+ # Look-ahead for trivial empty array
+ if nextchar == ']':
+ return values, end + 1
+ _append = values.append
+ while True:
+ try:
+ value, end = scan_once(s, end)
+ except StopIteration:
+ raise ValueError(errmsg("Expecting object", s, end))
+ _append(value)
+ nextchar = s[end:end + 1]
+ if nextchar in _ws:
+ end = _w(s, end + 1).end()
+ nextchar = s[end:end + 1]
+ end += 1
+ if nextchar == ']':
+ break
+ elif nextchar != ',':
+ raise ValueError(errmsg("Expecting , delimiter", s, end))
+
+ try:
+ if s[end] in _ws:
+ end += 1
+ if s[end] in _ws:
+ end = _w(s, end + 1).end()
+ except IndexError:
+ pass
+
+ return values, end
+
+class JSONDecoder(object):
+ """Simple JSON <http://json.org> decoder
+
+ Performs the following translations in decoding by default:
+
+ +---------------+-------------------+
+ | JSON | Python |
+ +===============+===================+
+ | object | dict |
+ +---------------+-------------------+
+ | array | list |
+ +---------------+-------------------+
+ | string | unicode |
+ +---------------+-------------------+
+ | number (int) | int, long |
+ +---------------+-------------------+
+ | number (real) | float |
+ +---------------+-------------------+
+ | true | True |
+ +---------------+-------------------+
+ | false | False |
+ +---------------+-------------------+
+ | null | None |
+ +---------------+-------------------+
+
+ It also understands ``NaN``, ``Infinity``, and ``-Infinity`` as
+ their corresponding ``float`` values, which is outside the JSON spec.
+
+ """
+
+ def __init__(self, encoding=None, object_hook=None, parse_float=None,
+ parse_int=None, parse_constant=None, strict=True):
+ """``encoding`` determines the encoding used to interpret any ``str``
+ objects decoded by this instance (utf-8 by default). It has no
+ effect when decoding ``unicode`` objects.
+
+ Note that currently only encodings that are a superset of ASCII work,
+ strings of other encodings should be passed in as ``unicode``.
+
+ ``object_hook``, if specified, will be called with the result
+ of every JSON object decoded and its return value will be used in
+ place of the given ``dict``. This can be used to provide custom
+ deserializations (e.g. to support JSON-RPC class hinting).
+
+ ``parse_float``, if specified, will be called with the string
+ of every JSON float to be decoded. By default this is equivalent to
+ float(num_str). This can be used to use another datatype or parser
+ for JSON floats (e.g. decimal.Decimal).
+
+ ``parse_int``, if specified, will be called with the string
+ of every JSON int to be decoded. By default this is equivalent to
+ int(num_str). This can be used to use another datatype or parser
+ for JSON integers (e.g. float).
+
+ ``parse_constant``, if specified, will be called with one of the
+ following strings: -Infinity, Infinity, NaN.
+ This can be used to raise an exception if invalid JSON numbers
+ are encountered.
+
+ """
+ self.encoding = encoding
+ self.object_hook = object_hook
+ self.parse_float = parse_float or float
+ self.parse_int = parse_int or int
+ self.parse_constant = parse_constant or _CONSTANTS.__getitem__
+ self.strict = strict
+ self.parse_object = JSONObject
+ self.parse_array = JSONArray
+ self.parse_string = scanstring
+ self.scan_once = make_scanner(self)
+
+ def decode(self, s, _w=WHITESPACE.match):
+ """Return the Python representation of ``s`` (a ``str`` or ``unicode``
+ instance containing a JSON document)
+
+ """
+ obj, end = self.raw_decode(s, idx=_w(s, 0).end())
+ end = _w(s, end).end()
+ if end != len(s):
+ raise ValueError(errmsg("Extra data", s, end, len(s)))
+ return obj
+
+ def raw_decode(self, s, idx=0):
+ """Decode a JSON document from ``s`` (a ``str`` or ``unicode`` beginning
+ with a JSON document) and return a 2-tuple of the Python
+ representation and the index in ``s`` where the document ended.
+
+ This can be used to decode a JSON document from a string that may
+ have extraneous data at the end.
+
+ """
+ try:
+ obj, end = self.scan_once(s, idx)
+ except StopIteration:
+ raise ValueError("No JSON object could be decoded")
+ return obj, end
diff --git a/test/simplejson/encoder.py b/test/simplejson/encoder.py
new file mode 100644
index 0000000000..cf58290366
--- /dev/null
+++ b/test/simplejson/encoder.py
@@ -0,0 +1,440 @@
+"""Implementation of JSONEncoder
+"""
+import re
+
+try:
+ from simplejson._speedups import encode_basestring_ascii as c_encode_basestring_ascii
+except ImportError:
+ c_encode_basestring_ascii = None
+try:
+ from simplejson._speedups import make_encoder as c_make_encoder
+except ImportError:
+ c_make_encoder = None
+
+ESCAPE = re.compile(r'[\x00-\x1f\\"\b\f\n\r\t]')
+ESCAPE_ASCII = re.compile(r'([\\"]|[^\ -~])')
+HAS_UTF8 = re.compile(r'[\x80-\xff]')
+ESCAPE_DCT = {
+ '\\': '\\\\',
+ '"': '\\"',
+ '\b': '\\b',
+ '\f': '\\f',
+ '\n': '\\n',
+ '\r': '\\r',
+ '\t': '\\t',
+}
+for i in range(0x20):
+ #ESCAPE_DCT.setdefault(chr(i), '\\u{0:04x}'.format(i))
+ ESCAPE_DCT.setdefault(chr(i), '\\u%04x' % (i,))
+
+# Assume this produces an infinity on all machines (probably not guaranteed)
+INFINITY = float('1e66666')
+FLOAT_REPR = repr
+
+def encode_basestring(s):
+ """Return a JSON representation of a Python string
+
+ """
+ def replace(match):
+ return ESCAPE_DCT[match.group(0)]
+ return '"' + ESCAPE.sub(replace, s) + '"'
+
+
+def py_encode_basestring_ascii(s):
+ """Return an ASCII-only JSON representation of a Python string
+
+ """
+ if isinstance(s, str) and HAS_UTF8.search(s) is not None:
+ s = s.decode('utf-8')
+ def replace(match):
+ s = match.group(0)
+ try:
+ return ESCAPE_DCT[s]
+ except KeyError:
+ n = ord(s)
+ if n < 0x10000:
+ #return '\\u{0:04x}'.format(n)
+ return '\\u%04x' % (n,)
+ else:
+ # surrogate pair
+ n -= 0x10000
+ s1 = 0xd800 | ((n >> 10) & 0x3ff)
+ s2 = 0xdc00 | (n & 0x3ff)
+ #return '\\u{0:04x}\\u{1:04x}'.format(s1, s2)
+ return '\\u%04x\\u%04x' % (s1, s2)
+ return '"' + str(ESCAPE_ASCII.sub(replace, s)) + '"'
+
+
+encode_basestring_ascii = c_encode_basestring_ascii or py_encode_basestring_ascii
+
+class JSONEncoder(object):
+ """Extensible JSON <http://json.org> encoder for Python data structures.
+
+ Supports the following objects and types by default:
+
+ +-------------------+---------------+
+ | Python | JSON |
+ +===================+===============+
+ | dict | object |
+ +-------------------+---------------+
+ | list, tuple | array |
+ +-------------------+---------------+
+ | str, unicode | string |
+ +-------------------+---------------+
+ | int, long, float | number |
+ +-------------------+---------------+
+ | True | true |
+ +-------------------+---------------+
+ | False | false |
+ +-------------------+---------------+
+ | None | null |
+ +-------------------+---------------+
+
+ To extend this to recognize other objects, subclass and implement a
+ ``.default()`` method with another method that returns a serializable
+ object for ``o`` if possible, otherwise it should call the superclass
+ implementation (to raise ``TypeError``).
+
+ """
+ item_separator = ', '
+ key_separator = ': '
+ def __init__(self, skipkeys=False, ensure_ascii=True,
+ check_circular=True, allow_nan=True, sort_keys=False,
+ indent=None, separators=None, encoding='utf-8', default=None):
+ """Constructor for JSONEncoder, with sensible defaults.
+
+ If skipkeys is false, then it is a TypeError to attempt
+ encoding of keys that are not str, int, long, float or None. If
+ skipkeys is True, such items are simply skipped.
+
+ If ensure_ascii is true, the output is guaranteed to be str
+ objects with all incoming unicode characters escaped. If
+ ensure_ascii is false, the output will be unicode object.
+
+ If check_circular is true, then lists, dicts, and custom encoded
+ objects will be checked for circular references during encoding to
+ prevent an infinite recursion (which would cause an OverflowError).
+ Otherwise, no such check takes place.
+
+ If allow_nan is true, then NaN, Infinity, and -Infinity will be
+ encoded as such. This behavior is not JSON specification compliant,
+ but is consistent with most JavaScript based encoders and decoders.
+ Otherwise, it will be a ValueError to encode such floats.
+
+ If sort_keys is true, then the output of dictionaries will be
+ sorted by key; this is useful for regression tests to ensure
+ that JSON serializations can be compared on a day-to-day basis.
+
+ If indent is a non-negative integer, then JSON array
+ elements and object members will be pretty-printed with that
+ indent level. An indent level of 0 will only insert newlines.
+ None is the most compact representation.
+
+ If specified, separators should be a (item_separator, key_separator)
+ tuple. The default is (', ', ': '). To get the most compact JSON
+ representation you should specify (',', ':') to eliminate whitespace.
+
+ If specified, default is a function that gets called for objects
+ that can't otherwise be serialized. It should return a JSON encodable
+ version of the object or raise a ``TypeError``.
+
+ If encoding is not None, then all input strings will be
+ transformed into unicode using that encoding prior to JSON-encoding.
+ The default is UTF-8.
+
+ """
+
+ self.skipkeys = skipkeys
+ self.ensure_ascii = ensure_ascii
+ self.check_circular = check_circular
+ self.allow_nan = allow_nan
+ self.sort_keys = sort_keys
+ self.indent = indent
+ if separators is not None:
+ self.item_separator, self.key_separator = separators
+ if default is not None:
+ self.default = default
+ self.encoding = encoding
+
+ def default(self, o):
+ """Implement this method in a subclass such that it returns
+ a serializable object for ``o``, or calls the base implementation
+ (to raise a ``TypeError``).
+
+ For example, to support arbitrary iterators, you could
+ implement default like this::
+
+ def default(self, o):
+ try:
+ iterable = iter(o)
+ except TypeError:
+ pass
+ else:
+ return list(iterable)
+ return JSONEncoder.default(self, o)
+
+ """
+ raise TypeError(repr(o) + " is not JSON serializable")
+
+ def encode(self, o):
+ """Return a JSON string representation of a Python data structure.
+
+ >>> JSONEncoder().encode({"foo": ["bar", "baz"]})
+ '{"foo": ["bar", "baz"]}'
+
+ """
+ # This is for extremely simple cases and benchmarks.
+ if isinstance(o, basestring):
+ if isinstance(o, str):
+ _encoding = self.encoding
+ if (_encoding is not None
+ and not (_encoding == 'utf-8')):
+ o = o.decode(_encoding)
+ if self.ensure_ascii:
+ return encode_basestring_ascii(o)
+ else:
+ return encode_basestring(o)
+ # This doesn't pass the iterator directly to ''.join() because the
+ # exceptions aren't as detailed. The list call should be roughly
+ # equivalent to the PySequence_Fast that ''.join() would do.
+ chunks = self.iterencode(o, _one_shot=True)
+ if not isinstance(chunks, (list, tuple)):
+ chunks = list(chunks)
+ return ''.join(chunks)
+
+ def iterencode(self, o, _one_shot=False):
+ """Encode the given object and yield each string
+ representation as available.
+
+ For example::
+
+ for chunk in JSONEncoder().iterencode(bigobject):
+ mysocket.write(chunk)
+
+ """
+ if self.check_circular:
+ markers = {}
+ else:
+ markers = None
+ if self.ensure_ascii:
+ _encoder = encode_basestring_ascii
+ else:
+ _encoder = encode_basestring
+ if self.encoding != 'utf-8':
+ def _encoder(o, _orig_encoder=_encoder, _encoding=self.encoding):
+ if isinstance(o, str):
+ o = o.decode(_encoding)
+ return _orig_encoder(o)
+
+ def floatstr(o, allow_nan=self.allow_nan, _repr=FLOAT_REPR, _inf=INFINITY, _neginf=-INFINITY):
+ # Check for specials. Note that this type of test is processor- and/or
+ # platform-specific, so do tests which don't depend on the internals.
+
+ if o != o:
+ text = 'NaN'
+ elif o == _inf:
+ text = 'Infinity'
+ elif o == _neginf:
+ text = '-Infinity'
+ else:
+ return _repr(o)
+
+ if not allow_nan:
+ raise ValueError(
+ "Out of range float values are not JSON compliant: " +
+ repr(o))
+
+ return text
+
+
+ if _one_shot and c_make_encoder is not None and not self.indent and not self.sort_keys:
+ _iterencode = c_make_encoder(
+ markers, self.default, _encoder, self.indent,
+ self.key_separator, self.item_separator, self.sort_keys,
+ self.skipkeys, self.allow_nan)
+ else:
+ _iterencode = _make_iterencode(
+ markers, self.default, _encoder, self.indent, floatstr,
+ self.key_separator, self.item_separator, self.sort_keys,
+ self.skipkeys, _one_shot)
+ return _iterencode(o, 0)
+
+def _make_iterencode(markers, _default, _encoder, _indent, _floatstr, _key_separator, _item_separator, _sort_keys, _skipkeys, _one_shot,
+ ## HACK: hand-optimized bytecode; turn globals into locals
+ False=False,
+ True=True,
+ ValueError=ValueError,
+ basestring=basestring,
+ dict=dict,
+ float=float,
+ id=id,
+ int=int,
+ isinstance=isinstance,
+ list=list,
+ long=long,
+ str=str,
+ tuple=tuple,
+ ):
+
+ def _iterencode_list(lst, _current_indent_level):
+ if not lst:
+ yield '[]'
+ return
+ if markers is not None:
+ markerid = id(lst)
+ if markerid in markers:
+ raise ValueError("Circular reference detected")
+ markers[markerid] = lst
+ buf = '['
+ if _indent is not None:
+ _current_indent_level += 1
+ newline_indent = '\n' + (' ' * (_indent * _current_indent_level))
+ separator = _item_separator + newline_indent
+ buf += newline_indent
+ else:
+ newline_indent = None
+ separator = _item_separator
+ first = True
+ for value in lst:
+ if first:
+ first = False
+ else:
+ buf = separator
+ if isinstance(value, basestring):
+ yield buf + _encoder(value)
+ elif value is None:
+ yield buf + 'null'
+ elif value is True:
+ yield buf + 'true'
+ elif value is False:
+ yield buf + 'false'
+ elif isinstance(value, (int, long)):
+ yield buf + str(value)
+ elif isinstance(value, float):
+ yield buf + _floatstr(value)
+ else:
+ yield buf
+ if isinstance(value, (list, tuple)):
+ chunks = _iterencode_list(value, _current_indent_level)
+ elif isinstance(value, dict):
+ chunks = _iterencode_dict(value, _current_indent_level)
+ else:
+ chunks = _iterencode(value, _current_indent_level)
+ for chunk in chunks:
+ yield chunk
+ if newline_indent is not None:
+ _current_indent_level -= 1
+ yield '\n' + (' ' * (_indent * _current_indent_level))
+ yield ']'
+ if markers is not None:
+ del markers[markerid]
+
+ def _iterencode_dict(dct, _current_indent_level):
+ if not dct:
+ yield '{}'
+ return
+ if markers is not None:
+ markerid = id(dct)
+ if markerid in markers:
+ raise ValueError("Circular reference detected")
+ markers[markerid] = dct
+ yield '{'
+ if _indent is not None:
+ _current_indent_level += 1
+ newline_indent = '\n' + (' ' * (_indent * _current_indent_level))
+ item_separator = _item_separator + newline_indent
+ yield newline_indent
+ else:
+ newline_indent = None
+ item_separator = _item_separator
+ first = True
+ if _sort_keys:
+ items = dct.items()
+ items.sort(key=lambda kv: kv[0])
+ else:
+ items = dct.iteritems()
+ for key, value in items:
+ if isinstance(key, basestring):
+ pass
+ # JavaScript is weakly typed for these, so it makes sense to
+ # also allow them. Many encoders seem to do something like this.
+ elif isinstance(key, float):
+ key = _floatstr(key)
+ elif key is True:
+ key = 'true'
+ elif key is False:
+ key = 'false'
+ elif key is None:
+ key = 'null'
+ elif isinstance(key, (int, long)):
+ key = str(key)
+ elif _skipkeys:
+ continue
+ else:
+ raise TypeError("key " + repr(key) + " is not a string")
+ if first:
+ first = False
+ else:
+ yield item_separator
+ yield _encoder(key)
+ yield _key_separator
+ if isinstance(value, basestring):
+ yield _encoder(value)
+ elif value is None:
+ yield 'null'
+ elif value is True:
+ yield 'true'
+ elif value is False:
+ yield 'false'
+ elif isinstance(value, (int, long)):
+ yield str(value)
+ elif isinstance(value, float):
+ yield _floatstr(value)
+ else:
+ if isinstance(value, (list, tuple)):
+ chunks = _iterencode_list(value, _current_indent_level)
+ elif isinstance(value, dict):
+ chunks = _iterencode_dict(value, _current_indent_level)
+ else:
+ chunks = _iterencode(value, _current_indent_level)
+ for chunk in chunks:
+ yield chunk
+ if newline_indent is not None:
+ _current_indent_level -= 1
+ yield '\n' + (' ' * (_indent * _current_indent_level))
+ yield '}'
+ if markers is not None:
+ del markers[markerid]
+
+ def _iterencode(o, _current_indent_level):
+ if isinstance(o, basestring):
+ yield _encoder(o)
+ elif o is None:
+ yield 'null'
+ elif o is True:
+ yield 'true'
+ elif o is False:
+ yield 'false'
+ elif isinstance(o, (int, long)):
+ yield str(o)
+ elif isinstance(o, float):
+ yield _floatstr(o)
+ elif isinstance(o, (list, tuple)):
+ for chunk in _iterencode_list(o, _current_indent_level):
+ yield chunk
+ elif isinstance(o, dict):
+ for chunk in _iterencode_dict(o, _current_indent_level):
+ yield chunk
+ else:
+ if markers is not None:
+ markerid = id(o)
+ if markerid in markers:
+ raise ValueError("Circular reference detected")
+ markers[markerid] = o
+ o = _default(o)
+ for chunk in _iterencode(o, _current_indent_level):
+ yield chunk
+ if markers is not None:
+ del markers[markerid]
+
+ return _iterencode
diff --git a/test/simplejson/scanner.py b/test/simplejson/scanner.py
new file mode 100644
index 0000000000..adbc6ec979
--- /dev/null
+++ b/test/simplejson/scanner.py
@@ -0,0 +1,65 @@
+"""JSON token scanner
+"""
+import re
+try:
+ from simplejson._speedups import make_scanner as c_make_scanner
+except ImportError:
+ c_make_scanner = None
+
+__all__ = ['make_scanner']
+
+NUMBER_RE = re.compile(
+ r'(-?(?:0|[1-9]\d*))(\.\d+)?([eE][-+]?\d+)?',
+ (re.VERBOSE | re.MULTILINE | re.DOTALL))
+
+def py_make_scanner(context):
+ parse_object = context.parse_object
+ parse_array = context.parse_array
+ parse_string = context.parse_string
+ match_number = NUMBER_RE.match
+ encoding = context.encoding
+ strict = context.strict
+ parse_float = context.parse_float
+ parse_int = context.parse_int
+ parse_constant = context.parse_constant
+ object_hook = context.object_hook
+
+ def _scan_once(string, idx):
+ try:
+ nextchar = string[idx]
+ except IndexError:
+ raise StopIteration
+
+ if nextchar == '"':
+ return parse_string(string, idx + 1, encoding, strict)
+ elif nextchar == '{':
+ return parse_object((string, idx + 1), encoding, strict, _scan_once, object_hook)
+ elif nextchar == '[':
+ return parse_array((string, idx + 1), _scan_once)
+ elif nextchar == 'n' and string[idx:idx + 4] == 'null':
+ return None, idx + 4
+ elif nextchar == 't' and string[idx:idx + 4] == 'true':
+ return True, idx + 4
+ elif nextchar == 'f' and string[idx:idx + 5] == 'false':
+ return False, idx + 5
+
+ m = match_number(string, idx)
+ if m is not None:
+ integer, frac, exp = m.groups()
+ if frac or exp:
+ res = parse_float(integer + (frac or '') + (exp or ''))
+ else:
+ res = parse_int(integer)
+ return res, m.end()
+ elif nextchar == 'N' and string[idx:idx + 3] == 'NaN':
+ return parse_constant('NaN'), idx + 3
+ elif nextchar == 'I' and string[idx:idx + 8] == 'Infinity':
+ return parse_constant('Infinity'), idx + 8
+ elif nextchar == '-' and string[idx:idx + 9] == '-Infinity':
+ return parse_constant('-Infinity'), idx + 9
+ else:
+ raise StopIteration
+
+ return _scan_once
+
+make_scanner = c_make_scanner or py_make_scanner
diff --git a/test/simplejson/tool.py b/test/simplejson/tool.py
new file mode 100644
index 0000000000..90443317b2
--- /dev/null
+++ b/test/simplejson/tool.py
@@ -0,0 +1,37 @@
+r"""Command-line tool to validate and pretty-print JSON
+
+Usage::
+
+ $ echo '{"json":"obj"}' | python -m simplejson.tool
+ {
+ "json": "obj"
+ }
+ $ echo '{ 1.2:3.4}' | python -m simplejson.tool
+ Expecting property name: line 1 column 2 (char 2)
+
+"""
+import sys
+import simplejson
+
+def main():
+ if len(sys.argv) == 1:
+ infile = sys.stdin
+ outfile = sys.stdout
+ elif len(sys.argv) == 2:
+ infile = open(sys.argv[1], 'rb')
+ outfile = sys.stdout
+ elif len(sys.argv) == 3:
+ infile = open(sys.argv[1], 'rb')
+ outfile = open(sys.argv[2], 'wb')
+ else:
+ raise SystemExit(sys.argv[0] + " [infile [outfile]]")
+ try:
+ obj = simplejson.load(infile)
+ except ValueError, e:
+ raise SystemExit(e)
+ simplejson.dump(obj, outfile, sort_keys=True, indent=4)
+ outfile.write('\n')
+
+
+if __name__ == '__main__':
+ main()
diff --git a/test/files/jvm/NestedAnnotations.java b/test/support/annotations/NestedAnnotations.java
index 8f2327dcce..c4a98a0af3 100644
--- a/test/files/jvm/NestedAnnotations.java
+++ b/test/support/annotations/NestedAnnotations.java
@@ -10,14 +10,14 @@ public class NestedAnnotations {
@OuterAnno(inner=@InnerAnno(name="inner"))
String field;
-
- @Target({FIELD})
+
+ @Target({FIELD})
@Retention(RUNTIME)
public static @interface InnerAnno {
String name();
}
-
- @Target({FIELD})
+
+ @Target({FIELD})
@Retention(RUNTIME)
public static @interface OuterAnno {
InnerAnno inner();
diff --git a/test/files/jvm/OuterEnum.java b/test/support/annotations/OuterEnum.java
index 75d3f34223..75d3f34223 100644
--- a/test/files/jvm/OuterEnum.java
+++ b/test/support/annotations/OuterEnum.java
diff --git a/test/files/jvm/OuterTParams.java b/test/support/annotations/OuterTParams.java
index 1d3db49fcf..1d3db49fcf 100644
--- a/test/files/jvm/OuterTParams.java
+++ b/test/support/annotations/OuterTParams.java
diff --git a/test/files/jvm/SourceAnnotation.java b/test/support/annotations/SourceAnnotation.java
index 047751ddfe..047751ddfe 100644
--- a/test/files/jvm/SourceAnnotation.java
+++ b/test/support/annotations/SourceAnnotation.java
diff --git a/test/files/jvm/mkAnnotationsJar.sh b/test/support/annotations/mkAnnotationsJar.sh
index 3d69351165..3d69351165 100755
--- a/test/files/jvm/mkAnnotationsJar.sh
+++ b/test/support/annotations/mkAnnotationsJar.sh