diff --git a/README.md b/README.md index 07259df..b421538 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ![alt text](kotlin-algorithm-club.png "Logo Title Text 1") -[![Kotlin](https://img.shields.io/badge/kotlin-1.2.41-blue.svg)](http://kotlinlang.org) +[![Kotlin](https://img.shields.io/badge/kotlin-1.8.20-blue.svg)](http://kotlinlang.org) [![License](https://img.shields.io/github/license/bmaslakov/kotlin-algorithm-club.svg)](LICENSE) [![codebeat badge](https://codebeat.co/badges/9a90c6ce-eb29-4cd3-9e92-ed64181784dc)](https://codebeat.co/projects/github-com-bmaslakov-kotlin-algorithm-club-master) diff --git a/build.gradle b/build.gradle deleted file mode 100644 index 379ab27..0000000 --- a/build.gradle +++ /dev/null @@ -1,39 +0,0 @@ -apply plugin: 'idea' -apply plugin: 'java' -apply plugin: 'kotlin' -apply plugin: 'jacoco' - -buildscript { - ext.kotlin_version = '1.3.21' - - repositories { - mavenCentral() - } - - dependencies { - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - -jacocoTestReport { - reports { - xml.enabled true - html.enabled false - } -} - -test.finalizedBy jacocoTestReport - -sourceSets { - main.kotlin.srcDirs += 'src/main' - test.kotlin.srcDirs += 'src/test' -} - -repositories { - mavenCentral() -} - -dependencies { - testCompile 'junit:junit:4.12' - compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" -} diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 0000000..af8e9b2 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,59 @@ +plugins { + kotlin("jvm") version "1.8.20" + jacoco + idea + java +} + +repositories { + mavenCentral() +} + + +buildscript { + + repositories { + mavenCentral() + } + + dependencies { + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.20") + } +} + +kotlin { + jvmToolchain(11) + sourceSets { + main { + kotlin.setSrcDirs(listOf("src/main")) + } + test { + kotlin.setSrcDirs(listOf("src/test")) + } + } +} + + + + +dependencies { + implementation(kotlin(("stdlib"))) + testImplementation(kotlin("test-junit5")) + testCompileOnly(kotlin("test")) + testCompileOnly(kotlin("test-annotations-common")) + testCompileOnly("org.junit.jupiter:junit-jupiter-api:5.9.2") + testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.9.2") +} + +tasks.jacocoTestReport { + dependsOn(tasks.test) // tests are required to run before generating the report + reports { + xml.required.set(true) + html.required.set(false) + } +} + +tasks.test { + useJUnitPlatform() + finalizedBy(tasks.jacocoTestReport) // report is always generated after tests run +} \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index cc4fdc2..943f0cb 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 9492014..5083229 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.1-bin.zip +networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 2fe81a7..65dcd68 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ -#!/usr/bin/env sh +#!/bin/sh # -# Copyright 2015 the original author or authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,78 +17,113 @@ # ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # Attempt to set APP_HOME + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -97,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + JAVACMD=java which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the @@ -105,79 +140,105 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac fi -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. # For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) fi - i=`expr $i + 1` + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index 24467a1..93e3f59 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,100 +1,92 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 0000000..c17515c --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,4 @@ +// see https://gradlehero.com/update-to-gradle-8/ +plugins { + id("org.gradle.toolchains.foojay-resolver-convention") version("0.4.0") +} \ No newline at end of file diff --git a/src/main/io/uuddlrlrba/ktalgs/datastructures/tree/Tree.kt b/src/main/io/uuddlrlrba/ktalgs/datastructures/tree/Tree.kt index 8cc2a9f..097f037 100644 --- a/src/main/io/uuddlrlrba/ktalgs/datastructures/tree/Tree.kt +++ b/src/main/io/uuddlrlrba/ktalgs/datastructures/tree/Tree.kt @@ -30,7 +30,7 @@ class Tree(var value: Int) { } fun height(): Int { - return 1 + (children.map { it.size() }.max() ?: 0) + return 1 + (children.map { it.size() }.maxOrNull() ?: 0) } fun add(value: Int) { diff --git a/src/main/io/uuddlrlrba/ktalgs/geometry/Voronoi.kt b/src/main/io/uuddlrlrba/ktalgs/geometry/Voronoi.kt index 56a3158..14d615e 100644 --- a/src/main/io/uuddlrlrba/ktalgs/geometry/Voronoi.kt +++ b/src/main/io/uuddlrlrba/ktalgs/geometry/Voronoi.kt @@ -31,7 +31,7 @@ class Voronoi(private val points: Collection, private val distanceFunc: ( get() = points.size fun region(p: Point): Point { - return points.minBy { distanceFunc(p, it) }!! + return points.minByOrNull { distanceFunc(p, it) }!! } init { diff --git a/src/main/io/uuddlrlrba/ktalgs/geometry/convexhull/Quickhull.kt b/src/main/io/uuddlrlrba/ktalgs/geometry/convexhull/Quickhull.kt index f4332e3..0cf196e 100644 --- a/src/main/io/uuddlrlrba/ktalgs/geometry/convexhull/Quickhull.kt +++ b/src/main/io/uuddlrlrba/ktalgs/geometry/convexhull/Quickhull.kt @@ -27,8 +27,8 @@ import io.uuddlrlrba.ktalgs.geometry.Point class Quickhull: ConvexHullAlgorithm { override fun convexHull(points: Array): Collection { if (points.size < 3) throw IllegalArgumentException("there must be at least 3 points") - val left = points.min()!! - val right = points.max()!! + val left = points.minOrNull()!! + val right = points.maxOrNull()!! return quickHull(points.asList(), left, right) + quickHull(points.asList(), right, left) } @@ -39,7 +39,7 @@ class Quickhull: ConvexHullAlgorithm { if (pointsLeftOfLine.isEmpty()) { return listOf(second) } else { - val max = pointsLeftOfLine.maxBy { it.second }!!.first + val max = pointsLeftOfLine.maxByOrNull { it.second }!!.first val newPoints = pointsLeftOfLine.map { it.first } return quickHull(newPoints, first, max) + quickHull(newPoints, max, second) } diff --git a/src/test/io/uuddlrlrba/ktalgs/datastructures/DequeueTest.kt b/src/test/io/uuddlrlrba/ktalgs/datastructures/DequeueTest.kt index c716115..15400a9 100644 --- a/src/test/io/uuddlrlrba/ktalgs/datastructures/DequeueTest.kt +++ b/src/test/io/uuddlrlrba/ktalgs/datastructures/DequeueTest.kt @@ -22,22 +22,26 @@ package io.uuddlrlrba.ktalgs.datastructures -import org.junit.Assert -import org.junit.Test -import java.util.* +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertFailsWith +import kotlin.test.assertFalse +import kotlin.test.assertTrue class DequeueTest { @Test fun emptyTest() { val dequeue = Dequeue() - Assert.assertEquals(0, dequeue.size) - Assert.assertTrue(dequeue.isEmpty()) + assertEquals(0, dequeue.size) + assertTrue(dequeue.isEmpty()) } - @Test(expected= NoSuchElementException::class) + @Test fun exceptionTest() { - val dequeue = Dequeue() - dequeue.peekFirst() + assertFailsWith { + val dequeue = Dequeue() + dequeue.peekFirst() + } } @Test @@ -47,12 +51,12 @@ class DequeueTest { dequeue.add(i) } for (i in 0..5) { - Assert.assertEquals(i, dequeue.peekFirst()) - Assert.assertEquals(i, dequeue.pollFirst()) + assertEquals(i, dequeue.peekFirst()) + assertEquals(i, dequeue.pollFirst()) } for (i in 10..6) { - Assert.assertEquals(i, dequeue.peekLast()) - Assert.assertEquals(i, dequeue.pollLast()) + assertEquals(i, dequeue.peekLast()) + assertEquals(i, dequeue.pollLast()) } } @@ -65,7 +69,7 @@ class DequeueTest { var k = 0 for (i in dequeue) { - Assert.assertEquals(i, k++) + assertEquals(i, k++) } } @@ -77,11 +81,11 @@ class DequeueTest { } for (i in 0..10) { - Assert.assertTrue(dequeue.contains(i)) + assertTrue(dequeue.contains(i)) } - Assert.assertFalse(dequeue.contains(100)) - Assert.assertFalse(dequeue.contains(101)) - Assert.assertFalse(dequeue.contains(103)) + assertFalse(dequeue.contains(100)) + assertFalse(dequeue.contains(101)) + assertFalse(dequeue.contains(103)) } } \ No newline at end of file diff --git a/src/test/io/uuddlrlrba/ktalgs/datastructures/DisjointSetTest.kt b/src/test/io/uuddlrlrba/ktalgs/datastructures/DisjointSetTest.kt index 7df9a8e..2efafb7 100644 --- a/src/test/io/uuddlrlrba/ktalgs/datastructures/DisjointSetTest.kt +++ b/src/test/io/uuddlrlrba/ktalgs/datastructures/DisjointSetTest.kt @@ -22,38 +22,40 @@ package io.uuddlrlrba.ktalgs.datastructures -import org.junit.Assert -import org.junit.Test +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertFalse +import kotlin.test.assertTrue class DisjointSetTest { @Test fun sizeTest() { val set = DisjointSet(10) - Assert.assertEquals(10, set.count) - Assert.assertEquals(10, set.size) + assertEquals(10, set.count) + assertEquals(10, set.size) set.union(0, 1) - Assert.assertEquals(9, set.count) - Assert.assertEquals(10, set.size) + assertEquals(9, set.count) + assertEquals(10, set.size) set.union(0, 2) - Assert.assertEquals(8, set.count) - Assert.assertEquals(10, set.size) + assertEquals(8, set.count) + assertEquals(10, set.size) } @Test fun naiveTest() { val set = DisjointSet(10) for (i in 1..set.size-1) { - Assert.assertFalse(set.connected(i, i - 1)) + assertFalse(set.connected(i, i - 1)) } set.union(1, 2) - Assert.assertTrue(set.connected(1, 2)) + assertTrue(set.connected(1, 2)) set.union(1, 3) - Assert.assertTrue(set.connected(1, 3)) - Assert.assertTrue(set.connected(2, 3)) + assertTrue(set.connected(1, 3)) + assertTrue(set.connected(2, 3)) set.union(3, 4) - Assert.assertTrue(set.connected(2, 4)) - Assert.assertFalse(set.connected(0, 1)) - Assert.assertFalse(set.connected(0, 5)) - Assert.assertFalse(set.connected(4, 5)) + assertTrue(set.connected(2, 4)) + assertFalse(set.connected(0, 1)) + assertFalse(set.connected(0, 5)) + assertFalse(set.connected(4, 5)) } } \ No newline at end of file diff --git a/src/test/io/uuddlrlrba/ktalgs/datastructures/ImmutableSetTest.kt b/src/test/io/uuddlrlrba/ktalgs/datastructures/ImmutableSetTest.kt index ae2b538..eeba19c 100644 --- a/src/test/io/uuddlrlrba/ktalgs/datastructures/ImmutableSetTest.kt +++ b/src/test/io/uuddlrlrba/ktalgs/datastructures/ImmutableSetTest.kt @@ -22,42 +22,44 @@ package io.uuddlrlrba.ktalgs.datastructures -import org.junit.Assert -import org.junit.Test +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertFalse +import kotlin.test.assertTrue class ImmutableSetTest { @Test fun test1() { - Assert.assertFalse(immutableSetOf(3).contains(1)) - Assert.assertFalse(immutableSetOf(3).contains(2)) - Assert.assertFalse(immutableSetOf(3).contains(4)) - Assert.assertFalse(immutableSetOf(3).contains(5)) - Assert.assertTrue(immutableSetOf(3).contains(3)) + assertFalse(immutableSetOf(3).contains(1)) + assertFalse(immutableSetOf(3).contains(2)) + assertFalse(immutableSetOf(3).contains(4)) + assertFalse(immutableSetOf(3).contains(5)) + assertTrue(immutableSetOf(3).contains(3)) } @Test fun test2() { val set = immutableSetOf(*(10 downTo 1).toList().toTypedArray()) for (v in set) { - Assert.assertTrue(set.contains(v)) + assertTrue(set.contains(v)) } - Assert.assertEquals(10, set.size) - Assert.assertFalse(set.isEmpty()) - Assert.assertFalse(set.contains(42)) - Assert.assertFalse(set.contains(-42)) + assertEquals(10, set.size) + assertFalse(set.isEmpty()) + assertFalse(set.contains(42)) + assertFalse(set.contains(-42)) } @Test fun test3() { val set = immutableSetOf(*(0..100).toList().toTypedArray()) for (v in -100..-1) { - Assert.assertFalse(set.contains(v)) + assertFalse(set.contains(v)) } for (v in 0..100) { - Assert.assertTrue(set.contains(v)) + assertTrue(set.contains(v)) } for (v in 101..200) { - Assert.assertFalse(set.contains(v)) + assertFalse(set.contains(v)) } } } diff --git a/src/test/io/uuddlrlrba/ktalgs/datastructures/IndexedPriorityQueueTest.kt b/src/test/io/uuddlrlrba/ktalgs/datastructures/IndexedPriorityQueueTest.kt index 3d69d58..ede4266 100644 --- a/src/test/io/uuddlrlrba/ktalgs/datastructures/IndexedPriorityQueueTest.kt +++ b/src/test/io/uuddlrlrba/ktalgs/datastructures/IndexedPriorityQueueTest.kt @@ -22,22 +22,25 @@ package io.uuddlrlrba.ktalgs.datastructures -import org.junit.Assert -import org.junit.Test -import java.util.NoSuchElementException +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertFailsWith +import kotlin.test.assertTrue class IndexedPriorityQueueTest { @Test fun emptyTest() { val pq = IndexedPriorityQueue(3) - Assert.assertEquals(0, pq.size) - Assert.assertTrue(pq.isEmpty()) + assertEquals(0, pq.size) + assertTrue(pq.isEmpty()) } - @Test(expected= NoSuchElementException::class) + @Test fun exceptionTest() { - val pq = IndexedPriorityQueue(3) - pq.peek() + assertFailsWith { + val pq = IndexedPriorityQueue(3) + pq.peek() + } } @Test @@ -45,10 +48,10 @@ class IndexedPriorityQueueTest { val pq = IndexedPriorityQueue(20) for (i in 10 downTo 1) { pq.insert(20 - i, i) - Assert.assertEquals(Pair(20 - i, i), pq.peek()) + assertEquals(Pair(20 - i, i), pq.peek()) } for (i in 1..10) { - Assert.assertEquals(Pair(20 - i, i), pq.poll()) + assertEquals(Pair(20 - i, i), pq.poll()) } } } diff --git a/src/test/io/uuddlrlrba/ktalgs/datastructures/PriorityQueueTest.kt b/src/test/io/uuddlrlrba/ktalgs/datastructures/PriorityQueueTest.kt index 772fb67..1c7d473 100644 --- a/src/test/io/uuddlrlrba/ktalgs/datastructures/PriorityQueueTest.kt +++ b/src/test/io/uuddlrlrba/ktalgs/datastructures/PriorityQueueTest.kt @@ -22,22 +22,25 @@ package io.uuddlrlrba.ktalgs.datastructures -import org.junit.Assert -import org.junit.Test -import java.util.NoSuchElementException +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertFailsWith +import kotlin.test.assertTrue class PriorityQueueTest { @Test fun emptyTest() { val pq = PriorityQueue(3) - Assert.assertEquals(0, pq.size) - Assert.assertTrue(pq.isEmpty()) + assertEquals(0, pq.size) + assertTrue(pq.isEmpty()) } - @Test(expected= NoSuchElementException::class) + @Test fun exceptionTest() { - val pq = PriorityQueue(3) - pq.peek() + assertFailsWith { + val pq = PriorityQueue(3) + pq.peek() + } } @Test @@ -45,10 +48,10 @@ class PriorityQueueTest { val pq = PriorityQueue(3) for (i in 10 downTo 1) { pq.add(i) - Assert.assertEquals(i, pq.peek()) + assertEquals(i, pq.peek()) } for (i in 1..10) { - Assert.assertEquals(i, pq.poll()) + assertEquals(i, pq.poll()) } } } diff --git a/src/test/io/uuddlrlrba/ktalgs/datastructures/QueueTest.kt b/src/test/io/uuddlrlrba/ktalgs/datastructures/QueueTest.kt index 7bd33a9..7f404f1 100644 --- a/src/test/io/uuddlrlrba/ktalgs/datastructures/QueueTest.kt +++ b/src/test/io/uuddlrlrba/ktalgs/datastructures/QueueTest.kt @@ -22,22 +22,26 @@ package io.uuddlrlrba.ktalgs.datastructures -import org.junit.Assert -import org.junit.Test -import java.util.* +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertFailsWith +import kotlin.test.assertFalse +import kotlin.test.assertTrue class QueueTest { @Test fun emptyTest() { val queue = Queue() - Assert.assertEquals(0, queue.size) - Assert.assertTrue(queue.isEmpty()) + assertEquals(0, queue.size) + assertTrue(queue.isEmpty()) } - @Test(expected= NoSuchElementException::class) + @Test fun exceptionTest() { - val queue = Queue() - queue.peek() + assertFailsWith { + val queue = Queue() + queue.peek() + } } @Test @@ -47,10 +51,10 @@ class QueueTest { queue.add(i) } for (i in 0..10) { - Assert.assertEquals(i, queue.peek()) - Assert.assertEquals(i, queue.poll()) + assertEquals(i, queue.peek()) + assertEquals(i, queue.poll()) } - Assert.assertEquals(0, queue.size) + assertEquals(0, queue.size) } @Test @@ -62,7 +66,7 @@ class QueueTest { var k = 0 for (i in queue) { - Assert.assertEquals(i, k++) + assertEquals(i, k++) } } @@ -74,11 +78,11 @@ class QueueTest { } for (i in 0..10) { - Assert.assertTrue(queue.contains(i)) + assertTrue(queue.contains(i)) } - Assert.assertFalse(queue.contains(100)) - Assert.assertFalse(queue.contains(101)) - Assert.assertFalse(queue.contains(103)) + assertFalse(queue.contains(100)) + assertFalse(queue.contains(101)) + assertFalse(queue.contains(103)) } } diff --git a/src/test/io/uuddlrlrba/ktalgs/datastructures/StackTest.kt b/src/test/io/uuddlrlrba/ktalgs/datastructures/StackTest.kt index 80c0654..8c038ed 100644 --- a/src/test/io/uuddlrlrba/ktalgs/datastructures/StackTest.kt +++ b/src/test/io/uuddlrlrba/ktalgs/datastructures/StackTest.kt @@ -22,22 +22,26 @@ package io.uuddlrlrba.ktalgs.datastructures -import org.junit.Assert -import org.junit.Test -import java.util.* +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertFailsWith +import kotlin.test.assertFalse +import kotlin.test.assertTrue class StackTest { @Test fun emptyTest() { val stack = Stack() - Assert.assertEquals(0, stack.size) - Assert.assertTrue(stack.isEmpty()) + assertEquals(0, stack.size) + assertTrue(stack.isEmpty()) } - @Test(expected=NoSuchElementException::class) + @Test fun exceptionTest() { - val stack = Stack() - stack.peek() + assertFailsWith { + val stack = Stack() + stack.peek() + } } @Test @@ -47,10 +51,10 @@ class StackTest { stack.push(i) } for (i in 10 downTo 0) { - Assert.assertEquals(i, stack.peek()) - Assert.assertEquals(i, stack.poll()) + assertEquals(i, stack.peek()) + assertEquals(i, stack.poll()) } - Assert.assertEquals(0, stack.size) + assertEquals(0, stack.size) } @Test @@ -62,7 +66,7 @@ class StackTest { var k = 10 for (i in stack) { - Assert.assertEquals(i, k--) + assertEquals(i, k--) } } @@ -74,11 +78,11 @@ class StackTest { } for (i in 0..10) { - Assert.assertTrue(stack.contains(i)) + assertTrue(stack.contains(i)) } - Assert.assertFalse(stack.contains(100)) - Assert.assertFalse(stack.contains(101)) - Assert.assertFalse(stack.contains(103)) + assertFalse(stack.contains(100)) + assertFalse(stack.contains(101)) + assertFalse(stack.contains(103)) } } diff --git a/src/test/io/uuddlrlrba/ktalgs/datastructures/tree/BinarySearchTreeTest.kt b/src/test/io/uuddlrlrba/ktalgs/datastructures/tree/BinarySearchTreeTest.kt index cfb3785..0d57920 100644 --- a/src/test/io/uuddlrlrba/ktalgs/datastructures/tree/BinarySearchTreeTest.kt +++ b/src/test/io/uuddlrlrba/ktalgs/datastructures/tree/BinarySearchTreeTest.kt @@ -22,29 +22,33 @@ package io.uuddlrlrba.ktalgs.datastructures.tree -import org.junit.Assert -import org.junit.Test +import kotlin.test.Test +import kotlin.test.assertContentEquals +import kotlin.test.assertEquals +import kotlin.test.assertFailsWith +import kotlin.test.assertFalse +import kotlin.test.assertTrue class BinarySearchTreeTest { @Test fun empty() { val tree = BinarySearchTree() - Assert.assertEquals(0, tree.size) - Assert.assertTrue(tree.isEmpty()) + assertEquals(0, tree.size) + assertTrue(tree.isEmpty()) } @Test fun sizeOfOne() { val tree = BinarySearchTree() tree.add(1, "1") - Assert.assertFalse(tree.isEmpty()) - Assert.assertEquals(1, tree.size) - Assert.assertEquals(1, tree.height()) - Assert.assertEquals(1, tree.min()) - Assert.assertEquals(1, tree.max()) - Assert.assertEquals("1", tree[1]) + assertFalse(tree.isEmpty()) + assertEquals(1, tree.size) + assertEquals(1, tree.height()) + assertEquals(1, tree.min()) + assertEquals(1, tree.max()) + assertEquals("1", tree[1]) tree.pollMin() - Assert.assertTrue(tree.isEmpty()) + assertTrue(tree.isEmpty()) } @Test @@ -53,124 +57,128 @@ class BinarySearchTreeTest { tree.add(1, "1") tree.add(2, "2") tree.add(3, "3") - Assert.assertFalse(tree.isEmpty()) - Assert.assertEquals(3, tree.size) - Assert.assertEquals(3, tree.height()) - Assert.assertEquals(1, tree.min()) - Assert.assertEquals(3, tree.max()) - Assert.assertEquals("1", tree[1]) - Assert.assertEquals("2", tree[2]) - Assert.assertEquals("3", tree[3]) + assertFalse(tree.isEmpty()) + assertEquals(3, tree.size) + assertEquals(3, tree.height()) + assertEquals(1, tree.min()) + assertEquals(3, tree.max()) + assertEquals("1", tree[1]) + assertEquals("2", tree[2]) + assertEquals("3", tree[3]) tree.pollMin() - Assert.assertEquals(2, tree.min()) - Assert.assertEquals(3, tree.max()) - Assert.assertEquals("2", tree[2]) - Assert.assertEquals("3", tree[3]) + assertEquals(2, tree.min()) + assertEquals(3, tree.max()) + assertEquals("2", tree[2]) + assertEquals("3", tree[3]) tree.pollMax() - Assert.assertEquals(2, tree.min()) - Assert.assertEquals(2, tree.max()) - Assert.assertEquals("2", tree[2]) + assertEquals(2, tree.min()) + assertEquals(2, tree.max()) + assertEquals("2", tree[2]) } @Test fun overwrite() { val tree = BinarySearchTree() tree.add(1, "1") - Assert.assertFalse(tree.isEmpty()) - Assert.assertEquals(1, tree.size) - Assert.assertEquals(1, tree.height()) - Assert.assertEquals("1", tree[1]) + assertFalse(tree.isEmpty()) + assertEquals(1, tree.size) + assertEquals(1, tree.height()) + assertEquals("1", tree[1]) tree.add(1, "2") - Assert.assertFalse(tree.isEmpty()) - Assert.assertEquals(1, tree.size) - Assert.assertEquals(1, tree.height()) - Assert.assertEquals(1, tree.min()) - Assert.assertEquals(1, tree.max()) - Assert.assertEquals("2", tree[1]) + assertFalse(tree.isEmpty()) + assertEquals(1, tree.size) + assertEquals(1, tree.height()) + assertEquals(1, tree.min()) + assertEquals(1, tree.max()) + assertEquals("2", tree[1]) tree.pollMin() - Assert.assertTrue(tree.isEmpty()) + assertTrue(tree.isEmpty()) } @Test fun letters() { val tree = BinarySearchTree() - val letters = arrayOf('j', 'p', 'q', 's', 'f', 'o', 'g', 'v', 'h', 'm', 'x', 'z', - 'l', 'n', 'd', 'c', 'a', 'r', 'b', 't', 'i', 'u', 'w', 'k', 'y', 'e') + val letters = arrayOf( + 'j', 'p', 'q', 's', 'f', 'o', 'g', 'v', 'h', 'm', 'x', 'z', + 'l', 'n', 'd', 'c', 'a', 'r', 'b', 't', 'i', 'u', 'w', 'k', 'y', 'e' + ) letters.forEach { tree.add(it, it.toString()) } - Assert.assertEquals(letters.toSet(), tree.keys) - Assert.assertArrayEquals(letters.map { it.toString() }.sorted().toTypedArray(), - tree.values.sorted().toTypedArray()) + assertEquals(letters.toSet(), tree.keys) + assertContentEquals( + letters.map { it.toString() }.sorted().toTypedArray(), + tree.values.sorted().toTypedArray() + ) - Assert.assertEquals(26, tree.size) - Assert.assertEquals('a', tree.min()) - Assert.assertEquals('z', tree.max()) + assertEquals(26, tree.size) + assertEquals('a', tree.min()) + assertEquals('z', tree.max()) tree.pollMin() - Assert.assertEquals(25, tree.size) - Assert.assertEquals('b', tree.min()) - Assert.assertEquals('z', tree.max()) + assertEquals(25, tree.size) + assertEquals('b', tree.min()) + assertEquals('z', tree.max()) tree.pollMax() - Assert.assertEquals(24, tree.size) - Assert.assertEquals('b', tree.min()) - Assert.assertEquals('y', tree.max()) + assertEquals(24, tree.size) + assertEquals('b', tree.min()) + assertEquals('y', tree.max()) tree.pollMin() - Assert.assertEquals(23, tree.size) - Assert.assertEquals('c', tree.min()) - Assert.assertEquals('y', tree.max()) + assertEquals(23, tree.size) + assertEquals('c', tree.min()) + assertEquals('y', tree.max()) tree.pollMax() - Assert.assertEquals(22, tree.size) - Assert.assertEquals('c', tree.min()) - Assert.assertEquals('x', tree.max()) + assertEquals(22, tree.size) + assertEquals('c', tree.min()) + assertEquals('x', tree.max()) tree.pollMin() - Assert.assertEquals(21, tree.size) - Assert.assertEquals('d', tree.min()) - Assert.assertEquals('x', tree.max()) + assertEquals(21, tree.size) + assertEquals('d', tree.min()) + assertEquals('x', tree.max()) tree.pollMax() - Assert.assertEquals(20, tree.size) - Assert.assertEquals('d', tree.min()) - Assert.assertEquals('w', tree.max()) + assertEquals(20, tree.size) + assertEquals('d', tree.min()) + assertEquals('w', tree.max()) tree.pollMin() tree.pollMin() tree.pollMin() - Assert.assertEquals(17, tree.size) - Assert.assertEquals('g', tree.min()) - Assert.assertEquals('w', tree.max()) + assertEquals(17, tree.size) + assertEquals('g', tree.min()) + assertEquals('w', tree.max()) tree.pollMax() tree.pollMax() tree.pollMax() - Assert.assertEquals(14, tree.size) - Assert.assertEquals('g', tree.min()) - Assert.assertEquals('t', tree.max()) + assertEquals(14, tree.size) + assertEquals('g', tree.min()) + assertEquals('t', tree.max()) tree.pollMin() tree.pollMin() tree.pollMin() tree.pollMin() tree.pollMin() - Assert.assertEquals(9, tree.size) - Assert.assertEquals('l', tree.min()) - Assert.assertEquals('t', tree.max()) + assertEquals(9, tree.size) + assertEquals('l', tree.min()) + assertEquals('t', tree.max()) tree.pollMax() tree.pollMax() tree.pollMax() tree.pollMax() tree.pollMax() - Assert.assertEquals(4, tree.size) - Assert.assertEquals('l', tree.min()) - Assert.assertEquals('o', tree.max()) + assertEquals(4, tree.size) + assertEquals('l', tree.min()) + assertEquals('o', tree.max()) tree.pollMin() - Assert.assertEquals(3, tree.size) - Assert.assertEquals('m', tree.min()) - Assert.assertEquals('o', tree.max()) + assertEquals(3, tree.size) + assertEquals('m', tree.min()) + assertEquals('o', tree.max()) tree.pollMax() - Assert.assertEquals(2, tree.size) - Assert.assertEquals('m', tree.min()) - Assert.assertEquals('n', tree.max()) + assertEquals(2, tree.size) + assertEquals('m', tree.min()) + assertEquals('n', tree.max()) tree.pollMin() - Assert.assertEquals(1, tree.size) - Assert.assertEquals('n', tree.min()) - Assert.assertEquals('n', tree.max()) + assertEquals(1, tree.size) + assertEquals('n', tree.min()) + assertEquals('n', tree.max()) tree.pollMin() - Assert.assertTrue(tree.isEmpty()) + assertTrue(tree.isEmpty()) } @Test @@ -181,78 +189,78 @@ class BinarySearchTreeTest { } for (i in 0..30) { - Assert.assertEquals((i * i).toString(), tree[i]) + assertEquals((i * i).toString(), tree[i]) } var counter = 0 for ((key, value) in tree) { - Assert.assertEquals(counter, key) - Assert.assertEquals((counter * counter).toString(), value) + assertEquals(counter, key) + assertEquals((counter * counter).toString(), value) counter++ } tree.remove(15) tree.remove(0) tree.remove(30) - Assert.assertEquals(1, tree.min()) - Assert.assertEquals(29, tree.max()) + assertEquals(1, tree.min()) + assertEquals(29, tree.max()) tree.remove(14) tree.remove(16) tree.remove(1) tree.remove(29) - Assert.assertEquals(2, tree.min()) - Assert.assertEquals(28, tree.max()) + assertEquals(2, tree.min()) + assertEquals(28, tree.max()) tree.remove(13) tree.remove(17) tree.remove(2) tree.remove(28) - Assert.assertEquals(3, tree.min()) - Assert.assertEquals(27, tree.max()) + assertEquals(3, tree.min()) + assertEquals(27, tree.max()) tree.remove(12) tree.remove(18) tree.remove(3) tree.remove(27) - Assert.assertEquals(4, tree.min()) - Assert.assertEquals(26, tree.max()) + assertEquals(4, tree.min()) + assertEquals(26, tree.max()) tree.remove(11) tree.remove(19) tree.remove(4) tree.remove(26) - Assert.assertEquals(5, tree.min()) - Assert.assertEquals(25, tree.max()) - Assert.assertEquals(12, tree.size) + assertEquals(5, tree.min()) + assertEquals(25, tree.max()) + assertEquals(12, tree.size) - Assert.assertEquals("25", tree[5]) - Assert.assertEquals("36", tree[6]) - Assert.assertEquals("49", tree[7]) - Assert.assertEquals("64", tree[8]) - Assert.assertEquals("81", tree[9]) - Assert.assertEquals("100", tree[10]) - Assert.assertEquals("400", tree[20]) - Assert.assertEquals("441", tree[21]) - Assert.assertEquals("484", tree[22]) - Assert.assertEquals("529", tree[23]) - Assert.assertEquals("576", tree[24]) - Assert.assertEquals("625", tree[25]) + assertEquals("25", tree[5]) + assertEquals("36", tree[6]) + assertEquals("49", tree[7]) + assertEquals("64", tree[8]) + assertEquals("81", tree[9]) + assertEquals("100", tree[10]) + assertEquals("400", tree[20]) + assertEquals("441", tree[21]) + assertEquals("484", tree[22]) + assertEquals("529", tree[23]) + assertEquals("576", tree[24]) + assertEquals("625", tree[25]) } - @Test(expected= NoSuchElementException::class) + @Test fun emptyMinFails() { - BinarySearchTree().min() + assertFailsWith { BinarySearchTree().min() } } - @Test(expected= NoSuchElementException::class) + @Test fun emptyMaxFails() { - BinarySearchTree().max() + assertFailsWith { BinarySearchTree().max() } } - @Test(expected= NoSuchElementException::class) + @Test fun emptyPollMinFails() { - BinarySearchTree().pollMin() + assertFailsWith { BinarySearchTree().pollMin() } } - @Test(expected= NoSuchElementException::class) + @Test fun emptyPollMaxFails() { - BinarySearchTree().pollMax() + assertFailsWith { BinarySearchTree().pollMax() } } } diff --git a/src/test/io/uuddlrlrba/ktalgs/geometry/QuadTreeTest.kt b/src/test/io/uuddlrlrba/ktalgs/geometry/QuadTreeTest.kt index 27d8249..0a88476 100644 --- a/src/test/io/uuddlrlrba/ktalgs/geometry/QuadTreeTest.kt +++ b/src/test/io/uuddlrlrba/ktalgs/geometry/QuadTreeTest.kt @@ -22,8 +22,8 @@ package io.uuddlrlrba.ktalgs.geometry -import org.junit.Assert -import org.junit.Test +import kotlin.test.Test +import kotlin.test.assertEquals class QuadTreeTest { @Test @@ -37,15 +37,15 @@ class QuadTreeTest { ) val points1 = qt[Rect(4, 0, 51, 98)].sorted() - Assert.assertEquals(listOf("Bar", "Baz", "Bing", "Bong", "Foo"), points1) + assertEquals(listOf("Bar", "Baz", "Bing", "Bong", "Foo"), points1) val points2 = qt[Rect(5, 0, 50, 96)].sorted() - Assert.assertEquals(listOf("Bar", "Baz", "Bing", "Bong", "Foo"), points2) + assertEquals(listOf("Bar", "Baz", "Bing", "Bong", "Foo"), points2) val points3 = qt[Rect(55, 0, 50, 96)] - Assert.assertEquals(0, points3.count()) + assertEquals(0, points3.count()) val points4 = qt[Rect(4, 19, 6, 21)].sorted() - Assert.assertEquals(listOf("Foo"), points4) + assertEquals(listOf("Foo"), points4) } } diff --git a/src/test/io/uuddlrlrba/ktalgs/geometry/VoronoiTest.kt b/src/test/io/uuddlrlrba/ktalgs/geometry/VoronoiTest.kt index c1e3d42..be0c4b2 100644 --- a/src/test/io/uuddlrlrba/ktalgs/geometry/VoronoiTest.kt +++ b/src/test/io/uuddlrlrba/ktalgs/geometry/VoronoiTest.kt @@ -22,947 +22,948 @@ package io.uuddlrlrba.ktalgs.geometry -import org.junit.Assert -import org.junit.Test +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertFailsWith class VoronoiTest { - @Test(expected= IllegalArgumentException::class) + @Test fun testException() { - Voronoi(emptyList(), Point.EUCLIDEAN_DISTANCE_FUNC) + assertFailsWith { Voronoi(emptyList(), Point.EUCLIDEAN_DISTANCE_FUNC) } } @Test fun test1() { val v = Voronoi(listOf(Point(0, 0)), Point.EUCLIDEAN_DISTANCE_FUNC) - Assert.assertEquals(1, v.count) - Assert.assertEquals(Point(0, 0), v.region(Point(-100, -100))) - Assert.assertEquals(Point(0, 0), v.region(Point(-100, 100))) - Assert.assertEquals(Point(0, 0), v.region(Point(100, 100))) - Assert.assertEquals(Point(0, 0), v.region(Point(100, -100))) + assertEquals(1, v.count) + assertEquals(Point(0, 0), v.region(Point(-100, -100))) + assertEquals(Point(0, 0), v.region(Point(-100, 100))) + assertEquals(Point(0, 0), v.region(Point(100, 100))) + assertEquals(Point(0, 0), v.region(Point(100, -100))) } @Test fun test2() { val v = Voronoi( - listOf( - Point(41, 98), - Point(59, 97), - Point(87, 26), - Point(3, 33), - Point(18, 46), - Point(57, 81), - Point(65, 29), - Point(20, 32), - Point(73, 96), - Point(81, 90) - ), Point.EUCLIDEAN_DISTANCE_FUNC + listOf( + Point(41, 98), + Point(59, 97), + Point(87, 26), + Point(3, 33), + Point(18, 46), + Point(57, 81), + Point(65, 29), + Point(20, 32), + Point(73, 96), + Point(81, 90) + ), Point.EUCLIDEAN_DISTANCE_FUNC ) - Assert.assertEquals(10, v.count) - Assert.assertEquals(Point(3, 33), v.region(Point(0, 0))) - Assert.assertEquals(Point(3, 33), v.region(Point(0, 10))) - Assert.assertEquals(Point(3, 33), v.region(Point(0, 20))) - Assert.assertEquals(Point(3, 33), v.region(Point(0, 30))) - Assert.assertEquals(Point(3, 33), v.region(Point(0, 40))) - Assert.assertEquals(Point(3, 33), v.region(Point(0, 50))) - Assert.assertEquals(Point(18, 46), v.region(Point(0, 60))) - Assert.assertEquals(Point(18, 46), v.region(Point(0, 70))) - Assert.assertEquals(Point(18, 46), v.region(Point(0, 80))) - Assert.assertEquals(Point(41, 98), v.region(Point(0, 90))) - Assert.assertEquals(Point(20, 32), v.region(Point(10, 0))) - Assert.assertEquals(Point(3, 33), v.region(Point(10, 10))) - Assert.assertEquals(Point(3, 33), v.region(Point(10, 20))) - Assert.assertEquals(Point(3, 33), v.region(Point(10, 30))) - Assert.assertEquals(Point(3, 33), v.region(Point(10, 40))) - Assert.assertEquals(Point(18, 46), v.region(Point(10, 50))) - Assert.assertEquals(Point(18, 46), v.region(Point(10, 60))) - Assert.assertEquals(Point(18, 46), v.region(Point(10, 70))) - Assert.assertEquals(Point(18, 46), v.region(Point(10, 80))) - Assert.assertEquals(Point(41, 98), v.region(Point(10, 90))) - Assert.assertEquals(Point(20, 32), v.region(Point(20, 0))) - Assert.assertEquals(Point(20, 32), v.region(Point(20, 10))) - Assert.assertEquals(Point(20, 32), v.region(Point(20, 20))) - Assert.assertEquals(Point(20, 32), v.region(Point(20, 30))) - Assert.assertEquals(Point(18, 46), v.region(Point(20, 40))) - Assert.assertEquals(Point(18, 46), v.region(Point(20, 50))) - Assert.assertEquals(Point(18, 46), v.region(Point(20, 60))) - Assert.assertEquals(Point(18, 46), v.region(Point(20, 70))) - Assert.assertEquals(Point(41, 98), v.region(Point(20, 80))) - Assert.assertEquals(Point(41, 98), v.region(Point(20, 90))) - Assert.assertEquals(Point(20, 32), v.region(Point(30, 0))) - Assert.assertEquals(Point(20, 32), v.region(Point(30, 10))) - Assert.assertEquals(Point(20, 32), v.region(Point(30, 20))) - Assert.assertEquals(Point(20, 32), v.region(Point(30, 30))) - Assert.assertEquals(Point(20, 32), v.region(Point(30, 40))) - Assert.assertEquals(Point(18, 46), v.region(Point(30, 50))) - Assert.assertEquals(Point(18, 46), v.region(Point(30, 60))) - Assert.assertEquals(Point(18, 46), v.region(Point(30, 70))) - Assert.assertEquals(Point(41, 98), v.region(Point(30, 80))) - Assert.assertEquals(Point(41, 98), v.region(Point(30, 90))) - Assert.assertEquals(Point(20, 32), v.region(Point(40, 0))) - Assert.assertEquals(Point(20, 32), v.region(Point(40, 10))) - Assert.assertEquals(Point(20, 32), v.region(Point(40, 20))) - Assert.assertEquals(Point(20, 32), v.region(Point(40, 30))) - Assert.assertEquals(Point(20, 32), v.region(Point(40, 40))) - Assert.assertEquals(Point(18, 46), v.region(Point(40, 50))) - Assert.assertEquals(Point(18, 46), v.region(Point(40, 60))) - Assert.assertEquals(Point(57, 81), v.region(Point(40, 70))) - Assert.assertEquals(Point(57, 81), v.region(Point(40, 80))) - Assert.assertEquals(Point(41, 98), v.region(Point(40, 90))) - Assert.assertEquals(Point(65, 29), v.region(Point(50, 0))) - Assert.assertEquals(Point(65, 29), v.region(Point(50, 10))) - Assert.assertEquals(Point(65, 29), v.region(Point(50, 20))) - Assert.assertEquals(Point(65, 29), v.region(Point(50, 30))) - Assert.assertEquals(Point(65, 29), v.region(Point(50, 40))) - Assert.assertEquals(Point(65, 29), v.region(Point(50, 50))) - Assert.assertEquals(Point(57, 81), v.region(Point(50, 60))) - Assert.assertEquals(Point(57, 81), v.region(Point(50, 70))) - Assert.assertEquals(Point(57, 81), v.region(Point(50, 80))) - Assert.assertEquals(Point(59, 97), v.region(Point(50, 90))) - Assert.assertEquals(Point(65, 29), v.region(Point(60, 0))) - Assert.assertEquals(Point(65, 29), v.region(Point(60, 10))) - Assert.assertEquals(Point(65, 29), v.region(Point(60, 20))) - Assert.assertEquals(Point(65, 29), v.region(Point(60, 30))) - Assert.assertEquals(Point(65, 29), v.region(Point(60, 40))) - Assert.assertEquals(Point(65, 29), v.region(Point(60, 50))) - Assert.assertEquals(Point(57, 81), v.region(Point(60, 60))) - Assert.assertEquals(Point(57, 81), v.region(Point(60, 70))) - Assert.assertEquals(Point(57, 81), v.region(Point(60, 80))) - Assert.assertEquals(Point(59, 97), v.region(Point(60, 90))) - Assert.assertEquals(Point(65, 29), v.region(Point(70, 0))) - Assert.assertEquals(Point(65, 29), v.region(Point(70, 10))) - Assert.assertEquals(Point(65, 29), v.region(Point(70, 20))) - Assert.assertEquals(Point(65, 29), v.region(Point(70, 30))) - Assert.assertEquals(Point(65, 29), v.region(Point(70, 40))) - Assert.assertEquals(Point(65, 29), v.region(Point(70, 50))) - Assert.assertEquals(Point(57, 81), v.region(Point(70, 60))) - Assert.assertEquals(Point(57, 81), v.region(Point(70, 70))) - Assert.assertEquals(Point(57, 81), v.region(Point(70, 80))) - Assert.assertEquals(Point(73, 96), v.region(Point(70, 90))) - Assert.assertEquals(Point(87, 26), v.region(Point(80, 0))) - Assert.assertEquals(Point(87, 26), v.region(Point(80, 10))) - Assert.assertEquals(Point(87, 26), v.region(Point(80, 20))) - Assert.assertEquals(Point(87, 26), v.region(Point(80, 30))) - Assert.assertEquals(Point(87, 26), v.region(Point(80, 40))) - Assert.assertEquals(Point(87, 26), v.region(Point(80, 50))) - Assert.assertEquals(Point(81, 90), v.region(Point(80, 60))) - Assert.assertEquals(Point(81, 90), v.region(Point(80, 70))) - Assert.assertEquals(Point(81, 90), v.region(Point(80, 80))) - Assert.assertEquals(Point(81, 90), v.region(Point(80, 90))) - Assert.assertEquals(Point(87, 26), v.region(Point(90, 0))) - Assert.assertEquals(Point(87, 26), v.region(Point(90, 10))) - Assert.assertEquals(Point(87, 26), v.region(Point(90, 20))) - Assert.assertEquals(Point(87, 26), v.region(Point(90, 30))) - Assert.assertEquals(Point(87, 26), v.region(Point(90, 40))) - Assert.assertEquals(Point(87, 26), v.region(Point(90, 50))) - Assert.assertEquals(Point(81, 90), v.region(Point(90, 60))) - Assert.assertEquals(Point(81, 90), v.region(Point(90, 70))) - Assert.assertEquals(Point(81, 90), v.region(Point(90, 80))) - Assert.assertEquals(Point(81, 90), v.region(Point(90, 90))) + assertEquals(10, v.count) + assertEquals(Point(3, 33), v.region(Point(0, 0))) + assertEquals(Point(3, 33), v.region(Point(0, 10))) + assertEquals(Point(3, 33), v.region(Point(0, 20))) + assertEquals(Point(3, 33), v.region(Point(0, 30))) + assertEquals(Point(3, 33), v.region(Point(0, 40))) + assertEquals(Point(3, 33), v.region(Point(0, 50))) + assertEquals(Point(18, 46), v.region(Point(0, 60))) + assertEquals(Point(18, 46), v.region(Point(0, 70))) + assertEquals(Point(18, 46), v.region(Point(0, 80))) + assertEquals(Point(41, 98), v.region(Point(0, 90))) + assertEquals(Point(20, 32), v.region(Point(10, 0))) + assertEquals(Point(3, 33), v.region(Point(10, 10))) + assertEquals(Point(3, 33), v.region(Point(10, 20))) + assertEquals(Point(3, 33), v.region(Point(10, 30))) + assertEquals(Point(3, 33), v.region(Point(10, 40))) + assertEquals(Point(18, 46), v.region(Point(10, 50))) + assertEquals(Point(18, 46), v.region(Point(10, 60))) + assertEquals(Point(18, 46), v.region(Point(10, 70))) + assertEquals(Point(18, 46), v.region(Point(10, 80))) + assertEquals(Point(41, 98), v.region(Point(10, 90))) + assertEquals(Point(20, 32), v.region(Point(20, 0))) + assertEquals(Point(20, 32), v.region(Point(20, 10))) + assertEquals(Point(20, 32), v.region(Point(20, 20))) + assertEquals(Point(20, 32), v.region(Point(20, 30))) + assertEquals(Point(18, 46), v.region(Point(20, 40))) + assertEquals(Point(18, 46), v.region(Point(20, 50))) + assertEquals(Point(18, 46), v.region(Point(20, 60))) + assertEquals(Point(18, 46), v.region(Point(20, 70))) + assertEquals(Point(41, 98), v.region(Point(20, 80))) + assertEquals(Point(41, 98), v.region(Point(20, 90))) + assertEquals(Point(20, 32), v.region(Point(30, 0))) + assertEquals(Point(20, 32), v.region(Point(30, 10))) + assertEquals(Point(20, 32), v.region(Point(30, 20))) + assertEquals(Point(20, 32), v.region(Point(30, 30))) + assertEquals(Point(20, 32), v.region(Point(30, 40))) + assertEquals(Point(18, 46), v.region(Point(30, 50))) + assertEquals(Point(18, 46), v.region(Point(30, 60))) + assertEquals(Point(18, 46), v.region(Point(30, 70))) + assertEquals(Point(41, 98), v.region(Point(30, 80))) + assertEquals(Point(41, 98), v.region(Point(30, 90))) + assertEquals(Point(20, 32), v.region(Point(40, 0))) + assertEquals(Point(20, 32), v.region(Point(40, 10))) + assertEquals(Point(20, 32), v.region(Point(40, 20))) + assertEquals(Point(20, 32), v.region(Point(40, 30))) + assertEquals(Point(20, 32), v.region(Point(40, 40))) + assertEquals(Point(18, 46), v.region(Point(40, 50))) + assertEquals(Point(18, 46), v.region(Point(40, 60))) + assertEquals(Point(57, 81), v.region(Point(40, 70))) + assertEquals(Point(57, 81), v.region(Point(40, 80))) + assertEquals(Point(41, 98), v.region(Point(40, 90))) + assertEquals(Point(65, 29), v.region(Point(50, 0))) + assertEquals(Point(65, 29), v.region(Point(50, 10))) + assertEquals(Point(65, 29), v.region(Point(50, 20))) + assertEquals(Point(65, 29), v.region(Point(50, 30))) + assertEquals(Point(65, 29), v.region(Point(50, 40))) + assertEquals(Point(65, 29), v.region(Point(50, 50))) + assertEquals(Point(57, 81), v.region(Point(50, 60))) + assertEquals(Point(57, 81), v.region(Point(50, 70))) + assertEquals(Point(57, 81), v.region(Point(50, 80))) + assertEquals(Point(59, 97), v.region(Point(50, 90))) + assertEquals(Point(65, 29), v.region(Point(60, 0))) + assertEquals(Point(65, 29), v.region(Point(60, 10))) + assertEquals(Point(65, 29), v.region(Point(60, 20))) + assertEquals(Point(65, 29), v.region(Point(60, 30))) + assertEquals(Point(65, 29), v.region(Point(60, 40))) + assertEquals(Point(65, 29), v.region(Point(60, 50))) + assertEquals(Point(57, 81), v.region(Point(60, 60))) + assertEquals(Point(57, 81), v.region(Point(60, 70))) + assertEquals(Point(57, 81), v.region(Point(60, 80))) + assertEquals(Point(59, 97), v.region(Point(60, 90))) + assertEquals(Point(65, 29), v.region(Point(70, 0))) + assertEquals(Point(65, 29), v.region(Point(70, 10))) + assertEquals(Point(65, 29), v.region(Point(70, 20))) + assertEquals(Point(65, 29), v.region(Point(70, 30))) + assertEquals(Point(65, 29), v.region(Point(70, 40))) + assertEquals(Point(65, 29), v.region(Point(70, 50))) + assertEquals(Point(57, 81), v.region(Point(70, 60))) + assertEquals(Point(57, 81), v.region(Point(70, 70))) + assertEquals(Point(57, 81), v.region(Point(70, 80))) + assertEquals(Point(73, 96), v.region(Point(70, 90))) + assertEquals(Point(87, 26), v.region(Point(80, 0))) + assertEquals(Point(87, 26), v.region(Point(80, 10))) + assertEquals(Point(87, 26), v.region(Point(80, 20))) + assertEquals(Point(87, 26), v.region(Point(80, 30))) + assertEquals(Point(87, 26), v.region(Point(80, 40))) + assertEquals(Point(87, 26), v.region(Point(80, 50))) + assertEquals(Point(81, 90), v.region(Point(80, 60))) + assertEquals(Point(81, 90), v.region(Point(80, 70))) + assertEquals(Point(81, 90), v.region(Point(80, 80))) + assertEquals(Point(81, 90), v.region(Point(80, 90))) + assertEquals(Point(87, 26), v.region(Point(90, 0))) + assertEquals(Point(87, 26), v.region(Point(90, 10))) + assertEquals(Point(87, 26), v.region(Point(90, 20))) + assertEquals(Point(87, 26), v.region(Point(90, 30))) + assertEquals(Point(87, 26), v.region(Point(90, 40))) + assertEquals(Point(87, 26), v.region(Point(90, 50))) + assertEquals(Point(81, 90), v.region(Point(90, 60))) + assertEquals(Point(81, 90), v.region(Point(90, 70))) + assertEquals(Point(81, 90), v.region(Point(90, 80))) + assertEquals(Point(81, 90), v.region(Point(90, 90))) } @Test fun test3() { val v = Voronoi( - listOf( - Point(16, 9), - Point(17, 2), - Point(5, 19), - Point(3, 24), - Point(17, 12), - Point(15, 10), - Point(12, 1), - Point(21, 4), - Point(11, 21), - Point(1, 20), - Point(11, 13), - Point(13, 4), - Point(15, 8), - Point(22, 20), - Point(21, 20), - Point(24, 0), - Point(2, 12), - Point(3, 22), - Point(19, 5), - Point(19, 7), - Point(19, 8), - Point(0, 18), - Point(17, 20), - Point(17, 0), - Point(13, 0) - ), Point.EUCLIDEAN_DISTANCE_FUNC + listOf( + Point(16, 9), + Point(17, 2), + Point(5, 19), + Point(3, 24), + Point(17, 12), + Point(15, 10), + Point(12, 1), + Point(21, 4), + Point(11, 21), + Point(1, 20), + Point(11, 13), + Point(13, 4), + Point(15, 8), + Point(22, 20), + Point(21, 20), + Point(24, 0), + Point(2, 12), + Point(3, 22), + Point(19, 5), + Point(19, 7), + Point(19, 8), + Point(0, 18), + Point(17, 20), + Point(17, 0), + Point(13, 0) + ), Point.EUCLIDEAN_DISTANCE_FUNC ) - Assert.assertEquals(25, v.count) - Assert.assertEquals(Point(12, 1), v.region(Point(0, 0))) - Assert.assertEquals(Point(2, 12), v.region(Point(0, 5))) - Assert.assertEquals(Point(2, 12), v.region(Point(0, 10))) - Assert.assertEquals(Point(0, 18), v.region(Point(0, 15))) - Assert.assertEquals(Point(1, 20), v.region(Point(0, 20))) - Assert.assertEquals(Point(12, 1), v.region(Point(5, 0))) - Assert.assertEquals(Point(2, 12), v.region(Point(5, 5))) - Assert.assertEquals(Point(2, 12), v.region(Point(5, 10))) - Assert.assertEquals(Point(5, 19), v.region(Point(5, 15))) - Assert.assertEquals(Point(5, 19), v.region(Point(5, 20))) - Assert.assertEquals(Point(12, 1), v.region(Point(10, 0))) - Assert.assertEquals(Point(13, 4), v.region(Point(10, 5))) - Assert.assertEquals(Point(11, 13), v.region(Point(10, 10))) - Assert.assertEquals(Point(11, 13), v.region(Point(10, 15))) - Assert.assertEquals(Point(11, 21), v.region(Point(10, 20))) - Assert.assertEquals(Point(17, 0), v.region(Point(15, 0))) - Assert.assertEquals(Point(13, 4), v.region(Point(15, 5))) - Assert.assertEquals(Point(15, 10), v.region(Point(15, 10))) - Assert.assertEquals(Point(17, 12), v.region(Point(15, 15))) - Assert.assertEquals(Point(17, 20), v.region(Point(15, 20))) - Assert.assertEquals(Point(17, 0), v.region(Point(20, 0))) - Assert.assertEquals(Point(19, 5), v.region(Point(20, 5))) - Assert.assertEquals(Point(19, 8), v.region(Point(20, 10))) - Assert.assertEquals(Point(17, 12), v.region(Point(20, 15))) - Assert.assertEquals(Point(21, 20), v.region(Point(20, 20))) + assertEquals(25, v.count) + assertEquals(Point(12, 1), v.region(Point(0, 0))) + assertEquals(Point(2, 12), v.region(Point(0, 5))) + assertEquals(Point(2, 12), v.region(Point(0, 10))) + assertEquals(Point(0, 18), v.region(Point(0, 15))) + assertEquals(Point(1, 20), v.region(Point(0, 20))) + assertEquals(Point(12, 1), v.region(Point(5, 0))) + assertEquals(Point(2, 12), v.region(Point(5, 5))) + assertEquals(Point(2, 12), v.region(Point(5, 10))) + assertEquals(Point(5, 19), v.region(Point(5, 15))) + assertEquals(Point(5, 19), v.region(Point(5, 20))) + assertEquals(Point(12, 1), v.region(Point(10, 0))) + assertEquals(Point(13, 4), v.region(Point(10, 5))) + assertEquals(Point(11, 13), v.region(Point(10, 10))) + assertEquals(Point(11, 13), v.region(Point(10, 15))) + assertEquals(Point(11, 21), v.region(Point(10, 20))) + assertEquals(Point(17, 0), v.region(Point(15, 0))) + assertEquals(Point(13, 4), v.region(Point(15, 5))) + assertEquals(Point(15, 10), v.region(Point(15, 10))) + assertEquals(Point(17, 12), v.region(Point(15, 15))) + assertEquals(Point(17, 20), v.region(Point(15, 20))) + assertEquals(Point(17, 0), v.region(Point(20, 0))) + assertEquals(Point(19, 5), v.region(Point(20, 5))) + assertEquals(Point(19, 8), v.region(Point(20, 10))) + assertEquals(Point(17, 12), v.region(Point(20, 15))) + assertEquals(Point(21, 20), v.region(Point(20, 20))) } @Test fun test4() { val v = Voronoi( - listOf( - Point(7, 2), - Point(6, 6), - Point(8, 9) - ), Point.EUCLIDEAN_DISTANCE_FUNC + listOf( + Point(7, 2), + Point(6, 6), + Point(8, 9) + ), Point.EUCLIDEAN_DISTANCE_FUNC ) - Assert.assertEquals(Point(7, 2), v.region(Point(0, 0))) - Assert.assertEquals(Point(7, 2), v.region(Point(0, 2))) - Assert.assertEquals(Point(6, 6), v.region(Point(0, 4))) - Assert.assertEquals(Point(6, 6), v.region(Point(0, 6))) - Assert.assertEquals(Point(6, 6), v.region(Point(0, 8))) - Assert.assertEquals(Point(7, 2), v.region(Point(2, 0))) - Assert.assertEquals(Point(7, 2), v.region(Point(2, 2))) - Assert.assertEquals(Point(6, 6), v.region(Point(2, 4))) - Assert.assertEquals(Point(6, 6), v.region(Point(2, 6))) - Assert.assertEquals(Point(6, 6), v.region(Point(2, 8))) - Assert.assertEquals(Point(7, 2), v.region(Point(4, 0))) - Assert.assertEquals(Point(7, 2), v.region(Point(4, 2))) - Assert.assertEquals(Point(6, 6), v.region(Point(4, 4))) - Assert.assertEquals(Point(6, 6), v.region(Point(4, 6))) - Assert.assertEquals(Point(6, 6), v.region(Point(4, 8))) - Assert.assertEquals(Point(7, 2), v.region(Point(6, 0))) - Assert.assertEquals(Point(7, 2), v.region(Point(6, 2))) - Assert.assertEquals(Point(6, 6), v.region(Point(6, 4))) - Assert.assertEquals(Point(6, 6), v.region(Point(6, 6))) - Assert.assertEquals(Point(6, 6), v.region(Point(6, 8))) - Assert.assertEquals(Point(7, 2), v.region(Point(8, 0))) - Assert.assertEquals(Point(7, 2), v.region(Point(8, 2))) - Assert.assertEquals(Point(7, 2), v.region(Point(8, 4))) - Assert.assertEquals(Point(6, 6), v.region(Point(8, 6))) - Assert.assertEquals(Point(8, 9), v.region(Point(8, 8))) + assertEquals(Point(7, 2), v.region(Point(0, 0))) + assertEquals(Point(7, 2), v.region(Point(0, 2))) + assertEquals(Point(6, 6), v.region(Point(0, 4))) + assertEquals(Point(6, 6), v.region(Point(0, 6))) + assertEquals(Point(6, 6), v.region(Point(0, 8))) + assertEquals(Point(7, 2), v.region(Point(2, 0))) + assertEquals(Point(7, 2), v.region(Point(2, 2))) + assertEquals(Point(6, 6), v.region(Point(2, 4))) + assertEquals(Point(6, 6), v.region(Point(2, 6))) + assertEquals(Point(6, 6), v.region(Point(2, 8))) + assertEquals(Point(7, 2), v.region(Point(4, 0))) + assertEquals(Point(7, 2), v.region(Point(4, 2))) + assertEquals(Point(6, 6), v.region(Point(4, 4))) + assertEquals(Point(6, 6), v.region(Point(4, 6))) + assertEquals(Point(6, 6), v.region(Point(4, 8))) + assertEquals(Point(7, 2), v.region(Point(6, 0))) + assertEquals(Point(7, 2), v.region(Point(6, 2))) + assertEquals(Point(6, 6), v.region(Point(6, 4))) + assertEquals(Point(6, 6), v.region(Point(6, 6))) + assertEquals(Point(6, 6), v.region(Point(6, 8))) + assertEquals(Point(7, 2), v.region(Point(8, 0))) + assertEquals(Point(7, 2), v.region(Point(8, 2))) + assertEquals(Point(7, 2), v.region(Point(8, 4))) + assertEquals(Point(6, 6), v.region(Point(8, 6))) + assertEquals(Point(8, 9), v.region(Point(8, 8))) } @Test fun test5() { val v = Voronoi( - listOf( - Point(44, 27), - Point(2, 35), - Point(24, 10), - Point(45, 25), - Point(29, 39), - Point(32, 9), - Point(15, 16), - Point(17, 40), - Point(7, 6), - Point(6, 5), - Point(39, 15), - Point(20, 1), - Point(29, 20), - Point(6, 36), - Point(40, 28), - Point(41, 4), - Point(41, 34), - Point(36, 11), - Point(8, 19), - Point(37, 34), - Point(29, 35), - Point(44, 42), - Point(20, 45), - Point(10, 43), - Point(37, 39), - Point(42, 9), - Point(11, 32), - Point(16, 38), - Point(32, 41), - Point(23, 12), - Point(15, 40), - Point(5, 42), - Point(7, 31), - Point(2, 23), - Point(42, 36), - Point(10, 12), - Point(47, 27), - Point(27, 20), - Point(26, 1), - Point(23, 25), - Point(47, 7), - Point(4, 36), - Point(49, 7), - Point(40, 26), - Point(13, 21), - Point(11, 6), - Point(34, 21), - Point(1, 40), - Point(43, 30), - Point(12, 48) - ), Point.EUCLIDEAN_DISTANCE_FUNC + listOf( + Point(44, 27), + Point(2, 35), + Point(24, 10), + Point(45, 25), + Point(29, 39), + Point(32, 9), + Point(15, 16), + Point(17, 40), + Point(7, 6), + Point(6, 5), + Point(39, 15), + Point(20, 1), + Point(29, 20), + Point(6, 36), + Point(40, 28), + Point(41, 4), + Point(41, 34), + Point(36, 11), + Point(8, 19), + Point(37, 34), + Point(29, 35), + Point(44, 42), + Point(20, 45), + Point(10, 43), + Point(37, 39), + Point(42, 9), + Point(11, 32), + Point(16, 38), + Point(32, 41), + Point(23, 12), + Point(15, 40), + Point(5, 42), + Point(7, 31), + Point(2, 23), + Point(42, 36), + Point(10, 12), + Point(47, 27), + Point(27, 20), + Point(26, 1), + Point(23, 25), + Point(47, 7), + Point(4, 36), + Point(49, 7), + Point(40, 26), + Point(13, 21), + Point(11, 6), + Point(34, 21), + Point(1, 40), + Point(43, 30), + Point(12, 48) + ), Point.EUCLIDEAN_DISTANCE_FUNC ) - Assert.assertEquals(50, v.count) - Assert.assertEquals(Point(6, 5), v.region(Point(0, 0))) - Assert.assertEquals(Point(6, 5), v.region(Point(0, 2))) - Assert.assertEquals(Point(6, 5), v.region(Point(0, 4))) - Assert.assertEquals(Point(6, 5), v.region(Point(0, 6))) - Assert.assertEquals(Point(6, 5), v.region(Point(0, 8))) - Assert.assertEquals(Point(6, 5), v.region(Point(0, 10))) - Assert.assertEquals(Point(7, 6), v.region(Point(0, 12))) - Assert.assertEquals(Point(2, 23), v.region(Point(0, 14))) - Assert.assertEquals(Point(2, 23), v.region(Point(0, 16))) - Assert.assertEquals(Point(2, 23), v.region(Point(0, 18))) - Assert.assertEquals(Point(2, 23), v.region(Point(0, 20))) - Assert.assertEquals(Point(2, 23), v.region(Point(0, 22))) - Assert.assertEquals(Point(2, 23), v.region(Point(0, 24))) - Assert.assertEquals(Point(2, 23), v.region(Point(0, 26))) - Assert.assertEquals(Point(2, 23), v.region(Point(0, 28))) - Assert.assertEquals(Point(2, 35), v.region(Point(0, 30))) - Assert.assertEquals(Point(2, 35), v.region(Point(0, 32))) - Assert.assertEquals(Point(2, 35), v.region(Point(0, 34))) - Assert.assertEquals(Point(2, 35), v.region(Point(0, 36))) - Assert.assertEquals(Point(1, 40), v.region(Point(0, 38))) - Assert.assertEquals(Point(1, 40), v.region(Point(0, 40))) - Assert.assertEquals(Point(1, 40), v.region(Point(0, 42))) - Assert.assertEquals(Point(1, 40), v.region(Point(0, 44))) - Assert.assertEquals(Point(1, 40), v.region(Point(0, 46))) - Assert.assertEquals(Point(5, 42), v.region(Point(0, 48))) - Assert.assertEquals(Point(6, 5), v.region(Point(2, 0))) - Assert.assertEquals(Point(6, 5), v.region(Point(2, 2))) - Assert.assertEquals(Point(6, 5), v.region(Point(2, 4))) - Assert.assertEquals(Point(6, 5), v.region(Point(2, 6))) - Assert.assertEquals(Point(6, 5), v.region(Point(2, 8))) - Assert.assertEquals(Point(7, 6), v.region(Point(2, 10))) - Assert.assertEquals(Point(7, 6), v.region(Point(2, 12))) - Assert.assertEquals(Point(8, 19), v.region(Point(2, 14))) - Assert.assertEquals(Point(8, 19), v.region(Point(2, 16))) - Assert.assertEquals(Point(2, 23), v.region(Point(2, 18))) - Assert.assertEquals(Point(2, 23), v.region(Point(2, 20))) - Assert.assertEquals(Point(2, 23), v.region(Point(2, 22))) - Assert.assertEquals(Point(2, 23), v.region(Point(2, 24))) - Assert.assertEquals(Point(2, 23), v.region(Point(2, 26))) - Assert.assertEquals(Point(2, 23), v.region(Point(2, 28))) - Assert.assertEquals(Point(2, 35), v.region(Point(2, 30))) - Assert.assertEquals(Point(2, 35), v.region(Point(2, 32))) - Assert.assertEquals(Point(2, 35), v.region(Point(2, 34))) - Assert.assertEquals(Point(2, 35), v.region(Point(2, 36))) - Assert.assertEquals(Point(1, 40), v.region(Point(2, 38))) - Assert.assertEquals(Point(1, 40), v.region(Point(2, 40))) - Assert.assertEquals(Point(1, 40), v.region(Point(2, 42))) - Assert.assertEquals(Point(5, 42), v.region(Point(2, 44))) - Assert.assertEquals(Point(5, 42), v.region(Point(2, 46))) - Assert.assertEquals(Point(5, 42), v.region(Point(2, 48))) - Assert.assertEquals(Point(6, 5), v.region(Point(4, 0))) - Assert.assertEquals(Point(6, 5), v.region(Point(4, 2))) - Assert.assertEquals(Point(6, 5), v.region(Point(4, 4))) - Assert.assertEquals(Point(6, 5), v.region(Point(4, 6))) - Assert.assertEquals(Point(7, 6), v.region(Point(4, 8))) - Assert.assertEquals(Point(7, 6), v.region(Point(4, 10))) - Assert.assertEquals(Point(10, 12), v.region(Point(4, 12))) - Assert.assertEquals(Point(10, 12), v.region(Point(4, 14))) - Assert.assertEquals(Point(8, 19), v.region(Point(4, 16))) - Assert.assertEquals(Point(8, 19), v.region(Point(4, 18))) - Assert.assertEquals(Point(2, 23), v.region(Point(4, 20))) - Assert.assertEquals(Point(2, 23), v.region(Point(4, 22))) - Assert.assertEquals(Point(2, 23), v.region(Point(4, 24))) - Assert.assertEquals(Point(2, 23), v.region(Point(4, 26))) - Assert.assertEquals(Point(7, 31), v.region(Point(4, 28))) - Assert.assertEquals(Point(7, 31), v.region(Point(4, 30))) - Assert.assertEquals(Point(7, 31), v.region(Point(4, 32))) - Assert.assertEquals(Point(4, 36), v.region(Point(4, 34))) - Assert.assertEquals(Point(4, 36), v.region(Point(4, 36))) - Assert.assertEquals(Point(4, 36), v.region(Point(4, 38))) - Assert.assertEquals(Point(5, 42), v.region(Point(4, 40))) - Assert.assertEquals(Point(5, 42), v.region(Point(4, 42))) - Assert.assertEquals(Point(5, 42), v.region(Point(4, 44))) - Assert.assertEquals(Point(5, 42), v.region(Point(4, 46))) - Assert.assertEquals(Point(5, 42), v.region(Point(4, 48))) - Assert.assertEquals(Point(6, 5), v.region(Point(6, 0))) - Assert.assertEquals(Point(6, 5), v.region(Point(6, 2))) - Assert.assertEquals(Point(6, 5), v.region(Point(6, 4))) - Assert.assertEquals(Point(7, 6), v.region(Point(6, 6))) - Assert.assertEquals(Point(7, 6), v.region(Point(6, 8))) - Assert.assertEquals(Point(7, 6), v.region(Point(6, 10))) - Assert.assertEquals(Point(10, 12), v.region(Point(6, 12))) - Assert.assertEquals(Point(10, 12), v.region(Point(6, 14))) - Assert.assertEquals(Point(8, 19), v.region(Point(6, 16))) - Assert.assertEquals(Point(8, 19), v.region(Point(6, 18))) - Assert.assertEquals(Point(8, 19), v.region(Point(6, 20))) - Assert.assertEquals(Point(8, 19), v.region(Point(6, 22))) - Assert.assertEquals(Point(2, 23), v.region(Point(6, 24))) - Assert.assertEquals(Point(2, 23), v.region(Point(6, 26))) - Assert.assertEquals(Point(7, 31), v.region(Point(6, 28))) - Assert.assertEquals(Point(7, 31), v.region(Point(6, 30))) - Assert.assertEquals(Point(7, 31), v.region(Point(6, 32))) - Assert.assertEquals(Point(6, 36), v.region(Point(6, 34))) - Assert.assertEquals(Point(6, 36), v.region(Point(6, 36))) - Assert.assertEquals(Point(6, 36), v.region(Point(6, 38))) - Assert.assertEquals(Point(5, 42), v.region(Point(6, 40))) - Assert.assertEquals(Point(5, 42), v.region(Point(6, 42))) - Assert.assertEquals(Point(5, 42), v.region(Point(6, 44))) - Assert.assertEquals(Point(5, 42), v.region(Point(6, 46))) - Assert.assertEquals(Point(12, 48), v.region(Point(6, 48))) - Assert.assertEquals(Point(6, 5), v.region(Point(8, 0))) - Assert.assertEquals(Point(6, 5), v.region(Point(8, 2))) - Assert.assertEquals(Point(7, 6), v.region(Point(8, 4))) - Assert.assertEquals(Point(7, 6), v.region(Point(8, 6))) - Assert.assertEquals(Point(7, 6), v.region(Point(8, 8))) - Assert.assertEquals(Point(10, 12), v.region(Point(8, 10))) - Assert.assertEquals(Point(10, 12), v.region(Point(8, 12))) - Assert.assertEquals(Point(10, 12), v.region(Point(8, 14))) - Assert.assertEquals(Point(8, 19), v.region(Point(8, 16))) - Assert.assertEquals(Point(8, 19), v.region(Point(8, 18))) - Assert.assertEquals(Point(8, 19), v.region(Point(8, 20))) - Assert.assertEquals(Point(8, 19), v.region(Point(8, 22))) - Assert.assertEquals(Point(8, 19), v.region(Point(8, 24))) - Assert.assertEquals(Point(7, 31), v.region(Point(8, 26))) - Assert.assertEquals(Point(7, 31), v.region(Point(8, 28))) - Assert.assertEquals(Point(7, 31), v.region(Point(8, 30))) - Assert.assertEquals(Point(7, 31), v.region(Point(8, 32))) - Assert.assertEquals(Point(6, 36), v.region(Point(8, 34))) - Assert.assertEquals(Point(6, 36), v.region(Point(8, 36))) - Assert.assertEquals(Point(6, 36), v.region(Point(8, 38))) - Assert.assertEquals(Point(10, 43), v.region(Point(8, 40))) - Assert.assertEquals(Point(10, 43), v.region(Point(8, 42))) - Assert.assertEquals(Point(10, 43), v.region(Point(8, 44))) - Assert.assertEquals(Point(10, 43), v.region(Point(8, 46))) - Assert.assertEquals(Point(12, 48), v.region(Point(8, 48))) - Assert.assertEquals(Point(11, 6), v.region(Point(10, 0))) - Assert.assertEquals(Point(11, 6), v.region(Point(10, 2))) - Assert.assertEquals(Point(11, 6), v.region(Point(10, 4))) - Assert.assertEquals(Point(11, 6), v.region(Point(10, 6))) - Assert.assertEquals(Point(11, 6), v.region(Point(10, 8))) - Assert.assertEquals(Point(10, 12), v.region(Point(10, 10))) - Assert.assertEquals(Point(10, 12), v.region(Point(10, 12))) - Assert.assertEquals(Point(10, 12), v.region(Point(10, 14))) - Assert.assertEquals(Point(8, 19), v.region(Point(10, 16))) - Assert.assertEquals(Point(8, 19), v.region(Point(10, 18))) - Assert.assertEquals(Point(8, 19), v.region(Point(10, 20))) - Assert.assertEquals(Point(13, 21), v.region(Point(10, 22))) - Assert.assertEquals(Point(13, 21), v.region(Point(10, 24))) - Assert.assertEquals(Point(7, 31), v.region(Point(10, 26))) - Assert.assertEquals(Point(11, 32), v.region(Point(10, 28))) - Assert.assertEquals(Point(11, 32), v.region(Point(10, 30))) - Assert.assertEquals(Point(11, 32), v.region(Point(10, 32))) - Assert.assertEquals(Point(11, 32), v.region(Point(10, 34))) - Assert.assertEquals(Point(6, 36), v.region(Point(10, 36))) - Assert.assertEquals(Point(6, 36), v.region(Point(10, 38))) - Assert.assertEquals(Point(10, 43), v.region(Point(10, 40))) - Assert.assertEquals(Point(10, 43), v.region(Point(10, 42))) - Assert.assertEquals(Point(10, 43), v.region(Point(10, 44))) - Assert.assertEquals(Point(12, 48), v.region(Point(10, 46))) - Assert.assertEquals(Point(12, 48), v.region(Point(10, 48))) - Assert.assertEquals(Point(11, 6), v.region(Point(12, 0))) - Assert.assertEquals(Point(11, 6), v.region(Point(12, 2))) - Assert.assertEquals(Point(11, 6), v.region(Point(12, 4))) - Assert.assertEquals(Point(11, 6), v.region(Point(12, 6))) - Assert.assertEquals(Point(11, 6), v.region(Point(12, 8))) - Assert.assertEquals(Point(10, 12), v.region(Point(12, 10))) - Assert.assertEquals(Point(10, 12), v.region(Point(12, 12))) - Assert.assertEquals(Point(10, 12), v.region(Point(12, 14))) - Assert.assertEquals(Point(15, 16), v.region(Point(12, 16))) - Assert.assertEquals(Point(13, 21), v.region(Point(12, 18))) - Assert.assertEquals(Point(13, 21), v.region(Point(12, 20))) - Assert.assertEquals(Point(13, 21), v.region(Point(12, 22))) - Assert.assertEquals(Point(13, 21), v.region(Point(12, 24))) - Assert.assertEquals(Point(13, 21), v.region(Point(12, 26))) - Assert.assertEquals(Point(11, 32), v.region(Point(12, 28))) - Assert.assertEquals(Point(11, 32), v.region(Point(12, 30))) - Assert.assertEquals(Point(11, 32), v.region(Point(12, 32))) - Assert.assertEquals(Point(11, 32), v.region(Point(12, 34))) - Assert.assertEquals(Point(11, 32), v.region(Point(12, 36))) - Assert.assertEquals(Point(15, 40), v.region(Point(12, 38))) - Assert.assertEquals(Point(15, 40), v.region(Point(12, 40))) - Assert.assertEquals(Point(10, 43), v.region(Point(12, 42))) - Assert.assertEquals(Point(10, 43), v.region(Point(12, 44))) - Assert.assertEquals(Point(12, 48), v.region(Point(12, 46))) - Assert.assertEquals(Point(12, 48), v.region(Point(12, 48))) - Assert.assertEquals(Point(20, 1), v.region(Point(14, 0))) - Assert.assertEquals(Point(11, 6), v.region(Point(14, 2))) - Assert.assertEquals(Point(11, 6), v.region(Point(14, 4))) - Assert.assertEquals(Point(11, 6), v.region(Point(14, 6))) - Assert.assertEquals(Point(11, 6), v.region(Point(14, 8))) - Assert.assertEquals(Point(10, 12), v.region(Point(14, 10))) - Assert.assertEquals(Point(10, 12), v.region(Point(14, 12))) - Assert.assertEquals(Point(15, 16), v.region(Point(14, 14))) - Assert.assertEquals(Point(15, 16), v.region(Point(14, 16))) - Assert.assertEquals(Point(15, 16), v.region(Point(14, 18))) - Assert.assertEquals(Point(13, 21), v.region(Point(14, 20))) - Assert.assertEquals(Point(13, 21), v.region(Point(14, 22))) - Assert.assertEquals(Point(13, 21), v.region(Point(14, 24))) - Assert.assertEquals(Point(13, 21), v.region(Point(14, 26))) - Assert.assertEquals(Point(11, 32), v.region(Point(14, 28))) - Assert.assertEquals(Point(11, 32), v.region(Point(14, 30))) - Assert.assertEquals(Point(11, 32), v.region(Point(14, 32))) - Assert.assertEquals(Point(11, 32), v.region(Point(14, 34))) - Assert.assertEquals(Point(16, 38), v.region(Point(14, 36))) - Assert.assertEquals(Point(16, 38), v.region(Point(14, 38))) - Assert.assertEquals(Point(15, 40), v.region(Point(14, 40))) - Assert.assertEquals(Point(15, 40), v.region(Point(14, 42))) - Assert.assertEquals(Point(10, 43), v.region(Point(14, 44))) - Assert.assertEquals(Point(12, 48), v.region(Point(14, 46))) - Assert.assertEquals(Point(12, 48), v.region(Point(14, 48))) - Assert.assertEquals(Point(20, 1), v.region(Point(16, 0))) - Assert.assertEquals(Point(20, 1), v.region(Point(16, 2))) - Assert.assertEquals(Point(20, 1), v.region(Point(16, 4))) - Assert.assertEquals(Point(11, 6), v.region(Point(16, 6))) - Assert.assertEquals(Point(11, 6), v.region(Point(16, 8))) - Assert.assertEquals(Point(15, 16), v.region(Point(16, 10))) - Assert.assertEquals(Point(15, 16), v.region(Point(16, 12))) - Assert.assertEquals(Point(15, 16), v.region(Point(16, 14))) - Assert.assertEquals(Point(15, 16), v.region(Point(16, 16))) - Assert.assertEquals(Point(15, 16), v.region(Point(16, 18))) - Assert.assertEquals(Point(13, 21), v.region(Point(16, 20))) - Assert.assertEquals(Point(13, 21), v.region(Point(16, 22))) - Assert.assertEquals(Point(13, 21), v.region(Point(16, 24))) - Assert.assertEquals(Point(13, 21), v.region(Point(16, 26))) - Assert.assertEquals(Point(11, 32), v.region(Point(16, 28))) - Assert.assertEquals(Point(11, 32), v.region(Point(16, 30))) - Assert.assertEquals(Point(11, 32), v.region(Point(16, 32))) - Assert.assertEquals(Point(16, 38), v.region(Point(16, 34))) - Assert.assertEquals(Point(16, 38), v.region(Point(16, 36))) - Assert.assertEquals(Point(16, 38), v.region(Point(16, 38))) - Assert.assertEquals(Point(17, 40), v.region(Point(16, 40))) - Assert.assertEquals(Point(17, 40), v.region(Point(16, 42))) - Assert.assertEquals(Point(17, 40), v.region(Point(16, 44))) - Assert.assertEquals(Point(20, 45), v.region(Point(16, 46))) - Assert.assertEquals(Point(12, 48), v.region(Point(16, 48))) - Assert.assertEquals(Point(20, 1), v.region(Point(18, 0))) - Assert.assertEquals(Point(20, 1), v.region(Point(18, 2))) - Assert.assertEquals(Point(20, 1), v.region(Point(18, 4))) - Assert.assertEquals(Point(20, 1), v.region(Point(18, 6))) - Assert.assertEquals(Point(24, 10), v.region(Point(18, 8))) - Assert.assertEquals(Point(23, 12), v.region(Point(18, 10))) - Assert.assertEquals(Point(15, 16), v.region(Point(18, 12))) - Assert.assertEquals(Point(15, 16), v.region(Point(18, 14))) - Assert.assertEquals(Point(15, 16), v.region(Point(18, 16))) - Assert.assertEquals(Point(15, 16), v.region(Point(18, 18))) - Assert.assertEquals(Point(15, 16), v.region(Point(18, 20))) - Assert.assertEquals(Point(13, 21), v.region(Point(18, 22))) - Assert.assertEquals(Point(23, 25), v.region(Point(18, 24))) - Assert.assertEquals(Point(23, 25), v.region(Point(18, 26))) - Assert.assertEquals(Point(23, 25), v.region(Point(18, 28))) - Assert.assertEquals(Point(23, 25), v.region(Point(18, 30))) - Assert.assertEquals(Point(16, 38), v.region(Point(18, 32))) - Assert.assertEquals(Point(16, 38), v.region(Point(18, 34))) - Assert.assertEquals(Point(16, 38), v.region(Point(18, 36))) - Assert.assertEquals(Point(16, 38), v.region(Point(18, 38))) - Assert.assertEquals(Point(17, 40), v.region(Point(18, 40))) - Assert.assertEquals(Point(17, 40), v.region(Point(18, 42))) - Assert.assertEquals(Point(20, 45), v.region(Point(18, 44))) - Assert.assertEquals(Point(20, 45), v.region(Point(18, 46))) - Assert.assertEquals(Point(20, 45), v.region(Point(18, 48))) - Assert.assertEquals(Point(20, 1), v.region(Point(20, 0))) - Assert.assertEquals(Point(20, 1), v.region(Point(20, 2))) - Assert.assertEquals(Point(20, 1), v.region(Point(20, 4))) - Assert.assertEquals(Point(20, 1), v.region(Point(20, 6))) - Assert.assertEquals(Point(24, 10), v.region(Point(20, 8))) - Assert.assertEquals(Point(23, 12), v.region(Point(20, 10))) - Assert.assertEquals(Point(23, 12), v.region(Point(20, 12))) - Assert.assertEquals(Point(23, 12), v.region(Point(20, 14))) - Assert.assertEquals(Point(15, 16), v.region(Point(20, 16))) - Assert.assertEquals(Point(15, 16), v.region(Point(20, 18))) - Assert.assertEquals(Point(23, 25), v.region(Point(20, 20))) - Assert.assertEquals(Point(23, 25), v.region(Point(20, 22))) - Assert.assertEquals(Point(23, 25), v.region(Point(20, 24))) - Assert.assertEquals(Point(23, 25), v.region(Point(20, 26))) - Assert.assertEquals(Point(23, 25), v.region(Point(20, 28))) - Assert.assertEquals(Point(23, 25), v.region(Point(20, 30))) - Assert.assertEquals(Point(16, 38), v.region(Point(20, 32))) - Assert.assertEquals(Point(16, 38), v.region(Point(20, 34))) - Assert.assertEquals(Point(16, 38), v.region(Point(20, 36))) - Assert.assertEquals(Point(17, 40), v.region(Point(20, 38))) - Assert.assertEquals(Point(17, 40), v.region(Point(20, 40))) - Assert.assertEquals(Point(20, 45), v.region(Point(20, 42))) - Assert.assertEquals(Point(20, 45), v.region(Point(20, 44))) - Assert.assertEquals(Point(20, 45), v.region(Point(20, 46))) - Assert.assertEquals(Point(20, 45), v.region(Point(20, 48))) - Assert.assertEquals(Point(20, 1), v.region(Point(22, 0))) - Assert.assertEquals(Point(20, 1), v.region(Point(22, 2))) - Assert.assertEquals(Point(20, 1), v.region(Point(22, 4))) - Assert.assertEquals(Point(24, 10), v.region(Point(22, 6))) - Assert.assertEquals(Point(24, 10), v.region(Point(22, 8))) - Assert.assertEquals(Point(24, 10), v.region(Point(22, 10))) - Assert.assertEquals(Point(23, 12), v.region(Point(22, 12))) - Assert.assertEquals(Point(23, 12), v.region(Point(22, 14))) - Assert.assertEquals(Point(23, 12), v.region(Point(22, 16))) - Assert.assertEquals(Point(27, 20), v.region(Point(22, 18))) - Assert.assertEquals(Point(27, 20), v.region(Point(22, 20))) - Assert.assertEquals(Point(23, 25), v.region(Point(22, 22))) - Assert.assertEquals(Point(23, 25), v.region(Point(22, 24))) - Assert.assertEquals(Point(23, 25), v.region(Point(22, 26))) - Assert.assertEquals(Point(23, 25), v.region(Point(22, 28))) - Assert.assertEquals(Point(23, 25), v.region(Point(22, 30))) - Assert.assertEquals(Point(23, 25), v.region(Point(22, 32))) - Assert.assertEquals(Point(29, 35), v.region(Point(22, 34))) - Assert.assertEquals(Point(16, 38), v.region(Point(22, 36))) - Assert.assertEquals(Point(17, 40), v.region(Point(22, 38))) - Assert.assertEquals(Point(17, 40), v.region(Point(22, 40))) - Assert.assertEquals(Point(20, 45), v.region(Point(22, 42))) - Assert.assertEquals(Point(20, 45), v.region(Point(22, 44))) - Assert.assertEquals(Point(20, 45), v.region(Point(22, 46))) - Assert.assertEquals(Point(20, 45), v.region(Point(22, 48))) - Assert.assertEquals(Point(26, 1), v.region(Point(24, 0))) - Assert.assertEquals(Point(26, 1), v.region(Point(24, 2))) - Assert.assertEquals(Point(26, 1), v.region(Point(24, 4))) - Assert.assertEquals(Point(24, 10), v.region(Point(24, 6))) - Assert.assertEquals(Point(24, 10), v.region(Point(24, 8))) - Assert.assertEquals(Point(24, 10), v.region(Point(24, 10))) - Assert.assertEquals(Point(23, 12), v.region(Point(24, 12))) - Assert.assertEquals(Point(23, 12), v.region(Point(24, 14))) - Assert.assertEquals(Point(23, 12), v.region(Point(24, 16))) - Assert.assertEquals(Point(27, 20), v.region(Point(24, 18))) - Assert.assertEquals(Point(27, 20), v.region(Point(24, 20))) - Assert.assertEquals(Point(23, 25), v.region(Point(24, 22))) - Assert.assertEquals(Point(23, 25), v.region(Point(24, 24))) - Assert.assertEquals(Point(23, 25), v.region(Point(24, 26))) - Assert.assertEquals(Point(23, 25), v.region(Point(24, 28))) - Assert.assertEquals(Point(23, 25), v.region(Point(24, 30))) - Assert.assertEquals(Point(29, 35), v.region(Point(24, 32))) - Assert.assertEquals(Point(29, 35), v.region(Point(24, 34))) - Assert.assertEquals(Point(29, 35), v.region(Point(24, 36))) - Assert.assertEquals(Point(29, 39), v.region(Point(24, 38))) - Assert.assertEquals(Point(29, 39), v.region(Point(24, 40))) - Assert.assertEquals(Point(20, 45), v.region(Point(24, 42))) - Assert.assertEquals(Point(20, 45), v.region(Point(24, 44))) - Assert.assertEquals(Point(20, 45), v.region(Point(24, 46))) - Assert.assertEquals(Point(20, 45), v.region(Point(24, 48))) - Assert.assertEquals(Point(26, 1), v.region(Point(26, 0))) - Assert.assertEquals(Point(26, 1), v.region(Point(26, 2))) - Assert.assertEquals(Point(26, 1), v.region(Point(26, 4))) - Assert.assertEquals(Point(24, 10), v.region(Point(26, 6))) - Assert.assertEquals(Point(24, 10), v.region(Point(26, 8))) - Assert.assertEquals(Point(24, 10), v.region(Point(26, 10))) - Assert.assertEquals(Point(24, 10), v.region(Point(26, 12))) - Assert.assertEquals(Point(23, 12), v.region(Point(26, 14))) - Assert.assertEquals(Point(27, 20), v.region(Point(26, 16))) - Assert.assertEquals(Point(27, 20), v.region(Point(26, 18))) - Assert.assertEquals(Point(27, 20), v.region(Point(26, 20))) - Assert.assertEquals(Point(27, 20), v.region(Point(26, 22))) - Assert.assertEquals(Point(23, 25), v.region(Point(26, 24))) - Assert.assertEquals(Point(23, 25), v.region(Point(26, 26))) - Assert.assertEquals(Point(23, 25), v.region(Point(26, 28))) - Assert.assertEquals(Point(29, 35), v.region(Point(26, 30))) - Assert.assertEquals(Point(29, 35), v.region(Point(26, 32))) - Assert.assertEquals(Point(29, 35), v.region(Point(26, 34))) - Assert.assertEquals(Point(29, 35), v.region(Point(26, 36))) - Assert.assertEquals(Point(29, 39), v.region(Point(26, 38))) - Assert.assertEquals(Point(29, 39), v.region(Point(26, 40))) - Assert.assertEquals(Point(29, 39), v.region(Point(26, 42))) - Assert.assertEquals(Point(29, 39), v.region(Point(26, 44))) - Assert.assertEquals(Point(20, 45), v.region(Point(26, 46))) - Assert.assertEquals(Point(20, 45), v.region(Point(26, 48))) - Assert.assertEquals(Point(26, 1), v.region(Point(28, 0))) - Assert.assertEquals(Point(26, 1), v.region(Point(28, 2))) - Assert.assertEquals(Point(26, 1), v.region(Point(28, 4))) - Assert.assertEquals(Point(32, 9), v.region(Point(28, 6))) - Assert.assertEquals(Point(32, 9), v.region(Point(28, 8))) - Assert.assertEquals(Point(24, 10), v.region(Point(28, 10))) - Assert.assertEquals(Point(24, 10), v.region(Point(28, 12))) - Assert.assertEquals(Point(23, 12), v.region(Point(28, 14))) - Assert.assertEquals(Point(29, 20), v.region(Point(28, 16))) - Assert.assertEquals(Point(29, 20), v.region(Point(28, 18))) - Assert.assertEquals(Point(29, 20), v.region(Point(28, 20))) - Assert.assertEquals(Point(29, 20), v.region(Point(28, 22))) - Assert.assertEquals(Point(29, 20), v.region(Point(28, 24))) - Assert.assertEquals(Point(23, 25), v.region(Point(28, 26))) - Assert.assertEquals(Point(23, 25), v.region(Point(28, 28))) - Assert.assertEquals(Point(29, 35), v.region(Point(28, 30))) - Assert.assertEquals(Point(29, 35), v.region(Point(28, 32))) - Assert.assertEquals(Point(29, 35), v.region(Point(28, 34))) - Assert.assertEquals(Point(29, 35), v.region(Point(28, 36))) - Assert.assertEquals(Point(29, 39), v.region(Point(28, 38))) - Assert.assertEquals(Point(29, 39), v.region(Point(28, 40))) - Assert.assertEquals(Point(29, 39), v.region(Point(28, 42))) - Assert.assertEquals(Point(32, 41), v.region(Point(28, 44))) - Assert.assertEquals(Point(32, 41), v.region(Point(28, 46))) - Assert.assertEquals(Point(32, 41), v.region(Point(28, 48))) - Assert.assertEquals(Point(26, 1), v.region(Point(30, 0))) - Assert.assertEquals(Point(26, 1), v.region(Point(30, 2))) - Assert.assertEquals(Point(26, 1), v.region(Point(30, 4))) - Assert.assertEquals(Point(32, 9), v.region(Point(30, 6))) - Assert.assertEquals(Point(32, 9), v.region(Point(30, 8))) - Assert.assertEquals(Point(32, 9), v.region(Point(30, 10))) - Assert.assertEquals(Point(32, 9), v.region(Point(30, 12))) - Assert.assertEquals(Point(32, 9), v.region(Point(30, 14))) - Assert.assertEquals(Point(29, 20), v.region(Point(30, 16))) - Assert.assertEquals(Point(29, 20), v.region(Point(30, 18))) - Assert.assertEquals(Point(29, 20), v.region(Point(30, 20))) - Assert.assertEquals(Point(29, 20), v.region(Point(30, 22))) - Assert.assertEquals(Point(29, 20), v.region(Point(30, 24))) - Assert.assertEquals(Point(29, 20), v.region(Point(30, 26))) - Assert.assertEquals(Point(29, 35), v.region(Point(30, 28))) - Assert.assertEquals(Point(29, 35), v.region(Point(30, 30))) - Assert.assertEquals(Point(29, 35), v.region(Point(30, 32))) - Assert.assertEquals(Point(29, 35), v.region(Point(30, 34))) - Assert.assertEquals(Point(29, 35), v.region(Point(30, 36))) - Assert.assertEquals(Point(29, 39), v.region(Point(30, 38))) - Assert.assertEquals(Point(29, 39), v.region(Point(30, 40))) - Assert.assertEquals(Point(32, 41), v.region(Point(30, 42))) - Assert.assertEquals(Point(32, 41), v.region(Point(30, 44))) - Assert.assertEquals(Point(32, 41), v.region(Point(30, 46))) - Assert.assertEquals(Point(32, 41), v.region(Point(30, 48))) - Assert.assertEquals(Point(26, 1), v.region(Point(32, 0))) - Assert.assertEquals(Point(26, 1), v.region(Point(32, 2))) - Assert.assertEquals(Point(32, 9), v.region(Point(32, 4))) - Assert.assertEquals(Point(32, 9), v.region(Point(32, 6))) - Assert.assertEquals(Point(32, 9), v.region(Point(32, 8))) - Assert.assertEquals(Point(32, 9), v.region(Point(32, 10))) - Assert.assertEquals(Point(32, 9), v.region(Point(32, 12))) - Assert.assertEquals(Point(32, 9), v.region(Point(32, 14))) - Assert.assertEquals(Point(29, 20), v.region(Point(32, 16))) - Assert.assertEquals(Point(29, 20), v.region(Point(32, 18))) - Assert.assertEquals(Point(34, 21), v.region(Point(32, 20))) - Assert.assertEquals(Point(34, 21), v.region(Point(32, 22))) - Assert.assertEquals(Point(34, 21), v.region(Point(32, 24))) - Assert.assertEquals(Point(34, 21), v.region(Point(32, 26))) - Assert.assertEquals(Point(34, 21), v.region(Point(32, 28))) - Assert.assertEquals(Point(29, 35), v.region(Point(32, 30))) - Assert.assertEquals(Point(29, 35), v.region(Point(32, 32))) - Assert.assertEquals(Point(29, 35), v.region(Point(32, 34))) - Assert.assertEquals(Point(29, 35), v.region(Point(32, 36))) - Assert.assertEquals(Point(32, 41), v.region(Point(32, 38))) - Assert.assertEquals(Point(32, 41), v.region(Point(32, 40))) - Assert.assertEquals(Point(32, 41), v.region(Point(32, 42))) - Assert.assertEquals(Point(32, 41), v.region(Point(32, 44))) - Assert.assertEquals(Point(32, 41), v.region(Point(32, 46))) - Assert.assertEquals(Point(32, 41), v.region(Point(32, 48))) - Assert.assertEquals(Point(41, 4), v.region(Point(34, 0))) - Assert.assertEquals(Point(32, 9), v.region(Point(34, 2))) - Assert.assertEquals(Point(32, 9), v.region(Point(34, 4))) - Assert.assertEquals(Point(32, 9), v.region(Point(34, 6))) - Assert.assertEquals(Point(32, 9), v.region(Point(34, 8))) - Assert.assertEquals(Point(32, 9), v.region(Point(34, 10))) - Assert.assertEquals(Point(36, 11), v.region(Point(34, 12))) - Assert.assertEquals(Point(36, 11), v.region(Point(34, 14))) - Assert.assertEquals(Point(34, 21), v.region(Point(34, 16))) - Assert.assertEquals(Point(34, 21), v.region(Point(34, 18))) - Assert.assertEquals(Point(34, 21), v.region(Point(34, 20))) - Assert.assertEquals(Point(34, 21), v.region(Point(34, 22))) - Assert.assertEquals(Point(34, 21), v.region(Point(34, 24))) - Assert.assertEquals(Point(34, 21), v.region(Point(34, 26))) - Assert.assertEquals(Point(40, 28), v.region(Point(34, 28))) - Assert.assertEquals(Point(37, 34), v.region(Point(34, 30))) - Assert.assertEquals(Point(37, 34), v.region(Point(34, 32))) - Assert.assertEquals(Point(37, 34), v.region(Point(34, 34))) - Assert.assertEquals(Point(37, 34), v.region(Point(34, 36))) - Assert.assertEquals(Point(37, 39), v.region(Point(34, 38))) - Assert.assertEquals(Point(32, 41), v.region(Point(34, 40))) - Assert.assertEquals(Point(32, 41), v.region(Point(34, 42))) - Assert.assertEquals(Point(32, 41), v.region(Point(34, 44))) - Assert.assertEquals(Point(32, 41), v.region(Point(34, 46))) - Assert.assertEquals(Point(32, 41), v.region(Point(34, 48))) - Assert.assertEquals(Point(41, 4), v.region(Point(36, 0))) - Assert.assertEquals(Point(41, 4), v.region(Point(36, 2))) - Assert.assertEquals(Point(41, 4), v.region(Point(36, 4))) - Assert.assertEquals(Point(32, 9), v.region(Point(36, 6))) - Assert.assertEquals(Point(36, 11), v.region(Point(36, 8))) - Assert.assertEquals(Point(36, 11), v.region(Point(36, 10))) - Assert.assertEquals(Point(36, 11), v.region(Point(36, 12))) - Assert.assertEquals(Point(36, 11), v.region(Point(36, 14))) - Assert.assertEquals(Point(39, 15), v.region(Point(36, 16))) - Assert.assertEquals(Point(34, 21), v.region(Point(36, 18))) - Assert.assertEquals(Point(34, 21), v.region(Point(36, 20))) - Assert.assertEquals(Point(34, 21), v.region(Point(36, 22))) - Assert.assertEquals(Point(34, 21), v.region(Point(36, 24))) - Assert.assertEquals(Point(40, 26), v.region(Point(36, 26))) - Assert.assertEquals(Point(40, 28), v.region(Point(36, 28))) - Assert.assertEquals(Point(37, 34), v.region(Point(36, 30))) - Assert.assertEquals(Point(37, 34), v.region(Point(36, 32))) - Assert.assertEquals(Point(37, 34), v.region(Point(36, 34))) - Assert.assertEquals(Point(37, 34), v.region(Point(36, 36))) - Assert.assertEquals(Point(37, 39), v.region(Point(36, 38))) - Assert.assertEquals(Point(37, 39), v.region(Point(36, 40))) - Assert.assertEquals(Point(37, 39), v.region(Point(36, 42))) - Assert.assertEquals(Point(32, 41), v.region(Point(36, 44))) - Assert.assertEquals(Point(32, 41), v.region(Point(36, 46))) - Assert.assertEquals(Point(32, 41), v.region(Point(36, 48))) - Assert.assertEquals(Point(41, 4), v.region(Point(38, 0))) - Assert.assertEquals(Point(41, 4), v.region(Point(38, 2))) - Assert.assertEquals(Point(41, 4), v.region(Point(38, 4))) - Assert.assertEquals(Point(41, 4), v.region(Point(38, 6))) - Assert.assertEquals(Point(36, 11), v.region(Point(38, 8))) - Assert.assertEquals(Point(36, 11), v.region(Point(38, 10))) - Assert.assertEquals(Point(36, 11), v.region(Point(38, 12))) - Assert.assertEquals(Point(39, 15), v.region(Point(38, 14))) - Assert.assertEquals(Point(39, 15), v.region(Point(38, 16))) - Assert.assertEquals(Point(39, 15), v.region(Point(38, 18))) - Assert.assertEquals(Point(34, 21), v.region(Point(38, 20))) - Assert.assertEquals(Point(34, 21), v.region(Point(38, 22))) - Assert.assertEquals(Point(40, 26), v.region(Point(38, 24))) - Assert.assertEquals(Point(40, 26), v.region(Point(38, 26))) - Assert.assertEquals(Point(40, 28), v.region(Point(38, 28))) - Assert.assertEquals(Point(40, 28), v.region(Point(38, 30))) - Assert.assertEquals(Point(37, 34), v.region(Point(38, 32))) - Assert.assertEquals(Point(37, 34), v.region(Point(38, 34))) - Assert.assertEquals(Point(37, 34), v.region(Point(38, 36))) - Assert.assertEquals(Point(37, 39), v.region(Point(38, 38))) - Assert.assertEquals(Point(37, 39), v.region(Point(38, 40))) - Assert.assertEquals(Point(37, 39), v.region(Point(38, 42))) - Assert.assertEquals(Point(37, 39), v.region(Point(38, 44))) - Assert.assertEquals(Point(37, 39), v.region(Point(38, 46))) - Assert.assertEquals(Point(44, 42), v.region(Point(38, 48))) - Assert.assertEquals(Point(41, 4), v.region(Point(40, 0))) - Assert.assertEquals(Point(41, 4), v.region(Point(40, 2))) - Assert.assertEquals(Point(41, 4), v.region(Point(40, 4))) - Assert.assertEquals(Point(41, 4), v.region(Point(40, 6))) - Assert.assertEquals(Point(42, 9), v.region(Point(40, 8))) - Assert.assertEquals(Point(42, 9), v.region(Point(40, 10))) - Assert.assertEquals(Point(39, 15), v.region(Point(40, 12))) - Assert.assertEquals(Point(39, 15), v.region(Point(40, 14))) - Assert.assertEquals(Point(39, 15), v.region(Point(40, 16))) - Assert.assertEquals(Point(39, 15), v.region(Point(40, 18))) - Assert.assertEquals(Point(39, 15), v.region(Point(40, 20))) - Assert.assertEquals(Point(40, 26), v.region(Point(40, 22))) - Assert.assertEquals(Point(40, 26), v.region(Point(40, 24))) - Assert.assertEquals(Point(40, 26), v.region(Point(40, 26))) - Assert.assertEquals(Point(40, 28), v.region(Point(40, 28))) - Assert.assertEquals(Point(40, 28), v.region(Point(40, 30))) - Assert.assertEquals(Point(41, 34), v.region(Point(40, 32))) - Assert.assertEquals(Point(41, 34), v.region(Point(40, 34))) - Assert.assertEquals(Point(42, 36), v.region(Point(40, 36))) - Assert.assertEquals(Point(42, 36), v.region(Point(40, 38))) - Assert.assertEquals(Point(37, 39), v.region(Point(40, 40))) - Assert.assertEquals(Point(44, 42), v.region(Point(40, 42))) - Assert.assertEquals(Point(44, 42), v.region(Point(40, 44))) - Assert.assertEquals(Point(44, 42), v.region(Point(40, 46))) - Assert.assertEquals(Point(44, 42), v.region(Point(40, 48))) - Assert.assertEquals(Point(41, 4), v.region(Point(42, 0))) - Assert.assertEquals(Point(41, 4), v.region(Point(42, 2))) - Assert.assertEquals(Point(41, 4), v.region(Point(42, 4))) - Assert.assertEquals(Point(41, 4), v.region(Point(42, 6))) - Assert.assertEquals(Point(42, 9), v.region(Point(42, 8))) - Assert.assertEquals(Point(42, 9), v.region(Point(42, 10))) - Assert.assertEquals(Point(42, 9), v.region(Point(42, 12))) - Assert.assertEquals(Point(39, 15), v.region(Point(42, 14))) - Assert.assertEquals(Point(39, 15), v.region(Point(42, 16))) - Assert.assertEquals(Point(39, 15), v.region(Point(42, 18))) - Assert.assertEquals(Point(45, 25), v.region(Point(42, 20))) - Assert.assertEquals(Point(45, 25), v.region(Point(42, 22))) - Assert.assertEquals(Point(40, 26), v.region(Point(42, 24))) - Assert.assertEquals(Point(40, 26), v.region(Point(42, 26))) - Assert.assertEquals(Point(40, 28), v.region(Point(42, 28))) - Assert.assertEquals(Point(43, 30), v.region(Point(42, 30))) - Assert.assertEquals(Point(41, 34), v.region(Point(42, 32))) - Assert.assertEquals(Point(41, 34), v.region(Point(42, 34))) - Assert.assertEquals(Point(42, 36), v.region(Point(42, 36))) - Assert.assertEquals(Point(42, 36), v.region(Point(42, 38))) - Assert.assertEquals(Point(44, 42), v.region(Point(42, 40))) - Assert.assertEquals(Point(44, 42), v.region(Point(42, 42))) - Assert.assertEquals(Point(44, 42), v.region(Point(42, 44))) - Assert.assertEquals(Point(44, 42), v.region(Point(42, 46))) - Assert.assertEquals(Point(44, 42), v.region(Point(42, 48))) - Assert.assertEquals(Point(41, 4), v.region(Point(44, 0))) - Assert.assertEquals(Point(41, 4), v.region(Point(44, 2))) - Assert.assertEquals(Point(41, 4), v.region(Point(44, 4))) - Assert.assertEquals(Point(47, 7), v.region(Point(44, 6))) - Assert.assertEquals(Point(42, 9), v.region(Point(44, 8))) - Assert.assertEquals(Point(42, 9), v.region(Point(44, 10))) - Assert.assertEquals(Point(42, 9), v.region(Point(44, 12))) - Assert.assertEquals(Point(39, 15), v.region(Point(44, 14))) - Assert.assertEquals(Point(39, 15), v.region(Point(44, 16))) - Assert.assertEquals(Point(39, 15), v.region(Point(44, 18))) - Assert.assertEquals(Point(45, 25), v.region(Point(44, 20))) - Assert.assertEquals(Point(45, 25), v.region(Point(44, 22))) - Assert.assertEquals(Point(45, 25), v.region(Point(44, 24))) - Assert.assertEquals(Point(44, 27), v.region(Point(44, 26))) - Assert.assertEquals(Point(44, 27), v.region(Point(44, 28))) - Assert.assertEquals(Point(43, 30), v.region(Point(44, 30))) - Assert.assertEquals(Point(43, 30), v.region(Point(44, 32))) - Assert.assertEquals(Point(42, 36), v.region(Point(44, 34))) - Assert.assertEquals(Point(42, 36), v.region(Point(44, 36))) - Assert.assertEquals(Point(42, 36), v.region(Point(44, 38))) - Assert.assertEquals(Point(44, 42), v.region(Point(44, 40))) - Assert.assertEquals(Point(44, 42), v.region(Point(44, 42))) - Assert.assertEquals(Point(44, 42), v.region(Point(44, 44))) - Assert.assertEquals(Point(44, 42), v.region(Point(44, 46))) - Assert.assertEquals(Point(44, 42), v.region(Point(44, 48))) - Assert.assertEquals(Point(41, 4), v.region(Point(46, 0))) - Assert.assertEquals(Point(47, 7), v.region(Point(46, 2))) - Assert.assertEquals(Point(47, 7), v.region(Point(46, 4))) - Assert.assertEquals(Point(47, 7), v.region(Point(46, 6))) - Assert.assertEquals(Point(47, 7), v.region(Point(46, 8))) - Assert.assertEquals(Point(47, 7), v.region(Point(46, 10))) - Assert.assertEquals(Point(42, 9), v.region(Point(46, 12))) - Assert.assertEquals(Point(42, 9), v.region(Point(46, 14))) - Assert.assertEquals(Point(39, 15), v.region(Point(46, 16))) - Assert.assertEquals(Point(45, 25), v.region(Point(46, 18))) - Assert.assertEquals(Point(45, 25), v.region(Point(46, 20))) - Assert.assertEquals(Point(45, 25), v.region(Point(46, 22))) - Assert.assertEquals(Point(45, 25), v.region(Point(46, 24))) - Assert.assertEquals(Point(45, 25), v.region(Point(46, 26))) - Assert.assertEquals(Point(47, 27), v.region(Point(46, 28))) - Assert.assertEquals(Point(43, 30), v.region(Point(46, 30))) - Assert.assertEquals(Point(43, 30), v.region(Point(46, 32))) - Assert.assertEquals(Point(42, 36), v.region(Point(46, 34))) - Assert.assertEquals(Point(42, 36), v.region(Point(46, 36))) - Assert.assertEquals(Point(44, 42), v.region(Point(46, 38))) - Assert.assertEquals(Point(44, 42), v.region(Point(46, 40))) - Assert.assertEquals(Point(44, 42), v.region(Point(46, 42))) - Assert.assertEquals(Point(44, 42), v.region(Point(46, 44))) - Assert.assertEquals(Point(44, 42), v.region(Point(46, 46))) - Assert.assertEquals(Point(44, 42), v.region(Point(46, 48))) - Assert.assertEquals(Point(47, 7), v.region(Point(48, 0))) - Assert.assertEquals(Point(47, 7), v.region(Point(48, 2))) - Assert.assertEquals(Point(47, 7), v.region(Point(48, 4))) - Assert.assertEquals(Point(47, 7), v.region(Point(48, 6))) - Assert.assertEquals(Point(47, 7), v.region(Point(48, 8))) - Assert.assertEquals(Point(47, 7), v.region(Point(48, 10))) - Assert.assertEquals(Point(47, 7), v.region(Point(48, 12))) - Assert.assertEquals(Point(47, 7), v.region(Point(48, 14))) - Assert.assertEquals(Point(39, 15), v.region(Point(48, 16))) - Assert.assertEquals(Point(45, 25), v.region(Point(48, 18))) - Assert.assertEquals(Point(45, 25), v.region(Point(48, 20))) - Assert.assertEquals(Point(45, 25), v.region(Point(48, 22))) - Assert.assertEquals(Point(45, 25), v.region(Point(48, 24))) - Assert.assertEquals(Point(47, 27), v.region(Point(48, 26))) - Assert.assertEquals(Point(47, 27), v.region(Point(48, 28))) - Assert.assertEquals(Point(47, 27), v.region(Point(48, 30))) - Assert.assertEquals(Point(47, 27), v.region(Point(48, 32))) - Assert.assertEquals(Point(42, 36), v.region(Point(48, 34))) - Assert.assertEquals(Point(42, 36), v.region(Point(48, 36))) - Assert.assertEquals(Point(44, 42), v.region(Point(48, 38))) - Assert.assertEquals(Point(44, 42), v.region(Point(48, 40))) - Assert.assertEquals(Point(44, 42), v.region(Point(48, 42))) - Assert.assertEquals(Point(44, 42), v.region(Point(48, 44))) - Assert.assertEquals(Point(44, 42), v.region(Point(48, 46))) - Assert.assertEquals(Point(44, 42), v.region(Point(48, 48))) + assertEquals(50, v.count) + assertEquals(Point(6, 5), v.region(Point(0, 0))) + assertEquals(Point(6, 5), v.region(Point(0, 2))) + assertEquals(Point(6, 5), v.region(Point(0, 4))) + assertEquals(Point(6, 5), v.region(Point(0, 6))) + assertEquals(Point(6, 5), v.region(Point(0, 8))) + assertEquals(Point(6, 5), v.region(Point(0, 10))) + assertEquals(Point(7, 6), v.region(Point(0, 12))) + assertEquals(Point(2, 23), v.region(Point(0, 14))) + assertEquals(Point(2, 23), v.region(Point(0, 16))) + assertEquals(Point(2, 23), v.region(Point(0, 18))) + assertEquals(Point(2, 23), v.region(Point(0, 20))) + assertEquals(Point(2, 23), v.region(Point(0, 22))) + assertEquals(Point(2, 23), v.region(Point(0, 24))) + assertEquals(Point(2, 23), v.region(Point(0, 26))) + assertEquals(Point(2, 23), v.region(Point(0, 28))) + assertEquals(Point(2, 35), v.region(Point(0, 30))) + assertEquals(Point(2, 35), v.region(Point(0, 32))) + assertEquals(Point(2, 35), v.region(Point(0, 34))) + assertEquals(Point(2, 35), v.region(Point(0, 36))) + assertEquals(Point(1, 40), v.region(Point(0, 38))) + assertEquals(Point(1, 40), v.region(Point(0, 40))) + assertEquals(Point(1, 40), v.region(Point(0, 42))) + assertEquals(Point(1, 40), v.region(Point(0, 44))) + assertEquals(Point(1, 40), v.region(Point(0, 46))) + assertEquals(Point(5, 42), v.region(Point(0, 48))) + assertEquals(Point(6, 5), v.region(Point(2, 0))) + assertEquals(Point(6, 5), v.region(Point(2, 2))) + assertEquals(Point(6, 5), v.region(Point(2, 4))) + assertEquals(Point(6, 5), v.region(Point(2, 6))) + assertEquals(Point(6, 5), v.region(Point(2, 8))) + assertEquals(Point(7, 6), v.region(Point(2, 10))) + assertEquals(Point(7, 6), v.region(Point(2, 12))) + assertEquals(Point(8, 19), v.region(Point(2, 14))) + assertEquals(Point(8, 19), v.region(Point(2, 16))) + assertEquals(Point(2, 23), v.region(Point(2, 18))) + assertEquals(Point(2, 23), v.region(Point(2, 20))) + assertEquals(Point(2, 23), v.region(Point(2, 22))) + assertEquals(Point(2, 23), v.region(Point(2, 24))) + assertEquals(Point(2, 23), v.region(Point(2, 26))) + assertEquals(Point(2, 23), v.region(Point(2, 28))) + assertEquals(Point(2, 35), v.region(Point(2, 30))) + assertEquals(Point(2, 35), v.region(Point(2, 32))) + assertEquals(Point(2, 35), v.region(Point(2, 34))) + assertEquals(Point(2, 35), v.region(Point(2, 36))) + assertEquals(Point(1, 40), v.region(Point(2, 38))) + assertEquals(Point(1, 40), v.region(Point(2, 40))) + assertEquals(Point(1, 40), v.region(Point(2, 42))) + assertEquals(Point(5, 42), v.region(Point(2, 44))) + assertEquals(Point(5, 42), v.region(Point(2, 46))) + assertEquals(Point(5, 42), v.region(Point(2, 48))) + assertEquals(Point(6, 5), v.region(Point(4, 0))) + assertEquals(Point(6, 5), v.region(Point(4, 2))) + assertEquals(Point(6, 5), v.region(Point(4, 4))) + assertEquals(Point(6, 5), v.region(Point(4, 6))) + assertEquals(Point(7, 6), v.region(Point(4, 8))) + assertEquals(Point(7, 6), v.region(Point(4, 10))) + assertEquals(Point(10, 12), v.region(Point(4, 12))) + assertEquals(Point(10, 12), v.region(Point(4, 14))) + assertEquals(Point(8, 19), v.region(Point(4, 16))) + assertEquals(Point(8, 19), v.region(Point(4, 18))) + assertEquals(Point(2, 23), v.region(Point(4, 20))) + assertEquals(Point(2, 23), v.region(Point(4, 22))) + assertEquals(Point(2, 23), v.region(Point(4, 24))) + assertEquals(Point(2, 23), v.region(Point(4, 26))) + assertEquals(Point(7, 31), v.region(Point(4, 28))) + assertEquals(Point(7, 31), v.region(Point(4, 30))) + assertEquals(Point(7, 31), v.region(Point(4, 32))) + assertEquals(Point(4, 36), v.region(Point(4, 34))) + assertEquals(Point(4, 36), v.region(Point(4, 36))) + assertEquals(Point(4, 36), v.region(Point(4, 38))) + assertEquals(Point(5, 42), v.region(Point(4, 40))) + assertEquals(Point(5, 42), v.region(Point(4, 42))) + assertEquals(Point(5, 42), v.region(Point(4, 44))) + assertEquals(Point(5, 42), v.region(Point(4, 46))) + assertEquals(Point(5, 42), v.region(Point(4, 48))) + assertEquals(Point(6, 5), v.region(Point(6, 0))) + assertEquals(Point(6, 5), v.region(Point(6, 2))) + assertEquals(Point(6, 5), v.region(Point(6, 4))) + assertEquals(Point(7, 6), v.region(Point(6, 6))) + assertEquals(Point(7, 6), v.region(Point(6, 8))) + assertEquals(Point(7, 6), v.region(Point(6, 10))) + assertEquals(Point(10, 12), v.region(Point(6, 12))) + assertEquals(Point(10, 12), v.region(Point(6, 14))) + assertEquals(Point(8, 19), v.region(Point(6, 16))) + assertEquals(Point(8, 19), v.region(Point(6, 18))) + assertEquals(Point(8, 19), v.region(Point(6, 20))) + assertEquals(Point(8, 19), v.region(Point(6, 22))) + assertEquals(Point(2, 23), v.region(Point(6, 24))) + assertEquals(Point(2, 23), v.region(Point(6, 26))) + assertEquals(Point(7, 31), v.region(Point(6, 28))) + assertEquals(Point(7, 31), v.region(Point(6, 30))) + assertEquals(Point(7, 31), v.region(Point(6, 32))) + assertEquals(Point(6, 36), v.region(Point(6, 34))) + assertEquals(Point(6, 36), v.region(Point(6, 36))) + assertEquals(Point(6, 36), v.region(Point(6, 38))) + assertEquals(Point(5, 42), v.region(Point(6, 40))) + assertEquals(Point(5, 42), v.region(Point(6, 42))) + assertEquals(Point(5, 42), v.region(Point(6, 44))) + assertEquals(Point(5, 42), v.region(Point(6, 46))) + assertEquals(Point(12, 48), v.region(Point(6, 48))) + assertEquals(Point(6, 5), v.region(Point(8, 0))) + assertEquals(Point(6, 5), v.region(Point(8, 2))) + assertEquals(Point(7, 6), v.region(Point(8, 4))) + assertEquals(Point(7, 6), v.region(Point(8, 6))) + assertEquals(Point(7, 6), v.region(Point(8, 8))) + assertEquals(Point(10, 12), v.region(Point(8, 10))) + assertEquals(Point(10, 12), v.region(Point(8, 12))) + assertEquals(Point(10, 12), v.region(Point(8, 14))) + assertEquals(Point(8, 19), v.region(Point(8, 16))) + assertEquals(Point(8, 19), v.region(Point(8, 18))) + assertEquals(Point(8, 19), v.region(Point(8, 20))) + assertEquals(Point(8, 19), v.region(Point(8, 22))) + assertEquals(Point(8, 19), v.region(Point(8, 24))) + assertEquals(Point(7, 31), v.region(Point(8, 26))) + assertEquals(Point(7, 31), v.region(Point(8, 28))) + assertEquals(Point(7, 31), v.region(Point(8, 30))) + assertEquals(Point(7, 31), v.region(Point(8, 32))) + assertEquals(Point(6, 36), v.region(Point(8, 34))) + assertEquals(Point(6, 36), v.region(Point(8, 36))) + assertEquals(Point(6, 36), v.region(Point(8, 38))) + assertEquals(Point(10, 43), v.region(Point(8, 40))) + assertEquals(Point(10, 43), v.region(Point(8, 42))) + assertEquals(Point(10, 43), v.region(Point(8, 44))) + assertEquals(Point(10, 43), v.region(Point(8, 46))) + assertEquals(Point(12, 48), v.region(Point(8, 48))) + assertEquals(Point(11, 6), v.region(Point(10, 0))) + assertEquals(Point(11, 6), v.region(Point(10, 2))) + assertEquals(Point(11, 6), v.region(Point(10, 4))) + assertEquals(Point(11, 6), v.region(Point(10, 6))) + assertEquals(Point(11, 6), v.region(Point(10, 8))) + assertEquals(Point(10, 12), v.region(Point(10, 10))) + assertEquals(Point(10, 12), v.region(Point(10, 12))) + assertEquals(Point(10, 12), v.region(Point(10, 14))) + assertEquals(Point(8, 19), v.region(Point(10, 16))) + assertEquals(Point(8, 19), v.region(Point(10, 18))) + assertEquals(Point(8, 19), v.region(Point(10, 20))) + assertEquals(Point(13, 21), v.region(Point(10, 22))) + assertEquals(Point(13, 21), v.region(Point(10, 24))) + assertEquals(Point(7, 31), v.region(Point(10, 26))) + assertEquals(Point(11, 32), v.region(Point(10, 28))) + assertEquals(Point(11, 32), v.region(Point(10, 30))) + assertEquals(Point(11, 32), v.region(Point(10, 32))) + assertEquals(Point(11, 32), v.region(Point(10, 34))) + assertEquals(Point(6, 36), v.region(Point(10, 36))) + assertEquals(Point(6, 36), v.region(Point(10, 38))) + assertEquals(Point(10, 43), v.region(Point(10, 40))) + assertEquals(Point(10, 43), v.region(Point(10, 42))) + assertEquals(Point(10, 43), v.region(Point(10, 44))) + assertEquals(Point(12, 48), v.region(Point(10, 46))) + assertEquals(Point(12, 48), v.region(Point(10, 48))) + assertEquals(Point(11, 6), v.region(Point(12, 0))) + assertEquals(Point(11, 6), v.region(Point(12, 2))) + assertEquals(Point(11, 6), v.region(Point(12, 4))) + assertEquals(Point(11, 6), v.region(Point(12, 6))) + assertEquals(Point(11, 6), v.region(Point(12, 8))) + assertEquals(Point(10, 12), v.region(Point(12, 10))) + assertEquals(Point(10, 12), v.region(Point(12, 12))) + assertEquals(Point(10, 12), v.region(Point(12, 14))) + assertEquals(Point(15, 16), v.region(Point(12, 16))) + assertEquals(Point(13, 21), v.region(Point(12, 18))) + assertEquals(Point(13, 21), v.region(Point(12, 20))) + assertEquals(Point(13, 21), v.region(Point(12, 22))) + assertEquals(Point(13, 21), v.region(Point(12, 24))) + assertEquals(Point(13, 21), v.region(Point(12, 26))) + assertEquals(Point(11, 32), v.region(Point(12, 28))) + assertEquals(Point(11, 32), v.region(Point(12, 30))) + assertEquals(Point(11, 32), v.region(Point(12, 32))) + assertEquals(Point(11, 32), v.region(Point(12, 34))) + assertEquals(Point(11, 32), v.region(Point(12, 36))) + assertEquals(Point(15, 40), v.region(Point(12, 38))) + assertEquals(Point(15, 40), v.region(Point(12, 40))) + assertEquals(Point(10, 43), v.region(Point(12, 42))) + assertEquals(Point(10, 43), v.region(Point(12, 44))) + assertEquals(Point(12, 48), v.region(Point(12, 46))) + assertEquals(Point(12, 48), v.region(Point(12, 48))) + assertEquals(Point(20, 1), v.region(Point(14, 0))) + assertEquals(Point(11, 6), v.region(Point(14, 2))) + assertEquals(Point(11, 6), v.region(Point(14, 4))) + assertEquals(Point(11, 6), v.region(Point(14, 6))) + assertEquals(Point(11, 6), v.region(Point(14, 8))) + assertEquals(Point(10, 12), v.region(Point(14, 10))) + assertEquals(Point(10, 12), v.region(Point(14, 12))) + assertEquals(Point(15, 16), v.region(Point(14, 14))) + assertEquals(Point(15, 16), v.region(Point(14, 16))) + assertEquals(Point(15, 16), v.region(Point(14, 18))) + assertEquals(Point(13, 21), v.region(Point(14, 20))) + assertEquals(Point(13, 21), v.region(Point(14, 22))) + assertEquals(Point(13, 21), v.region(Point(14, 24))) + assertEquals(Point(13, 21), v.region(Point(14, 26))) + assertEquals(Point(11, 32), v.region(Point(14, 28))) + assertEquals(Point(11, 32), v.region(Point(14, 30))) + assertEquals(Point(11, 32), v.region(Point(14, 32))) + assertEquals(Point(11, 32), v.region(Point(14, 34))) + assertEquals(Point(16, 38), v.region(Point(14, 36))) + assertEquals(Point(16, 38), v.region(Point(14, 38))) + assertEquals(Point(15, 40), v.region(Point(14, 40))) + assertEquals(Point(15, 40), v.region(Point(14, 42))) + assertEquals(Point(10, 43), v.region(Point(14, 44))) + assertEquals(Point(12, 48), v.region(Point(14, 46))) + assertEquals(Point(12, 48), v.region(Point(14, 48))) + assertEquals(Point(20, 1), v.region(Point(16, 0))) + assertEquals(Point(20, 1), v.region(Point(16, 2))) + assertEquals(Point(20, 1), v.region(Point(16, 4))) + assertEquals(Point(11, 6), v.region(Point(16, 6))) + assertEquals(Point(11, 6), v.region(Point(16, 8))) + assertEquals(Point(15, 16), v.region(Point(16, 10))) + assertEquals(Point(15, 16), v.region(Point(16, 12))) + assertEquals(Point(15, 16), v.region(Point(16, 14))) + assertEquals(Point(15, 16), v.region(Point(16, 16))) + assertEquals(Point(15, 16), v.region(Point(16, 18))) + assertEquals(Point(13, 21), v.region(Point(16, 20))) + assertEquals(Point(13, 21), v.region(Point(16, 22))) + assertEquals(Point(13, 21), v.region(Point(16, 24))) + assertEquals(Point(13, 21), v.region(Point(16, 26))) + assertEquals(Point(11, 32), v.region(Point(16, 28))) + assertEquals(Point(11, 32), v.region(Point(16, 30))) + assertEquals(Point(11, 32), v.region(Point(16, 32))) + assertEquals(Point(16, 38), v.region(Point(16, 34))) + assertEquals(Point(16, 38), v.region(Point(16, 36))) + assertEquals(Point(16, 38), v.region(Point(16, 38))) + assertEquals(Point(17, 40), v.region(Point(16, 40))) + assertEquals(Point(17, 40), v.region(Point(16, 42))) + assertEquals(Point(17, 40), v.region(Point(16, 44))) + assertEquals(Point(20, 45), v.region(Point(16, 46))) + assertEquals(Point(12, 48), v.region(Point(16, 48))) + assertEquals(Point(20, 1), v.region(Point(18, 0))) + assertEquals(Point(20, 1), v.region(Point(18, 2))) + assertEquals(Point(20, 1), v.region(Point(18, 4))) + assertEquals(Point(20, 1), v.region(Point(18, 6))) + assertEquals(Point(24, 10), v.region(Point(18, 8))) + assertEquals(Point(23, 12), v.region(Point(18, 10))) + assertEquals(Point(15, 16), v.region(Point(18, 12))) + assertEquals(Point(15, 16), v.region(Point(18, 14))) + assertEquals(Point(15, 16), v.region(Point(18, 16))) + assertEquals(Point(15, 16), v.region(Point(18, 18))) + assertEquals(Point(15, 16), v.region(Point(18, 20))) + assertEquals(Point(13, 21), v.region(Point(18, 22))) + assertEquals(Point(23, 25), v.region(Point(18, 24))) + assertEquals(Point(23, 25), v.region(Point(18, 26))) + assertEquals(Point(23, 25), v.region(Point(18, 28))) + assertEquals(Point(23, 25), v.region(Point(18, 30))) + assertEquals(Point(16, 38), v.region(Point(18, 32))) + assertEquals(Point(16, 38), v.region(Point(18, 34))) + assertEquals(Point(16, 38), v.region(Point(18, 36))) + assertEquals(Point(16, 38), v.region(Point(18, 38))) + assertEquals(Point(17, 40), v.region(Point(18, 40))) + assertEquals(Point(17, 40), v.region(Point(18, 42))) + assertEquals(Point(20, 45), v.region(Point(18, 44))) + assertEquals(Point(20, 45), v.region(Point(18, 46))) + assertEquals(Point(20, 45), v.region(Point(18, 48))) + assertEquals(Point(20, 1), v.region(Point(20, 0))) + assertEquals(Point(20, 1), v.region(Point(20, 2))) + assertEquals(Point(20, 1), v.region(Point(20, 4))) + assertEquals(Point(20, 1), v.region(Point(20, 6))) + assertEquals(Point(24, 10), v.region(Point(20, 8))) + assertEquals(Point(23, 12), v.region(Point(20, 10))) + assertEquals(Point(23, 12), v.region(Point(20, 12))) + assertEquals(Point(23, 12), v.region(Point(20, 14))) + assertEquals(Point(15, 16), v.region(Point(20, 16))) + assertEquals(Point(15, 16), v.region(Point(20, 18))) + assertEquals(Point(23, 25), v.region(Point(20, 20))) + assertEquals(Point(23, 25), v.region(Point(20, 22))) + assertEquals(Point(23, 25), v.region(Point(20, 24))) + assertEquals(Point(23, 25), v.region(Point(20, 26))) + assertEquals(Point(23, 25), v.region(Point(20, 28))) + assertEquals(Point(23, 25), v.region(Point(20, 30))) + assertEquals(Point(16, 38), v.region(Point(20, 32))) + assertEquals(Point(16, 38), v.region(Point(20, 34))) + assertEquals(Point(16, 38), v.region(Point(20, 36))) + assertEquals(Point(17, 40), v.region(Point(20, 38))) + assertEquals(Point(17, 40), v.region(Point(20, 40))) + assertEquals(Point(20, 45), v.region(Point(20, 42))) + assertEquals(Point(20, 45), v.region(Point(20, 44))) + assertEquals(Point(20, 45), v.region(Point(20, 46))) + assertEquals(Point(20, 45), v.region(Point(20, 48))) + assertEquals(Point(20, 1), v.region(Point(22, 0))) + assertEquals(Point(20, 1), v.region(Point(22, 2))) + assertEquals(Point(20, 1), v.region(Point(22, 4))) + assertEquals(Point(24, 10), v.region(Point(22, 6))) + assertEquals(Point(24, 10), v.region(Point(22, 8))) + assertEquals(Point(24, 10), v.region(Point(22, 10))) + assertEquals(Point(23, 12), v.region(Point(22, 12))) + assertEquals(Point(23, 12), v.region(Point(22, 14))) + assertEquals(Point(23, 12), v.region(Point(22, 16))) + assertEquals(Point(27, 20), v.region(Point(22, 18))) + assertEquals(Point(27, 20), v.region(Point(22, 20))) + assertEquals(Point(23, 25), v.region(Point(22, 22))) + assertEquals(Point(23, 25), v.region(Point(22, 24))) + assertEquals(Point(23, 25), v.region(Point(22, 26))) + assertEquals(Point(23, 25), v.region(Point(22, 28))) + assertEquals(Point(23, 25), v.region(Point(22, 30))) + assertEquals(Point(23, 25), v.region(Point(22, 32))) + assertEquals(Point(29, 35), v.region(Point(22, 34))) + assertEquals(Point(16, 38), v.region(Point(22, 36))) + assertEquals(Point(17, 40), v.region(Point(22, 38))) + assertEquals(Point(17, 40), v.region(Point(22, 40))) + assertEquals(Point(20, 45), v.region(Point(22, 42))) + assertEquals(Point(20, 45), v.region(Point(22, 44))) + assertEquals(Point(20, 45), v.region(Point(22, 46))) + assertEquals(Point(20, 45), v.region(Point(22, 48))) + assertEquals(Point(26, 1), v.region(Point(24, 0))) + assertEquals(Point(26, 1), v.region(Point(24, 2))) + assertEquals(Point(26, 1), v.region(Point(24, 4))) + assertEquals(Point(24, 10), v.region(Point(24, 6))) + assertEquals(Point(24, 10), v.region(Point(24, 8))) + assertEquals(Point(24, 10), v.region(Point(24, 10))) + assertEquals(Point(23, 12), v.region(Point(24, 12))) + assertEquals(Point(23, 12), v.region(Point(24, 14))) + assertEquals(Point(23, 12), v.region(Point(24, 16))) + assertEquals(Point(27, 20), v.region(Point(24, 18))) + assertEquals(Point(27, 20), v.region(Point(24, 20))) + assertEquals(Point(23, 25), v.region(Point(24, 22))) + assertEquals(Point(23, 25), v.region(Point(24, 24))) + assertEquals(Point(23, 25), v.region(Point(24, 26))) + assertEquals(Point(23, 25), v.region(Point(24, 28))) + assertEquals(Point(23, 25), v.region(Point(24, 30))) + assertEquals(Point(29, 35), v.region(Point(24, 32))) + assertEquals(Point(29, 35), v.region(Point(24, 34))) + assertEquals(Point(29, 35), v.region(Point(24, 36))) + assertEquals(Point(29, 39), v.region(Point(24, 38))) + assertEquals(Point(29, 39), v.region(Point(24, 40))) + assertEquals(Point(20, 45), v.region(Point(24, 42))) + assertEquals(Point(20, 45), v.region(Point(24, 44))) + assertEquals(Point(20, 45), v.region(Point(24, 46))) + assertEquals(Point(20, 45), v.region(Point(24, 48))) + assertEquals(Point(26, 1), v.region(Point(26, 0))) + assertEquals(Point(26, 1), v.region(Point(26, 2))) + assertEquals(Point(26, 1), v.region(Point(26, 4))) + assertEquals(Point(24, 10), v.region(Point(26, 6))) + assertEquals(Point(24, 10), v.region(Point(26, 8))) + assertEquals(Point(24, 10), v.region(Point(26, 10))) + assertEquals(Point(24, 10), v.region(Point(26, 12))) + assertEquals(Point(23, 12), v.region(Point(26, 14))) + assertEquals(Point(27, 20), v.region(Point(26, 16))) + assertEquals(Point(27, 20), v.region(Point(26, 18))) + assertEquals(Point(27, 20), v.region(Point(26, 20))) + assertEquals(Point(27, 20), v.region(Point(26, 22))) + assertEquals(Point(23, 25), v.region(Point(26, 24))) + assertEquals(Point(23, 25), v.region(Point(26, 26))) + assertEquals(Point(23, 25), v.region(Point(26, 28))) + assertEquals(Point(29, 35), v.region(Point(26, 30))) + assertEquals(Point(29, 35), v.region(Point(26, 32))) + assertEquals(Point(29, 35), v.region(Point(26, 34))) + assertEquals(Point(29, 35), v.region(Point(26, 36))) + assertEquals(Point(29, 39), v.region(Point(26, 38))) + assertEquals(Point(29, 39), v.region(Point(26, 40))) + assertEquals(Point(29, 39), v.region(Point(26, 42))) + assertEquals(Point(29, 39), v.region(Point(26, 44))) + assertEquals(Point(20, 45), v.region(Point(26, 46))) + assertEquals(Point(20, 45), v.region(Point(26, 48))) + assertEquals(Point(26, 1), v.region(Point(28, 0))) + assertEquals(Point(26, 1), v.region(Point(28, 2))) + assertEquals(Point(26, 1), v.region(Point(28, 4))) + assertEquals(Point(32, 9), v.region(Point(28, 6))) + assertEquals(Point(32, 9), v.region(Point(28, 8))) + assertEquals(Point(24, 10), v.region(Point(28, 10))) + assertEquals(Point(24, 10), v.region(Point(28, 12))) + assertEquals(Point(23, 12), v.region(Point(28, 14))) + assertEquals(Point(29, 20), v.region(Point(28, 16))) + assertEquals(Point(29, 20), v.region(Point(28, 18))) + assertEquals(Point(29, 20), v.region(Point(28, 20))) + assertEquals(Point(29, 20), v.region(Point(28, 22))) + assertEquals(Point(29, 20), v.region(Point(28, 24))) + assertEquals(Point(23, 25), v.region(Point(28, 26))) + assertEquals(Point(23, 25), v.region(Point(28, 28))) + assertEquals(Point(29, 35), v.region(Point(28, 30))) + assertEquals(Point(29, 35), v.region(Point(28, 32))) + assertEquals(Point(29, 35), v.region(Point(28, 34))) + assertEquals(Point(29, 35), v.region(Point(28, 36))) + assertEquals(Point(29, 39), v.region(Point(28, 38))) + assertEquals(Point(29, 39), v.region(Point(28, 40))) + assertEquals(Point(29, 39), v.region(Point(28, 42))) + assertEquals(Point(32, 41), v.region(Point(28, 44))) + assertEquals(Point(32, 41), v.region(Point(28, 46))) + assertEquals(Point(32, 41), v.region(Point(28, 48))) + assertEquals(Point(26, 1), v.region(Point(30, 0))) + assertEquals(Point(26, 1), v.region(Point(30, 2))) + assertEquals(Point(26, 1), v.region(Point(30, 4))) + assertEquals(Point(32, 9), v.region(Point(30, 6))) + assertEquals(Point(32, 9), v.region(Point(30, 8))) + assertEquals(Point(32, 9), v.region(Point(30, 10))) + assertEquals(Point(32, 9), v.region(Point(30, 12))) + assertEquals(Point(32, 9), v.region(Point(30, 14))) + assertEquals(Point(29, 20), v.region(Point(30, 16))) + assertEquals(Point(29, 20), v.region(Point(30, 18))) + assertEquals(Point(29, 20), v.region(Point(30, 20))) + assertEquals(Point(29, 20), v.region(Point(30, 22))) + assertEquals(Point(29, 20), v.region(Point(30, 24))) + assertEquals(Point(29, 20), v.region(Point(30, 26))) + assertEquals(Point(29, 35), v.region(Point(30, 28))) + assertEquals(Point(29, 35), v.region(Point(30, 30))) + assertEquals(Point(29, 35), v.region(Point(30, 32))) + assertEquals(Point(29, 35), v.region(Point(30, 34))) + assertEquals(Point(29, 35), v.region(Point(30, 36))) + assertEquals(Point(29, 39), v.region(Point(30, 38))) + assertEquals(Point(29, 39), v.region(Point(30, 40))) + assertEquals(Point(32, 41), v.region(Point(30, 42))) + assertEquals(Point(32, 41), v.region(Point(30, 44))) + assertEquals(Point(32, 41), v.region(Point(30, 46))) + assertEquals(Point(32, 41), v.region(Point(30, 48))) + assertEquals(Point(26, 1), v.region(Point(32, 0))) + assertEquals(Point(26, 1), v.region(Point(32, 2))) + assertEquals(Point(32, 9), v.region(Point(32, 4))) + assertEquals(Point(32, 9), v.region(Point(32, 6))) + assertEquals(Point(32, 9), v.region(Point(32, 8))) + assertEquals(Point(32, 9), v.region(Point(32, 10))) + assertEquals(Point(32, 9), v.region(Point(32, 12))) + assertEquals(Point(32, 9), v.region(Point(32, 14))) + assertEquals(Point(29, 20), v.region(Point(32, 16))) + assertEquals(Point(29, 20), v.region(Point(32, 18))) + assertEquals(Point(34, 21), v.region(Point(32, 20))) + assertEquals(Point(34, 21), v.region(Point(32, 22))) + assertEquals(Point(34, 21), v.region(Point(32, 24))) + assertEquals(Point(34, 21), v.region(Point(32, 26))) + assertEquals(Point(34, 21), v.region(Point(32, 28))) + assertEquals(Point(29, 35), v.region(Point(32, 30))) + assertEquals(Point(29, 35), v.region(Point(32, 32))) + assertEquals(Point(29, 35), v.region(Point(32, 34))) + assertEquals(Point(29, 35), v.region(Point(32, 36))) + assertEquals(Point(32, 41), v.region(Point(32, 38))) + assertEquals(Point(32, 41), v.region(Point(32, 40))) + assertEquals(Point(32, 41), v.region(Point(32, 42))) + assertEquals(Point(32, 41), v.region(Point(32, 44))) + assertEquals(Point(32, 41), v.region(Point(32, 46))) + assertEquals(Point(32, 41), v.region(Point(32, 48))) + assertEquals(Point(41, 4), v.region(Point(34, 0))) + assertEquals(Point(32, 9), v.region(Point(34, 2))) + assertEquals(Point(32, 9), v.region(Point(34, 4))) + assertEquals(Point(32, 9), v.region(Point(34, 6))) + assertEquals(Point(32, 9), v.region(Point(34, 8))) + assertEquals(Point(32, 9), v.region(Point(34, 10))) + assertEquals(Point(36, 11), v.region(Point(34, 12))) + assertEquals(Point(36, 11), v.region(Point(34, 14))) + assertEquals(Point(34, 21), v.region(Point(34, 16))) + assertEquals(Point(34, 21), v.region(Point(34, 18))) + assertEquals(Point(34, 21), v.region(Point(34, 20))) + assertEquals(Point(34, 21), v.region(Point(34, 22))) + assertEquals(Point(34, 21), v.region(Point(34, 24))) + assertEquals(Point(34, 21), v.region(Point(34, 26))) + assertEquals(Point(40, 28), v.region(Point(34, 28))) + assertEquals(Point(37, 34), v.region(Point(34, 30))) + assertEquals(Point(37, 34), v.region(Point(34, 32))) + assertEquals(Point(37, 34), v.region(Point(34, 34))) + assertEquals(Point(37, 34), v.region(Point(34, 36))) + assertEquals(Point(37, 39), v.region(Point(34, 38))) + assertEquals(Point(32, 41), v.region(Point(34, 40))) + assertEquals(Point(32, 41), v.region(Point(34, 42))) + assertEquals(Point(32, 41), v.region(Point(34, 44))) + assertEquals(Point(32, 41), v.region(Point(34, 46))) + assertEquals(Point(32, 41), v.region(Point(34, 48))) + assertEquals(Point(41, 4), v.region(Point(36, 0))) + assertEquals(Point(41, 4), v.region(Point(36, 2))) + assertEquals(Point(41, 4), v.region(Point(36, 4))) + assertEquals(Point(32, 9), v.region(Point(36, 6))) + assertEquals(Point(36, 11), v.region(Point(36, 8))) + assertEquals(Point(36, 11), v.region(Point(36, 10))) + assertEquals(Point(36, 11), v.region(Point(36, 12))) + assertEquals(Point(36, 11), v.region(Point(36, 14))) + assertEquals(Point(39, 15), v.region(Point(36, 16))) + assertEquals(Point(34, 21), v.region(Point(36, 18))) + assertEquals(Point(34, 21), v.region(Point(36, 20))) + assertEquals(Point(34, 21), v.region(Point(36, 22))) + assertEquals(Point(34, 21), v.region(Point(36, 24))) + assertEquals(Point(40, 26), v.region(Point(36, 26))) + assertEquals(Point(40, 28), v.region(Point(36, 28))) + assertEquals(Point(37, 34), v.region(Point(36, 30))) + assertEquals(Point(37, 34), v.region(Point(36, 32))) + assertEquals(Point(37, 34), v.region(Point(36, 34))) + assertEquals(Point(37, 34), v.region(Point(36, 36))) + assertEquals(Point(37, 39), v.region(Point(36, 38))) + assertEquals(Point(37, 39), v.region(Point(36, 40))) + assertEquals(Point(37, 39), v.region(Point(36, 42))) + assertEquals(Point(32, 41), v.region(Point(36, 44))) + assertEquals(Point(32, 41), v.region(Point(36, 46))) + assertEquals(Point(32, 41), v.region(Point(36, 48))) + assertEquals(Point(41, 4), v.region(Point(38, 0))) + assertEquals(Point(41, 4), v.region(Point(38, 2))) + assertEquals(Point(41, 4), v.region(Point(38, 4))) + assertEquals(Point(41, 4), v.region(Point(38, 6))) + assertEquals(Point(36, 11), v.region(Point(38, 8))) + assertEquals(Point(36, 11), v.region(Point(38, 10))) + assertEquals(Point(36, 11), v.region(Point(38, 12))) + assertEquals(Point(39, 15), v.region(Point(38, 14))) + assertEquals(Point(39, 15), v.region(Point(38, 16))) + assertEquals(Point(39, 15), v.region(Point(38, 18))) + assertEquals(Point(34, 21), v.region(Point(38, 20))) + assertEquals(Point(34, 21), v.region(Point(38, 22))) + assertEquals(Point(40, 26), v.region(Point(38, 24))) + assertEquals(Point(40, 26), v.region(Point(38, 26))) + assertEquals(Point(40, 28), v.region(Point(38, 28))) + assertEquals(Point(40, 28), v.region(Point(38, 30))) + assertEquals(Point(37, 34), v.region(Point(38, 32))) + assertEquals(Point(37, 34), v.region(Point(38, 34))) + assertEquals(Point(37, 34), v.region(Point(38, 36))) + assertEquals(Point(37, 39), v.region(Point(38, 38))) + assertEquals(Point(37, 39), v.region(Point(38, 40))) + assertEquals(Point(37, 39), v.region(Point(38, 42))) + assertEquals(Point(37, 39), v.region(Point(38, 44))) + assertEquals(Point(37, 39), v.region(Point(38, 46))) + assertEquals(Point(44, 42), v.region(Point(38, 48))) + assertEquals(Point(41, 4), v.region(Point(40, 0))) + assertEquals(Point(41, 4), v.region(Point(40, 2))) + assertEquals(Point(41, 4), v.region(Point(40, 4))) + assertEquals(Point(41, 4), v.region(Point(40, 6))) + assertEquals(Point(42, 9), v.region(Point(40, 8))) + assertEquals(Point(42, 9), v.region(Point(40, 10))) + assertEquals(Point(39, 15), v.region(Point(40, 12))) + assertEquals(Point(39, 15), v.region(Point(40, 14))) + assertEquals(Point(39, 15), v.region(Point(40, 16))) + assertEquals(Point(39, 15), v.region(Point(40, 18))) + assertEquals(Point(39, 15), v.region(Point(40, 20))) + assertEquals(Point(40, 26), v.region(Point(40, 22))) + assertEquals(Point(40, 26), v.region(Point(40, 24))) + assertEquals(Point(40, 26), v.region(Point(40, 26))) + assertEquals(Point(40, 28), v.region(Point(40, 28))) + assertEquals(Point(40, 28), v.region(Point(40, 30))) + assertEquals(Point(41, 34), v.region(Point(40, 32))) + assertEquals(Point(41, 34), v.region(Point(40, 34))) + assertEquals(Point(42, 36), v.region(Point(40, 36))) + assertEquals(Point(42, 36), v.region(Point(40, 38))) + assertEquals(Point(37, 39), v.region(Point(40, 40))) + assertEquals(Point(44, 42), v.region(Point(40, 42))) + assertEquals(Point(44, 42), v.region(Point(40, 44))) + assertEquals(Point(44, 42), v.region(Point(40, 46))) + assertEquals(Point(44, 42), v.region(Point(40, 48))) + assertEquals(Point(41, 4), v.region(Point(42, 0))) + assertEquals(Point(41, 4), v.region(Point(42, 2))) + assertEquals(Point(41, 4), v.region(Point(42, 4))) + assertEquals(Point(41, 4), v.region(Point(42, 6))) + assertEquals(Point(42, 9), v.region(Point(42, 8))) + assertEquals(Point(42, 9), v.region(Point(42, 10))) + assertEquals(Point(42, 9), v.region(Point(42, 12))) + assertEquals(Point(39, 15), v.region(Point(42, 14))) + assertEquals(Point(39, 15), v.region(Point(42, 16))) + assertEquals(Point(39, 15), v.region(Point(42, 18))) + assertEquals(Point(45, 25), v.region(Point(42, 20))) + assertEquals(Point(45, 25), v.region(Point(42, 22))) + assertEquals(Point(40, 26), v.region(Point(42, 24))) + assertEquals(Point(40, 26), v.region(Point(42, 26))) + assertEquals(Point(40, 28), v.region(Point(42, 28))) + assertEquals(Point(43, 30), v.region(Point(42, 30))) + assertEquals(Point(41, 34), v.region(Point(42, 32))) + assertEquals(Point(41, 34), v.region(Point(42, 34))) + assertEquals(Point(42, 36), v.region(Point(42, 36))) + assertEquals(Point(42, 36), v.region(Point(42, 38))) + assertEquals(Point(44, 42), v.region(Point(42, 40))) + assertEquals(Point(44, 42), v.region(Point(42, 42))) + assertEquals(Point(44, 42), v.region(Point(42, 44))) + assertEquals(Point(44, 42), v.region(Point(42, 46))) + assertEquals(Point(44, 42), v.region(Point(42, 48))) + assertEquals(Point(41, 4), v.region(Point(44, 0))) + assertEquals(Point(41, 4), v.region(Point(44, 2))) + assertEquals(Point(41, 4), v.region(Point(44, 4))) + assertEquals(Point(47, 7), v.region(Point(44, 6))) + assertEquals(Point(42, 9), v.region(Point(44, 8))) + assertEquals(Point(42, 9), v.region(Point(44, 10))) + assertEquals(Point(42, 9), v.region(Point(44, 12))) + assertEquals(Point(39, 15), v.region(Point(44, 14))) + assertEquals(Point(39, 15), v.region(Point(44, 16))) + assertEquals(Point(39, 15), v.region(Point(44, 18))) + assertEquals(Point(45, 25), v.region(Point(44, 20))) + assertEquals(Point(45, 25), v.region(Point(44, 22))) + assertEquals(Point(45, 25), v.region(Point(44, 24))) + assertEquals(Point(44, 27), v.region(Point(44, 26))) + assertEquals(Point(44, 27), v.region(Point(44, 28))) + assertEquals(Point(43, 30), v.region(Point(44, 30))) + assertEquals(Point(43, 30), v.region(Point(44, 32))) + assertEquals(Point(42, 36), v.region(Point(44, 34))) + assertEquals(Point(42, 36), v.region(Point(44, 36))) + assertEquals(Point(42, 36), v.region(Point(44, 38))) + assertEquals(Point(44, 42), v.region(Point(44, 40))) + assertEquals(Point(44, 42), v.region(Point(44, 42))) + assertEquals(Point(44, 42), v.region(Point(44, 44))) + assertEquals(Point(44, 42), v.region(Point(44, 46))) + assertEquals(Point(44, 42), v.region(Point(44, 48))) + assertEquals(Point(41, 4), v.region(Point(46, 0))) + assertEquals(Point(47, 7), v.region(Point(46, 2))) + assertEquals(Point(47, 7), v.region(Point(46, 4))) + assertEquals(Point(47, 7), v.region(Point(46, 6))) + assertEquals(Point(47, 7), v.region(Point(46, 8))) + assertEquals(Point(47, 7), v.region(Point(46, 10))) + assertEquals(Point(42, 9), v.region(Point(46, 12))) + assertEquals(Point(42, 9), v.region(Point(46, 14))) + assertEquals(Point(39, 15), v.region(Point(46, 16))) + assertEquals(Point(45, 25), v.region(Point(46, 18))) + assertEquals(Point(45, 25), v.region(Point(46, 20))) + assertEquals(Point(45, 25), v.region(Point(46, 22))) + assertEquals(Point(45, 25), v.region(Point(46, 24))) + assertEquals(Point(45, 25), v.region(Point(46, 26))) + assertEquals(Point(47, 27), v.region(Point(46, 28))) + assertEquals(Point(43, 30), v.region(Point(46, 30))) + assertEquals(Point(43, 30), v.region(Point(46, 32))) + assertEquals(Point(42, 36), v.region(Point(46, 34))) + assertEquals(Point(42, 36), v.region(Point(46, 36))) + assertEquals(Point(44, 42), v.region(Point(46, 38))) + assertEquals(Point(44, 42), v.region(Point(46, 40))) + assertEquals(Point(44, 42), v.region(Point(46, 42))) + assertEquals(Point(44, 42), v.region(Point(46, 44))) + assertEquals(Point(44, 42), v.region(Point(46, 46))) + assertEquals(Point(44, 42), v.region(Point(46, 48))) + assertEquals(Point(47, 7), v.region(Point(48, 0))) + assertEquals(Point(47, 7), v.region(Point(48, 2))) + assertEquals(Point(47, 7), v.region(Point(48, 4))) + assertEquals(Point(47, 7), v.region(Point(48, 6))) + assertEquals(Point(47, 7), v.region(Point(48, 8))) + assertEquals(Point(47, 7), v.region(Point(48, 10))) + assertEquals(Point(47, 7), v.region(Point(48, 12))) + assertEquals(Point(47, 7), v.region(Point(48, 14))) + assertEquals(Point(39, 15), v.region(Point(48, 16))) + assertEquals(Point(45, 25), v.region(Point(48, 18))) + assertEquals(Point(45, 25), v.region(Point(48, 20))) + assertEquals(Point(45, 25), v.region(Point(48, 22))) + assertEquals(Point(45, 25), v.region(Point(48, 24))) + assertEquals(Point(47, 27), v.region(Point(48, 26))) + assertEquals(Point(47, 27), v.region(Point(48, 28))) + assertEquals(Point(47, 27), v.region(Point(48, 30))) + assertEquals(Point(47, 27), v.region(Point(48, 32))) + assertEquals(Point(42, 36), v.region(Point(48, 34))) + assertEquals(Point(42, 36), v.region(Point(48, 36))) + assertEquals(Point(44, 42), v.region(Point(48, 38))) + assertEquals(Point(44, 42), v.region(Point(48, 40))) + assertEquals(Point(44, 42), v.region(Point(48, 42))) + assertEquals(Point(44, 42), v.region(Point(48, 44))) + assertEquals(Point(44, 42), v.region(Point(48, 46))) + assertEquals(Point(44, 42), v.region(Point(48, 48))) } @Test fun testManhattanDistance() { val v = Voronoi( - listOf( - Point(1, 6), - Point(4, 3), - Point(5, 3), - Point(6, 8), - Point(9, 6), - Point(3, 3), - Point(5, 1), - Point(1, 0), - Point(4, 3), - Point(3, 6) - ), Point.MANHATTAN_DISTANCE_FUNC + listOf( + Point(1, 6), + Point(4, 3), + Point(5, 3), + Point(6, 8), + Point(9, 6), + Point(3, 3), + Point(5, 1), + Point(1, 0), + Point(4, 3), + Point(3, 6) + ), Point.MANHATTAN_DISTANCE_FUNC ) - Assert.assertEquals(Point(1, 0), v.region(Point(0, 0))) - Assert.assertEquals(Point(1, 6), v.region(Point(0, 4))) - Assert.assertEquals(Point(1, 6), v.region(Point(0, 8))) - Assert.assertEquals(Point(5, 1), v.region(Point(4, 0))) - Assert.assertEquals(Point(4, 3), v.region(Point(4, 4))) - Assert.assertEquals(Point(6, 8), v.region(Point(4, 8))) - Assert.assertEquals(Point(5, 1), v.region(Point(8, 0))) - Assert.assertEquals(Point(9, 6), v.region(Point(8, 4))) - Assert.assertEquals(Point(6, 8), v.region(Point(8, 8))) + assertEquals(Point(1, 0), v.region(Point(0, 0))) + assertEquals(Point(1, 6), v.region(Point(0, 4))) + assertEquals(Point(1, 6), v.region(Point(0, 8))) + assertEquals(Point(5, 1), v.region(Point(4, 0))) + assertEquals(Point(4, 3), v.region(Point(4, 4))) + assertEquals(Point(6, 8), v.region(Point(4, 8))) + assertEquals(Point(5, 1), v.region(Point(8, 0))) + assertEquals(Point(9, 6), v.region(Point(8, 4))) + assertEquals(Point(6, 8), v.region(Point(8, 8))) } } \ No newline at end of file diff --git a/src/test/io/uuddlrlrba/ktalgs/geometry/convexhull/ConvexHullTest.kt b/src/test/io/uuddlrlrba/ktalgs/geometry/convexhull/ConvexHullTest.kt index a2afabd..7665c23 100644 --- a/src/test/io/uuddlrlrba/ktalgs/geometry/convexhull/ConvexHullTest.kt +++ b/src/test/io/uuddlrlrba/ktalgs/geometry/convexhull/ConvexHullTest.kt @@ -23,96 +23,97 @@ package io.uuddlrlrba.ktalgs.geometry.convexhull import io.uuddlrlrba.ktalgs.geometry.Point -import org.junit.Assert -import org.junit.Test +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertFailsWith abstract class ConvexHullTest(val strategy: ConvexHullAlgorithm) { @Test fun test1() { val points = arrayOf( - Point(1, 1), - Point(2, 5), - Point(3, 3), - Point(5, 3), - Point(3, 2), - Point(2, 2) + Point(1, 1), + Point(2, 5), + Point(3, 3), + Point(5, 3), + Point(3, 2), + Point(2, 2) ) val expected = sortedSetOf( - Point(1, 1), - Point(2, 5), - Point(5, 3) + Point(1, 1), + Point(2, 5), + Point(5, 3) ) val hull = strategy.convexHull(points) - Assert.assertEquals(expected, hull.toSortedSet()) + assertEquals(expected, hull.toSortedSet()) } @Test fun test2() { val points = arrayOf( - Point(3, 2), - Point(2, 5), - Point(4, 5) + Point(3, 2), + Point(2, 5), + Point(4, 5) ) val expected = points.toSortedSet() val hull = strategy.convexHull(points) - Assert.assertEquals(expected, hull.toSortedSet()) + assertEquals(expected, hull.toSortedSet()) } @Test fun test3() { val points = arrayOf( - Point(0, 3), - Point(2, 2), - Point(1, 1), - Point(2, 1), - Point(3, 0), - Point(0, 0), - Point(3, 3) + Point(0, 3), + Point(2, 2), + Point(1, 1), + Point(2, 1), + Point(3, 0), + Point(0, 0), + Point(3, 3) ) val expected = sortedSetOf( - Point(0, 3), - Point(3, 0), - Point(0, 0), - Point(3, 3) + Point(0, 3), + Point(3, 0), + Point(0, 0), + Point(3, 3) ) val hull = strategy.convexHull(points) - Assert.assertEquals(expected, hull.toSortedSet()) + assertEquals(expected, hull.toSortedSet()) } @Test fun test4() { val expected = arrayOf( - Point(10, 3), - Point(8, 0), - Point(2, 0), - Point(0, 3), - Point(2, 6), - Point(8, 6) + Point(10, 3), + Point(8, 0), + Point(2, 0), + Point(0, 3), + Point(2, 6), + Point(8, 6) ) val points = expected + arrayOf( - Point(3, 5), - Point(3, 3), - Point(6, 3), - Point(6, 3), - Point(7, 1), - Point(8, 4) + Point(3, 5), + Point(3, 3), + Point(6, 3), + Point(6, 3), + Point(7, 1), + Point(8, 4) ) val hull = strategy.convexHull(points) - Assert.assertEquals(expected.toSortedSet(), hull.toSortedSet()) + assertEquals(expected.toSortedSet(), hull.toSortedSet()) } - @Test(expected= IllegalArgumentException::class) + @Test fun exceptionTest0() { - strategy.convexHull(emptyArray()) + assertFailsWith { strategy.convexHull(emptyArray()) } } - @Test(expected= IllegalArgumentException::class) + @Test fun exceptionTest1() { - strategy.convexHull(arrayOf(Point(0, 0))) + assertFailsWith { strategy.convexHull(arrayOf(Point(0, 0))) } } - @Test(expected= IllegalArgumentException::class) + @Test fun exceptionTest2() { - strategy.convexHull(arrayOf(Point(0, 0), Point(1, 1))) + assertFailsWith { strategy.convexHull(arrayOf(Point(0, 0), Point(1, 1))) } } } \ No newline at end of file diff --git a/src/test/io/uuddlrlrba/ktalgs/graphs/undirected/weighted/MSTTest.kt b/src/test/io/uuddlrlrba/ktalgs/graphs/undirected/weighted/MSTTest.kt index bb14071..ff7bb5f 100644 --- a/src/test/io/uuddlrlrba/ktalgs/graphs/undirected/weighted/MSTTest.kt +++ b/src/test/io/uuddlrlrba/ktalgs/graphs/undirected/weighted/MSTTest.kt @@ -22,10 +22,10 @@ package io.uuddlrlrba.ktalgs.graphs.undirected.weighted -import org.junit.Assert -import org.junit.Test import java.net.URL import java.util.* +import kotlin.test.Test +import kotlin.test.assertEquals abstract class MSTTest(val strategy: (UWGraph) -> (MST)) { @Test @@ -38,7 +38,7 @@ abstract class MSTTest(val strategy: (UWGraph) -> (MST)) { graph.addEdge(0, 1, 4.0) graph.addEdge(1, 3, 3.0) val mst = strategy(graph) - Assert.assertEquals(7.0, mst.weight(), 1e-12) + assertEquals(7.0, mst.weight(), 1e-12) } @Test @@ -52,35 +52,35 @@ abstract class MSTTest(val strategy: (UWGraph) -> (MST)) { graph.addEdge(1, 4, 3.0) graph.addEdge(1, 3, 5.0) val mst = strategy(graph) - Assert.assertEquals(11.0, mst.weight(), 1e-12) + assertEquals(11.0, mst.weight(), 1e-12) } @Test fun test3() { val graph = readFromURL(URL("https://algs4.cs.princeton.edu/43mst/tinyEWG.txt")) val mst = strategy(graph) - Assert.assertEquals(1.81, mst.weight(), 1e-12) + assertEquals(1.81, mst.weight(), 1e-12) } @Test fun test4() { val graph = readFromURL(URL("https://algs4.cs.princeton.edu/43mst/mediumEWG.txt")) val mst = strategy(graph) - Assert.assertEquals(10.46351, mst.weight(), 1e-12) + assertEquals(10.46351, mst.weight(), 1e-12) } @Test fun test5() { val graph = readFromURL(URL("https://algs4.cs.princeton.edu/43mst/1000EWG.txt")) val mst = strategy(graph) - Assert.assertEquals(20.77320, mst.weight(), 1e-12) + assertEquals(20.77320, mst.weight(), 1e-12) } @Test fun test6() { val graph = readFromURL(URL("https://algs4.cs.princeton.edu/43mst/10000EWG.txt")) val mst = strategy(graph) - Assert.assertEquals(65.24072, mst.weight(), 1e-12) + assertEquals(65.24072, mst.weight(), 1e-12) } fun readFromURL(url: URL): UWGraph { diff --git a/src/test/io/uuddlrlrba/ktalgs/math/BinomialTest.kt b/src/test/io/uuddlrlrba/ktalgs/math/BinomialTest.kt index 871e89e..5941faf 100644 --- a/src/test/io/uuddlrlrba/ktalgs/math/BinomialTest.kt +++ b/src/test/io/uuddlrlrba/ktalgs/math/BinomialTest.kt @@ -22,32 +22,32 @@ package io.uuddlrlrba.ktalgs.math -import org.junit.Assert -import org.junit.Test +import kotlin.test.Test +import kotlin.test.assertEquals class BinomialTest { @Test fun test1() { - Assert.assertEquals(0, binomial(0, 1)) - Assert.assertEquals(1, binomial(1, 1)) - Assert.assertEquals(2, binomial(2, 1)) - Assert.assertEquals(3, binomial(3, 1)) - Assert.assertEquals(3, binomial(3, 2)) - Assert.assertEquals(4, binomial(4, 1)) + assertEquals(0, binomial(0, 1)) + assertEquals(1, binomial(1, 1)) + assertEquals(2, binomial(2, 1)) + assertEquals(3, binomial(3, 1)) + assertEquals(3, binomial(3, 2)) + assertEquals(4, binomial(4, 1)) - Assert.assertEquals(1, binomial(5, 0)) - Assert.assertEquals(5, binomial(5, 1)) - Assert.assertEquals(10, binomial(5, 2)) - Assert.assertEquals(10, binomial(5, 3)) - Assert.assertEquals(5, binomial(5, 4)) - Assert.assertEquals(1, binomial(5, 5)) + assertEquals(1, binomial(5, 0)) + assertEquals(5, binomial(5, 1)) + assertEquals(10, binomial(5, 2)) + assertEquals(10, binomial(5, 3)) + assertEquals(5, binomial(5, 4)) + assertEquals(1, binomial(5, 5)) - Assert.assertEquals(1, binomial(6, 0)) - Assert.assertEquals(6, binomial(6, 1)) - Assert.assertEquals(15, binomial(6, 2)) - Assert.assertEquals(20, binomial(6, 3)) - Assert.assertEquals(15, binomial(6, 4)) - Assert.assertEquals(6, binomial(6, 5)) - Assert.assertEquals(1, binomial(6, 6)) + assertEquals(1, binomial(6, 0)) + assertEquals(6, binomial(6, 1)) + assertEquals(15, binomial(6, 2)) + assertEquals(20, binomial(6, 3)) + assertEquals(15, binomial(6, 4)) + assertEquals(6, binomial(6, 5)) + assertEquals(1, binomial(6, 6)) } } diff --git a/src/test/io/uuddlrlrba/ktalgs/math/GcdKtTest.kt b/src/test/io/uuddlrlrba/ktalgs/math/GcdKtTest.kt index d992e5b..d3ed401 100644 --- a/src/test/io/uuddlrlrba/ktalgs/math/GcdKtTest.kt +++ b/src/test/io/uuddlrlrba/ktalgs/math/GcdKtTest.kt @@ -22,9 +22,8 @@ package io.uuddlrlrba.ktalgs.math -import org.junit.Test - -import org.junit.Assert.* +import kotlin.test.Test +import kotlin.test.assertEquals class GcdKtTest { @Test diff --git a/src/test/io/uuddlrlrba/ktalgs/math/NewtonMethodKtTest.kt b/src/test/io/uuddlrlrba/ktalgs/math/NewtonMethodKtTest.kt index 5b766b5..0a8a3da 100644 --- a/src/test/io/uuddlrlrba/ktalgs/math/NewtonMethodKtTest.kt +++ b/src/test/io/uuddlrlrba/ktalgs/math/NewtonMethodKtTest.kt @@ -22,9 +22,10 @@ package io.uuddlrlrba.ktalgs.math -import org.junit.Test - -import org.junit.Assert.* +import kotlin.math.absoluteValue +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue class NewtonMethodKtTest { @Test @@ -34,8 +35,8 @@ class NewtonMethodKtTest { assertEquals(2.toDouble(), sqrt(4.toDouble()), 1e-15) assertEquals(4.toDouble(), sqrt(16.toDouble()), 1e-12) for (i in 7 until 99) { - for (j in -15 until -1) { - assertEquals(sqrt(i.toDouble()), sqrt(i.toDouble()), j.toDouble()) + for (j in 2 until 16) { + assertEquals(sqrt(i.toDouble()), sqrt(i.toDouble()), j.toDouble().absoluteValue) } } } @@ -46,7 +47,7 @@ class NewtonMethodKtTest { assertEquals(2.toDouble(), sqrt(4), 1e-15) assertEquals(4.toDouble(), sqrt(16), 1e-12) for (i in 7 until 99) { - for (j in -15 until -1) { + for (j in 2 until 16) { assertEquals(sqrt(i), sqrt(i), j.toDouble()) } } diff --git a/src/test/io/uuddlrlrba/ktalgs/search/AbstractSearchTest.kt b/src/test/io/uuddlrlrba/ktalgs/search/AbstractSearchTest.kt index 557b647..93f12a1 100644 --- a/src/test/io/uuddlrlrba/ktalgs/search/AbstractSearchTest.kt +++ b/src/test/io/uuddlrlrba/ktalgs/search/AbstractSearchTest.kt @@ -22,41 +22,41 @@ package io.uuddlrlrba.ktalgs.search -import org.junit.Assert -import org.junit.Test +import kotlin.test.Test +import kotlin.test.assertEquals abstract class AbstractSearchTest>(val strategy: T) { @Test fun emptyTest() { - Assert.assertEquals(-1, strategy.perform(emptyArray(), 1)) + assertEquals(-1, strategy.perform(emptyArray(), 1)) } @Test fun singletonTest() { - Assert.assertEquals(0, strategy.perform(arrayOf(1), 1)) - Assert.assertEquals(-1, strategy.perform(arrayOf(1), 2)) + assertEquals(0, strategy.perform(arrayOf(1), 1)) + assertEquals(-1, strategy.perform(arrayOf(1), 2)) } @Test fun twoElementsTest() { - Assert.assertEquals(0, strategy.perform(arrayOf(1, 2), 1)) - Assert.assertEquals(1, strategy.perform(arrayOf(1, 2), 2)) - Assert.assertEquals(-1, strategy.perform(arrayOf(1, 2), 3)) + assertEquals(0, strategy.perform(arrayOf(1, 2), 1)) + assertEquals(1, strategy.perform(arrayOf(1, 2), 2)) + assertEquals(-1, strategy.perform(arrayOf(1, 2), 3)) } @Test fun tenElementsTest() { - Assert.assertEquals(0, strategy.perform(arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 1)) - Assert.assertEquals(1, strategy.perform(arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 2)) - Assert.assertEquals(2, strategy.perform(arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 3)) - Assert.assertEquals(3, strategy.perform(arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 4)) - Assert.assertEquals(4, strategy.perform(arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 5)) - Assert.assertEquals(5, strategy.perform(arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 6)) - Assert.assertEquals(6, strategy.perform(arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 7)) - Assert.assertEquals(7, strategy.perform(arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 8)) - Assert.assertEquals(8, strategy.perform(arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 9)) - Assert.assertEquals(9, strategy.perform(arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 10)) - Assert.assertEquals(-1, strategy.perform(arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 0)) - Assert.assertEquals(-1, strategy.perform(arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 11)) + assertEquals(0, strategy.perform(arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 1)) + assertEquals(1, strategy.perform(arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 2)) + assertEquals(2, strategy.perform(arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 3)) + assertEquals(3, strategy.perform(arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 4)) + assertEquals(4, strategy.perform(arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 5)) + assertEquals(5, strategy.perform(arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 6)) + assertEquals(6, strategy.perform(arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 7)) + assertEquals(7, strategy.perform(arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 8)) + assertEquals(8, strategy.perform(arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 9)) + assertEquals(9, strategy.perform(arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 10)) + assertEquals(-1, strategy.perform(arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 0)) + assertEquals(-1, strategy.perform(arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 11)) } } diff --git a/src/test/io/uuddlrlrba/ktalgs/sorts/AbstractSortTest.kt b/src/test/io/uuddlrlrba/ktalgs/sorts/AbstractSortTest.kt index 0eeea73..7bffaf4 100644 --- a/src/test/io/uuddlrlrba/ktalgs/sorts/AbstractSortTest.kt +++ b/src/test/io/uuddlrlrba/ktalgs/sorts/AbstractSortTest.kt @@ -22,56 +22,56 @@ package io.uuddlrlrba.ktalgs.sorts -import org.junit.Assert -import org.junit.Test +import kotlin.test.Test +import kotlin.test.assertContentEquals abstract class AbstractSortTest(val strategy: T) { @Test fun emptyTest() { val arr = arrayOf() strategy.perform(arr) - Assert.assertArrayEquals(arrayOf(), arr) + assertContentEquals(arrayOf(), arr) } @Test fun singletonTest() { val arr = arrayOf(1) strategy.perform(arr) - Assert.assertArrayEquals(arrayOf(1), arr) + assertContentEquals(arrayOf(1), arr) } @Test fun twoElementsInOrderTest() { val arr = arrayOf(42, 43) strategy.perform(arr) - Assert.assertArrayEquals(arrayOf(42, 43), arr) + assertContentEquals(arrayOf(42, 43), arr) } @Test fun twoElementsOutOfOrderTest() { val arr = arrayOf(43, 42) strategy.perform(arr) - Assert.assertArrayEquals(arrayOf(42, 43), arr) + assertContentEquals(arrayOf(42, 43), arr) } @Test fun twoElementsEqualTest() { val arr = arrayOf(42, 42) strategy.perform(arr) - Assert.assertArrayEquals(arrayOf(42, 42), arr) + assertContentEquals(arrayOf(42, 42), arr) } @Test fun tenElementsReverseTest() { val arr = arrayOf(10, 9, 8, 7, 6, 5, 4, 3, 2, 1) strategy.perform(arr) - Assert.assertArrayEquals(arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), arr) + assertContentEquals(arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), arr) } @Test fun tenElementsTest() { val arr = arrayOf(3, 2, 7, 6, 1, 8, 10, 9, 4, 5) strategy.perform(arr) - Assert.assertArrayEquals(arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), arr) + assertContentEquals(arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), arr) } }